debugging: indent code properly and cleanups
authorErez_Zadok <ezk@cs.sunysb.edu>
Fri, 1 Jun 2007 03:13:14 +0000 (23:13 -0400)
committerErez_Zadok <ezk@cs.sunysb.edu>
Mon, 23 Jul 2007 00:50:48 +0000 (20:50 -0400)
Also make PRINT_CALLER look like a function.
Fix one small bug in __show_branch_counts.

Signed-off-by: Erez Zadok <ezk@cs.sunysb.edu>
fs/unionfs/debug.c

index ab168cc690973a98a5877ab265e56877991766bd..b99bc46e76f2f5341861ea1a4e178b3666116278 100644 (file)
@@ -17,7 +17,7 @@
  */
 
 /* it's always useful to know what part of the code called us */
-#define PRINT_CALLER                           \
+#define PRINT_CALLER()                         \
 do {                                           \
   if (!printed_caller) {                       \
     printk("PC:%s:%s:%d\n",fname,fxn,line);    \
@@ -37,316 +37,351 @@ do {                                              \
 void __unionfs_check_inode(const struct inode *inode,
                           const char *fname, const char *fxn, int line)
 {
-  int bindex;
-  int istart, iend;
-  struct inode *lower_inode;
-  struct super_block *sb;
-  int printed_caller = 0;
+       int bindex;
+       int istart, iend;
+       struct inode *lower_inode;
+       struct super_block *sb;
+       int printed_caller = 0;
 
-  /* for inodes now */
-  BUG_ON(!inode);
-  sb = inode->i_sb;
-  istart = ibstart(inode);
-  iend = ibend(inode);
-  if (istart > iend) {
-    PRINT_CALLER;
-    printk(" Ci0: inode=%p istart/end=%d:%d\n",
-          inode, istart, iend);
-  }
-  if ((istart == -1 && iend != -1) ||
-      (istart != -1 && iend == -1)) {
-    PRINT_CALLER;
-    printk(" Ci1: inode=%p istart/end=%d:%d\n",
-          inode, istart, iend);
-  }
-  if (!S_ISDIR(inode->i_mode)) {
-    if (iend != istart) {
-      PRINT_CALLER;
-      printk(" Ci2: inode=%p istart=%d iend=%d\n",
-            inode, istart, iend);
-    }
-  }
+       /* for inodes now */
+       BUG_ON(!inode);
+       sb = inode->i_sb;
+       istart = ibstart(inode);
+       iend = ibend(inode);
+       if (istart > iend) {
+               PRINT_CALLER();
+               printk(" Ci0: inode=%p istart/end=%d:%d\n",
+                      inode, istart, iend);
+       }
+       if ((istart == -1 && iend != -1) ||
+           (istart != -1 && iend == -1)) {
+               PRINT_CALLER();
+               printk(" Ci1: inode=%p istart/end=%d:%d\n",
+                      inode, istart, iend);
+       }
+       if (!S_ISDIR(inode->i_mode)) {
+               if (iend != istart) {
+                       PRINT_CALLER();
+                       printk(" Ci2: inode=%p istart=%d iend=%d\n",
+                              inode, istart, iend);
+               }
+       }
 
-  for (bindex = sbstart(sb); bindex < sbmax(sb); bindex++) {
-    if (!UNIONFS_I(inode)) {
-      PRINT_CALLER;
-      printk(" Ci3: no inode_info %p\n", inode);
-      return;
-    }
-    if (!UNIONFS_I(inode)->lower_inodes) {
-      PRINT_CALLER;
-      printk(" Ci4: no lower_inodes %p\n", inode);
-      return;
-    }
-    lower_inode = unionfs_lower_inode_idx(inode, bindex);
-    if (lower_inode) {
-      if (bindex < istart || bindex > iend) {
-       PRINT_CALLER;
-       printk(" Ci5: inode/linode=%p:%p bindex=%d istart/end=%d:%d\n",
-              inode, lower_inode, bindex, istart, iend);
-      } else if ((int)lower_inode == 0x5a5a5a5a) { /* freed inode! */
-       PRINT_CALLER;
-       printk(" Ci6: inode/linode=%p:%p bindex=%d istart/end=%d:%d\n",
-              inode, lower_inode, bindex, istart, iend);
-      }
-    } else {   /* lower_inode == NULL */
-      if (bindex >= istart && bindex <= iend) {
-       /*
-        * directories can have NULL lower inodes in b/t start/end, but
-        * NOT if at the start/end range.
-        */
-       if (!(S_ISDIR(inode->i_mode) && bindex > istart && bindex < iend)) {
-         PRINT_CALLER;
-         printk(" Ci7: inode/linode=%p:%p bindex=%d istart/end=%d:%d\n",
-                inode, lower_inode, bindex, istart, iend);
+       for (bindex = sbstart(sb); bindex < sbmax(sb); bindex++) {
+               if (!UNIONFS_I(inode)) {
+                       PRINT_CALLER();
+                       printk(" Ci3: no inode_info %p\n", inode);
+                       return;
+               }
+               if (!UNIONFS_I(inode)->lower_inodes) {
+                       PRINT_CALLER();
+                       printk(" Ci4: no lower_inodes %p\n", inode);
+                       return;
+               }
+               lower_inode = unionfs_lower_inode_idx(inode, bindex);
+               if (lower_inode) {
+                       if (bindex < istart || bindex > iend) {
+                               PRINT_CALLER();
+                               printk(" Ci5: inode/linode=%p:%p bindex=%d "
+                                      "istart/end=%d:%d\n", inode,
+                                      lower_inode, bindex, istart, iend);
+                       } else if ((int)lower_inode == 0x5a5a5a5a) {
+                               /* freed inode! */
+                               PRINT_CALLER();
+                               printk(" Ci6: inode/linode=%p:%p bindex=%d "
+                                      "istart/end=%d:%d\n", inode,
+                                      lower_inode, bindex, istart, iend);
+                       }
+               } else {        /* lower_inode == NULL */
+                       if (bindex >= istart && bindex <= iend) {
+                               /*
+                                * directories can have NULL lower inodes in
+                                * b/t start/end, but NOT if at the
+                                * start/end range.
+                                */
+                               if (!(S_ISDIR(inode->i_mode) &&
+                                     bindex > istart && bindex < iend)) {
+                                       PRINT_CALLER();
+                                       printk(" Ci7: inode/linode=%p:%p "
+                                              "bindex=%d istart/end=%d:%d\n",
+                                              inode, lower_inode, bindex,
+                                              istart, iend);
+                               }
+                       }
+               }
        }
-      }
-    }
-  }
 }
 
 void __unionfs_check_dentry(const struct dentry *dentry,
                            const char *fname, const char *fxn, int line)
 {
-  int bindex;
-  int dstart, dend, istart, iend;
-  struct dentry *lower_dentry;
-  struct inode *inode, *lower_inode;
-  struct super_block *sb;
-  struct vfsmount *lower_mnt;
-  int printed_caller = 0;
+       int bindex;
+       int dstart, dend, istart, iend;
+       struct dentry *lower_dentry;
+       struct inode *inode, *lower_inode;
+       struct super_block *sb;
+       struct vfsmount *lower_mnt;
+       int printed_caller = 0;
 
-  BUG_ON(!dentry);
-  sb = dentry->d_sb;
-  inode = dentry->d_inode;
-  dstart = dbstart(dentry);
-  dend = dbend(dentry);
-  BUG_ON(dstart > dend);
+       BUG_ON(!dentry);
+       sb = dentry->d_sb;
+       inode = dentry->d_inode;
+       dstart = dbstart(dentry);
+       dend = dbend(dentry);
+       BUG_ON(dstart > dend);
 
-  if ((dstart == -1 && dend != -1) ||
-      (dstart != -1 && dend == -1)) {
-    PRINT_CALLER;
-    printk(" CD0: dentry=%p dstart/end=%d:%d\n",
-          dentry, dstart, dend);
-  }
-  /*
-   * check for NULL dentries inside the start/end range, or
-   * non-NULL dentries outside the start/end range.
-   */
-  for (bindex = sbstart(sb); bindex < sbmax(sb); bindex++) {
-    lower_dentry = unionfs_lower_dentry_idx(dentry, bindex);
-    if (lower_dentry) {
-      if (bindex < dstart || bindex > dend) {
-       PRINT_CALLER;
-       printk(" CD1: dentry/lower=%p:%p(%p) bindex=%d dstart/end=%d:%d\n",
-              dentry, lower_dentry,
-              (lower_dentry ? lower_dentry->d_inode : (void *) 0xffffffff),
-              bindex, dstart, dend);
-      }
-    } else {   /* lower_dentry == NULL */
-      if (bindex >= dstart && bindex <= dend) {
+       if ((dstart == -1 && dend != -1) ||
+           (dstart != -1 && dend == -1)) {
+               PRINT_CALLER();
+               printk(" CD0: dentry=%p dstart/end=%d:%d\n",
+                      dentry, dstart, dend);
+       }
        /*
-        * Directories can have NULL lower inodes in b/t start/end, but NOT
-        * if at the start/end range.  Ignore this rule, however, if this is
-        * a NULL dentry or a deleted dentry.
+        * check for NULL dentries inside the start/end range, or
+        * non-NULL dentries outside the start/end range.
         */
-       if (!d_deleted((struct dentry *) dentry) &&
-           inode && !(inode && S_ISDIR(inode->i_mode) &&
-                      bindex > dstart && bindex < dend)) {
-         PRINT_CALLER;
-         printk(" CD2: dentry/lower=%p:%p(%p) bindex=%d dstart/end=%d:%d\n",
-                dentry, lower_dentry,
-                (lower_dentry ? lower_dentry->d_inode : (void *) 0xffffffff),
-                bindex, dstart, dend);
+       for (bindex = sbstart(sb); bindex < sbmax(sb); bindex++) {
+               lower_dentry = unionfs_lower_dentry_idx(dentry, bindex);
+               if (lower_dentry) {
+                       if (bindex < dstart || bindex > dend) {
+                               PRINT_CALLER();
+                               printk(" CD1: dentry/lower=%p:%p(%p) "
+                                      "bindex=%d dstart/end=%d:%d\n",
+                                      dentry, lower_dentry,
+                                      (lower_dentry ? lower_dentry->d_inode :
+                                       (void *) 0xffffffff),
+                                      bindex, dstart, dend);
+                       }
+               } else {        /* lower_dentry == NULL */
+                       if (bindex >= dstart && bindex <= dend) {
+                               /*
+                                * Directories can have NULL lower inodes in
+                                * b/t start/end, but NOT if at the
+                                * start/end range.  Ignore this rule,
+                                * however, if this is a NULL dentry or a
+                                * deleted dentry.
+                                */
+                               if (!d_deleted((struct dentry *) dentry) &&
+                                   inode &&
+                                   !(inode && S_ISDIR(inode->i_mode) &&
+                                     bindex > dstart && bindex < dend)) {
+                                       PRINT_CALLER();
+                                       printk(" CD2: dentry/lower=%p:%p(%p) "
+                                              "bindex=%d dstart/end=%d:%d\n",
+                                              dentry, lower_dentry,
+                                              (lower_dentry ?
+                                               lower_dentry->d_inode :
+                                               (void *) 0xffffffff),
+                                              bindex, dstart, dend);
+                               }
+                       }
+               }
        }
-      }
-    }
-  }
 
-  /* check for vfsmounts same as for dentries */
-  for (bindex = sbstart(sb); bindex < sbmax(sb); bindex++) {
-    lower_mnt = unionfs_lower_mnt_idx(dentry, bindex);
-    if (lower_mnt) {
-      if (bindex < dstart || bindex > dend) {
-       PRINT_CALLER;
-       printk(" CM0: dentry/lmnt=%p:%p bindex=%d dstart/end=%d:%d\n",
-              dentry, lower_mnt, bindex, dstart, dend);
-      }
-    } else {   /* lower_mnt == NULL */
-      if (bindex >= dstart && bindex <= dend) {
-       /*
-        * Directories can have NULL lower inodes in b/t start/end, but NOT
-        * if at the start/end range.  Ignore this rule, however, if this is
-        * a NULL dentry.
-        */
-       if (inode && !(inode && S_ISDIR(inode->i_mode) &&
-                      bindex > dstart && bindex < dend)) {
-         PRINT_CALLER;
-         printk(" CM1: dentry/lmnt=%p:%p bindex=%d dstart/end=%d:%d\n",
-                dentry, lower_mnt, bindex, dstart, dend);
+       /* check for vfsmounts same as for dentries */
+       for (bindex = sbstart(sb); bindex < sbmax(sb); bindex++) {
+               lower_mnt = unionfs_lower_mnt_idx(dentry, bindex);
+               if (lower_mnt) {
+                       if (bindex < dstart || bindex > dend) {
+                               PRINT_CALLER();
+                               printk(" CM0: dentry/lmnt=%p:%p bindex=%d "
+                                      "dstart/end=%d:%d\n", dentry,
+                                      lower_mnt, bindex, dstart, dend);
+                       }
+               } else {        /* lower_mnt == NULL */
+                       if (bindex >= dstart && bindex <= dend) {
+                               /*
+                                * Directories can have NULL lower inodes in
+                                * b/t start/end, but NOT if at the
+                                * start/end range.  Ignore this rule,
+                                * however, if this is a NULL dentry.
+                                */
+                               if (inode &&
+                                   !(inode && S_ISDIR(inode->i_mode) &&
+                                     bindex > dstart && bindex < dend)) {
+                                       PRINT_CALLER();
+                                       printk(" CM1: dentry/lmnt=%p:%p "
+                                              "bindex=%d dstart/end=%d:%d\n",
+                                              dentry, lower_mnt, bindex,
+                                              dstart, dend);
+                               }
+                       }
+               }
+       }
+
+       /* for inodes now */
+       if (!inode)
+               return;
+       istart = ibstart(inode);
+       iend = ibend(inode);
+       BUG_ON(istart > iend);
+       if ((istart == -1 && iend != -1) ||
+           (istart != -1 && iend == -1)) {
+               PRINT_CALLER();
+               printk(" CI0: dentry/inode=%p:%p istart/end=%d:%d\n",
+                      dentry, inode, istart, iend);
+       }
+       if (istart != dstart) {
+               PRINT_CALLER();
+               printk(" CI1: dentry/inode=%p:%p istart=%d dstart=%d\n",
+                      dentry, inode, istart, dstart);
+       }
+       if (iend != dend) {
+               PRINT_CALLER();
+               printk(" CI2: dentry/inode=%p:%p iend=%d dend=%d\n",
+                      dentry, inode, iend, dend);
        }
-      }
-    }
-  }
 
-  /* for inodes now */
-  if (!inode)
-    return;
-  istart = ibstart(inode);
-  iend = ibend(inode);
-  BUG_ON(istart > iend);
-  if ((istart == -1 && iend != -1) ||
-      (istart != -1 && iend == -1)) {
-    PRINT_CALLER;
-    printk(" CI0: dentry/inode=%p:%p istart/end=%d:%d\n",
-          dentry, inode, istart, iend);
-  }
-  if (istart != dstart) {
-    PRINT_CALLER;
-    printk(" CI1: dentry/inode=%p:%p istart=%d dstart=%d\n",
-          dentry, inode, istart, dstart);
-  }
-  if (iend != dend) {
-    PRINT_CALLER;
-    printk(" CI2: dentry/inode=%p:%p iend=%d dend=%d\n",
-          dentry, inode, iend, dend);
-  }
+       if (!S_ISDIR(inode->i_mode)) {
+               if (dend != dstart) {
+                       PRINT_CALLER();
+                       printk(" CI3: dentry/inode=%p:%p dstart=%d dend=%d\n",
+                              dentry, inode, dstart, dend);
+               }
+               if (iend != istart) {
+                       PRINT_CALLER();
+                       printk(" CI4: dentry/inode=%p:%p istart=%d iend=%d\n",
+                              dentry, inode, istart, iend);
+               }
+       }
 
-  if (!S_ISDIR(inode->i_mode)) {
-    if (dend != dstart) {
-      PRINT_CALLER;
-      printk(" CI3: dentry/inode=%p:%p dstart=%d dend=%d\n",
-            dentry, inode, dstart, dend);
-    }
-    if (iend != istart) {
-      PRINT_CALLER;
-      printk(" CI4: dentry/inode=%p:%p istart=%d iend=%d\n",
-            dentry, inode, istart, iend);
-    }
-  }
+       for (bindex = sbstart(sb); bindex < sbmax(sb); bindex++) {
+               lower_inode = unionfs_lower_inode_idx(inode, bindex);
+               if (lower_inode) {
+                       if (bindex < istart || bindex > iend) {
+                               PRINT_CALLER();
+                               printk(" CI5: dentry/linode=%p:%p bindex=%d "
+                                      "istart/end=%d:%d\n", dentry,
+                                      lower_inode, bindex, istart, iend);
+                       } else if ((int)lower_inode == 0x5a5a5a5a) {
+                               /* freed inode! */
+                               PRINT_CALLER();
+                               printk(" CI6: dentry/linode=%p:%p bindex=%d "
+                                      "istart/end=%d:%d\n", dentry,
+                                      lower_inode, bindex, istart, iend);
+                       }
+               } else {        /* lower_inode == NULL */
+                       if (bindex >= istart && bindex <= iend) {
+                               /*
+                                * directories can have NULL lower inodes in
+                                * b/t start/end, but NOT if at the
+                                * start/end range.
+                                */
+                               if (!(S_ISDIR(inode->i_mode) &&
+                                     bindex > istart && bindex < iend)) {
+                                       PRINT_CALLER();
+                                       printk(" CI7: dentry/linode=%p:%p "
+                                              "bindex=%d istart/end=%d:%d\n",
+                                              dentry, lower_inode, bindex,
+                                              istart, iend);
+                               }
+                       }
+               }
+       }
 
-  for (bindex = sbstart(sb); bindex < sbmax(sb); bindex++) {
-    lower_inode = unionfs_lower_inode_idx(inode, bindex);
-    if (lower_inode) {
-      if (bindex < istart || bindex > iend) {
-       PRINT_CALLER;
-       printk(" CI5: dentry/linode=%p:%p bindex=%d istart/end=%d:%d\n",
-              dentry, lower_inode, bindex, istart, iend);
-      } else if ((int)lower_inode == 0x5a5a5a5a) { /* freed inode! */
-       PRINT_CALLER;
-       printk(" CI6: dentry/linode=%p:%p bindex=%d istart/end=%d:%d\n",
-              dentry, lower_inode, bindex, istart, iend);
-      }
-    } else {   /* lower_inode == NULL */
-      if (bindex >= istart && bindex <= iend) {
        /*
-        * directories can have NULL lower inodes in b/t start/end, but
-        * NOT if at the start/end range.
+        * If it's a directory, then intermediate objects b/t start/end can
+        * be NULL.  But, check that all three are NULL: lower dentry, mnt,
+        * and inode.
         */
-       if (!(S_ISDIR(inode->i_mode) && bindex > istart && bindex < iend)) {
-         PRINT_CALLER;
-         printk(" CI7: dentry/linode=%p:%p bindex=%d istart/end=%d:%d\n",
-                dentry, lower_inode, bindex, istart, iend);
-       }
-      }
-    }
-  }
-
-  /*
-   * If it's a directory, then intermediate objects b/t start/end can be NULL.
-   * But, check that all three are NULL: lower dentry, mnt, and inode.
-   */
-  if (S_ISDIR(inode->i_mode))
-    for (bindex = dstart+1; bindex < dend-1; bindex++) {
-      lower_inode = unionfs_lower_inode_idx(inode, bindex);
-      lower_dentry = unionfs_lower_dentry_idx(dentry, bindex);
-      lower_mnt = unionfs_lower_mnt_idx(dentry, bindex);
-      if (!((lower_inode && lower_dentry && lower_mnt) ||
-           (!lower_inode && !lower_dentry && !lower_mnt)))
-       printk(" Cx: lmnt/ldentry/linode=%p:%p:%p bindex=%d dstart/end=%d:%d\n",
-              lower_mnt, lower_dentry, lower_inode, bindex, dstart, dend);
-    }
+       if (S_ISDIR(inode->i_mode))
+               for (bindex = dstart+1; bindex < dend-1; bindex++) {
+                       lower_inode = unionfs_lower_inode_idx(inode, bindex);
+                       lower_dentry = unionfs_lower_dentry_idx(dentry,
+                                                               bindex);
+                       lower_mnt = unionfs_lower_mnt_idx(dentry, bindex);
+                       if (!((lower_inode && lower_dentry && lower_mnt) ||
+                             (!lower_inode && !lower_dentry && !lower_mnt)))
+                               printk(" Cx: lmnt/ldentry/linode=%p:%p:%p "
+                                      "bindex=%d dstart/end=%d:%d\n",
+                                      lower_mnt, lower_dentry, lower_inode,
+                                      bindex, dstart, dend);
+               }
 }
 
 void __unionfs_check_file(const struct file *file,
-                       const char *fname, const char *fxn, int line)
+                         const char *fname, const char *fxn, int line)
 {
-  int bindex;
-  int dstart, dend, fstart, fend;
-  struct dentry *dentry;
-  struct file *lower_file;
-  struct inode *inode;
-  struct super_block *sb;
-  int printed_caller = 0;
+       int bindex;
+       int dstart, dend, fstart, fend;
+       struct dentry *dentry;
+       struct file *lower_file;
+       struct inode *inode;
+       struct super_block *sb;
+       int printed_caller = 0;
 
-  BUG_ON(!file);
-  dentry = file->f_dentry;
-  sb = dentry->d_sb;
-  dstart = dbstart(dentry);
-  dend = dbend(dentry);
-  BUG_ON(dstart > dend);
-  fstart = fbstart(file);
-  fend = fbend(file);
-  BUG_ON(fstart > fend);
+       BUG_ON(!file);
+       dentry = file->f_dentry;
+       sb = dentry->d_sb;
+       dstart = dbstart(dentry);
+       dend = dbend(dentry);
+       BUG_ON(dstart > dend);
+       fstart = fbstart(file);
+       fend = fbend(file);
+       BUG_ON(fstart > fend);
 
-  if ((fstart == -1 && fend != -1) ||
-      (fstart != -1 && fend == -1)) {
-    PRINT_CALLER;
-    printk(" CF0: file/dentry=%p:%p fstart/end=%d:%d\n",
-          file, dentry, fstart, fend);
-  }
-  if (fstart != dstart) {
-    PRINT_CALLER;
-    printk(" CF1: file/dentry=%p:%p fstart=%d dstart=%d\n",
-          file, dentry, fstart, dstart);
-  }
-  if (fend != dend) {
-    PRINT_CALLER;
-    printk(" CF2: file/dentry=%p:%p fend=%d dend=%d\n",
-          file, dentry, fend, dend);
-  }
-  inode = dentry->d_inode;
-  if (!S_ISDIR(inode->i_mode)) {
-    if (fend != fstart) {
-      PRINT_CALLER;
-      printk(" CF3: file/inode=%p:%p fstart=%d fend=%d\n",
-            file, inode, fstart, fend);
-    }
-    if (dend != dstart) {
-      PRINT_CALLER;
-      printk(" CF4: file/dentry=%p:%p dstart=%d dend=%d\n",
-            file, dentry, dstart, dend);
-    }
-  }
+       if ((fstart == -1 && fend != -1) ||
+           (fstart != -1 && fend == -1)) {
+               PRINT_CALLER();
+               printk(" CF0: file/dentry=%p:%p fstart/end=%d:%d\n",
+                      file, dentry, fstart, fend);
+       }
+       if (fstart != dstart) {
+               PRINT_CALLER();
+               printk(" CF1: file/dentry=%p:%p fstart=%d dstart=%d\n",
+                      file, dentry, fstart, dstart);
+       }
+       if (fend != dend) {
+               PRINT_CALLER();
+               printk(" CF2: file/dentry=%p:%p fend=%d dend=%d\n",
+                      file, dentry, fend, dend);
+       }
+       inode = dentry->d_inode;
+       if (!S_ISDIR(inode->i_mode)) {
+               if (fend != fstart) {
+                       PRINT_CALLER();
+                       printk(" CF3: file/inode=%p:%p fstart=%d fend=%d\n",
+                              file, inode, fstart, fend);
+               }
+               if (dend != dstart) {
+                       PRINT_CALLER();
+                       printk(" CF4: file/dentry=%p:%p dstart=%d dend=%d\n",
+                              file, dentry, dstart, dend);
+               }
+       }
 
-  /*
-   * check for NULL dentries inside the start/end range, or
-   * non-NULL dentries outside the start/end range.
-   */
-  for (bindex = sbstart(sb); bindex < sbmax(sb); bindex++) {
-    lower_file = unionfs_lower_file_idx(file, bindex);
-    if (lower_file) {
-      if (bindex < fstart || bindex > fend) {
-       PRINT_CALLER;
-       printk(" CF5: file/lower=%p:%p bindex=%d fstart/end=%d:%d\n",
-              file, lower_file, bindex, fstart, fend);
-      }
-    } else {   /* lower_file == NULL */
-      if (bindex >= fstart && bindex <= fend) {
        /*
-        * directories can have NULL lower inodes in b/t start/end, but
-        * NOT if at the start/end range.
+        * check for NULL dentries inside the start/end range, or
+        * non-NULL dentries outside the start/end range.
         */
-       if (!(S_ISDIR(inode->i_mode) && bindex > fstart && bindex < fend)) {
-         PRINT_CALLER;
-         printk(" CF6: file/lower=%p:%p bindex=%d fstart/end=%d:%d\n",
-                file, lower_file, bindex, fstart, fend);
+       for (bindex = sbstart(sb); bindex < sbmax(sb); bindex++) {
+               lower_file = unionfs_lower_file_idx(file, bindex);
+               if (lower_file) {
+                       if (bindex < fstart || bindex > fend) {
+                               PRINT_CALLER();
+                               printk(" CF5: file/lower=%p:%p bindex=%d fstart/end=%d:%d\n",
+                                      file, lower_file, bindex, fstart, fend);
+                       }
+               } else {        /* lower_file == NULL */
+                       if (bindex >= fstart && bindex <= fend) {
+                               /*
+                                * directories can have NULL lower inodes in
+                                * b/t start/end, but NOT if at the
+                                * start/end range.
+                                */
+                               if (!(S_ISDIR(inode->i_mode) &&
+                                     bindex > fstart && bindex < fend)) {
+                                       PRINT_CALLER();
+                                       printk(" CF6: file/lower=%p:%p "
+                                              "bindex=%d fstart/end=%d:%d\n",
+                                              file, lower_file, bindex,
+                                              fstart, fend);
+                               }
+                       }
+               }
        }
-      }
-    }
-  }
 
-  __unionfs_check_dentry(dentry,fname,fxn,line);
+       __unionfs_check_dentry(dentry,fname,fxn,line);
 }
 
 /* useful to track vfsmount leaks that could cause EBUSY on unmount */
@@ -357,7 +392,7 @@ void __show_branch_counts(const struct super_block *sb,
        struct vfsmount *mnt;
 
        printk("BC:");
-       for (i=0; i<4; i++) {
+       for (i=0; i<sbmax(sb); i++) {
                mnt = UNIONFS_D(sb->s_root)->lower_paths[i].mnt;
                printk("%d:", (mnt ? atomic_read(&mnt->mnt_count) : -99));
        }