From ac62553475cffc00ee05dd2ac89d0a493058dcb9 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Sun, 25 Oct 2015 21:07:31 +0000 Subject: [PATCH] panic: slight squash from de-duplication --- Kernel/devio.c | 28 ++++++++++++++++++---------- Kernel/filesys.c | 3 +-- Kernel/include/kernel.h | 1 + Kernel/include/panic.h | 13 +++++++------ 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/Kernel/devio.c b/Kernel/devio.c index e5687367..36923219 100644 --- a/Kernel/devio.c +++ b/Kernel/devio.c @@ -3,6 +3,17 @@ #include #include +/* 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(). @@ -226,8 +237,8 @@ Any device other than a disk will have only raw access. 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)); @@ -237,8 +248,8 @@ int bdread(bufptr bp) 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)); @@ -246,15 +257,13 @@ int bdwrite(bufptr bp) 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)); } @@ -269,8 +278,7 @@ int d_open(uint16_t dev, uint8_t 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)); } diff --git a/Kernel/filesys.c b/Kernel/filesys.c index d97793c2..b99105b7 100644 --- a/Kernel/filesys.c +++ b/Kernel/filesys.c @@ -191,8 +191,7 @@ inoptr i_open(uint16_t dev, uint16_t ino) 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; diff --git a/Kernel/include/kernel.h b/Kernel/include/kernel.h index 8f7a7e12..87d7a6f4 100644 --- a/Kernel/include/kernel.h +++ b/Kernel/include/kernel.h @@ -663,6 +663,7 @@ extern int16_t dofork(ptptr child); 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); diff --git a/Kernel/include/panic.h b/Kernel/include/panic.h index 8643eed0..4ec59f34 100644 --- a/Kernel/include/panic.h +++ b/Kernel/include/panic.h @@ -9,13 +9,14 @@ #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." -- 2.34.1