#include <kdata.h>
#include <stdarg.h>
+/* Error checking */
+
+void validchk(uint16_t dev, const char *p)
+{
+ if (!validdev(dev)) {
+ kputs(p);
+ kputchar(':');
+ panic(PANIC_INVD);
+ }
+}
+
/* Buffer pool management */
/*********************************************************************
The high-level interface is through bread() and bfree().
int bdread(bufptr bp)
{
uint16_t dev = bp->bf_dev;
- if (!validdev(dev))
- panic(PANIC_BDR_INVD);
+
+ validchk(dev, PANIC_BDR);
udata.u_buf = bp;
return ((*dev_tab[major(dev)].dev_read) (minor(dev), 0, 0));
int bdwrite(bufptr bp)
{
uint16_t dev = bp->bf_dev;
- if (!validdev(dev))
- panic(PANIC_BDW_INVD);
+
+ validchk(dev, PANIC_BDW);
udata.u_buf = bp;
return ((*dev_tab[major(dev)].dev_write) (minor(dev), 0, 0));
int cdread(uint16_t dev, uint8_t flag)
{
- if (!validdev(dev))
- panic(PANIC_CDR_INVD);
+ validchk(dev, PANIC_CDR);
return ((*dev_tab[major(dev)].dev_read) (minor(dev), 1, flag));
}
int cdwrite(uint16_t dev, uint8_t flag)
{
- if (!validdev(dev))
- panic(PANIC_CDW_INVD);
+ validchk(dev, PANIC_CDW);
return ((*dev_tab[major(dev)].dev_write) (minor(dev), 1, flag));
}
int d_close(uint16_t dev)
{
- if (!validdev(dev))
- panic(PANIC_DCL_INVD);
+ validchk(dev, PANIC_DCL);
bdrop(dev);
return (*dev_tab[major(dev)].dev_close) (minor(dev));
}
struct mount *m;
bool isnew = false;
- if(!validdev(dev))
- panic(PANIC_IOPEN_BAD);
+ validchk(dev, PANIC_IOPEN);
if(!ino){ /* ino==0 means we want a new one */
isnew = true;
extern uint8_t need_resched;
/* devio.c */
+extern void validchk(uint16_t dev, const char *p);
extern uint8_t *bread (uint16_t dev, blkno_t blk, bool rewrite);
extern void brelse(void *bp);
extern void bawrite(void *bp);
#define PANIC_FREE0 "free0"
#define PANIC_WANTBSYB "want busy block"
#define PANIC_NOFREEB "no free buffers"
-#define PANIC_BDR_INVD "bdread: invalid dev"
-#define PANIC_BDW_INVD "bdwrite: invalid dev"
-#define PANIC_CDR_INVD "cdread: invalid dev"
-#define PANIC_CDW_INVD "cdwrite: invalid dev"
-#define PANIC_DCL_INVD "d_close: bad device"
+#define PANIC_INVD "invalid dev"
+#define PANIC_BDR "bdread"
+#define PANIC_BDW "bdwrite"
+#define PANIC_CDR "cdread"
+#define PANIC_CDW "cdwrite"
+#define PANIC_DCL "d_close"
#define PANIC_MLEAK "mem_alloc: leak"
-#define PANIC_IOPEN_BAD "i_open: bad dev"
+#define PANIC_IOPEN "i_open"
#define PANIC_GD_BAD "getdev bad dev"
#define PANIC_IFREE_BADI "i_free: bad ino"
#define PANIC_INODE_FREED "inode freed."