panic: slight squash from de-duplication
authorAlan Cox <alan@etchedpixels.co.uk>
Sun, 25 Oct 2015 21:07:31 +0000 (21:07 +0000)
committerAlan Cox <alan@etchedpixels.co.uk>
Sun, 25 Oct 2015 21:07:31 +0000 (21:07 +0000)
Kernel/devio.c
Kernel/filesys.c
Kernel/include/kernel.h
Kernel/include/panic.h

index e568736..3692321 100644 (file)
@@ -3,6 +3,17 @@
 #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().
@@ -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));
 }
index d97793c..b99105b 100644 (file)
@@ -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;
index 8f7a7e1..87d7a6f 100644 (file)
@@ -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);
index 8643eed..4ec59f3 100644 (file)
@@ -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."