On Wed, Apr 02, 2008 at 04:25:11PM +1000, Barry Naujok wrote: ... > --- kern_ci.orig/fs/xfs/xfs_dir2_node.c > +++ kern_ci/fs/xfs/xfs_dir2_node.c ... > @@ -432,27 +429,15 @@ xfs_dir2_leafn_lookup_int( > /* > * Do we have a buffer coming in? > */ > - if (state->extravalid) > - curbp = state->extrablk.bp; > - else > - curbp = NULL; > + curbp = state->extravalid ? state->extrablk.bp : NULL; > /* > * For addname, it's a free block buffer, get the block number. > */ > - if (args->addname) { > - curfdb = curbp ? state->extrablk.blkno : -1; > - curdb = -1; > - length = xfs_dir2_data_entsize(args->namelen); > - if ((free = (curbp ? curbp->data : NULL))) > - ASSERT(be32_to_cpu(free->hdr.magic) == XFS_DIR2_FREE_MAGIC); > - } > - /* > - * For others, it's a data block buffer, get the block number. > - */ > - else { > - curfdb = -1; > - curdb = curbp ? state->extrablk.blkno : -1; > - } > + curfdb = curbp ? state->extrablk.blkno : -1; > + free = curbp ? curbp->data : NULL; The previous 3 lines can be cleaned up as: if (state->extravalid) curbp = state->extrablk.bp; else curbp = NULL; if (curbp) { curfdb = state->extrablk.blkno; free = curbp->data; } else { curfdb = -1; free = NULL; } or, if (state->extravalid && state->extrablk.bp == NULL) is _ALWAYS_ false (which seems to be the case), you can do: if (state->extravalid) { curbp = state->extrablk.bp; curfdb = state->extrablk.blkno; free = curbp->data; } else { curbp = NULL; curfdb = -1; free = NULL; } ... > +static int > +xfs_dir2_leafn_lookup_for_entry( > + xfs_dabuf_t *bp, /* leaf buffer */ > + xfs_da_args_t *args, /* operation arguments */ > + int *indexp, /* out: leaf entry index */ > + xfs_da_state_t *state) /* state to fill in */ > +{ > + xfs_dabuf_t *curbp; /* current data/free buffer */ > + xfs_dir2_db_t curdb; /* current data block number */ > + xfs_dir2_data_entry_t *dep; /* data block entry */ > + xfs_inode_t *dp; /* incore directory inode */ > + int error; /* error return value */ > + int index; /* leaf entry index */ > + xfs_dir2_leaf_t *leaf; /* leaf structure */ > + xfs_dir2_leaf_entry_t *lep; /* leaf entry */ > + xfs_mount_t *mp; /* filesystem mount point */ > + xfs_dir2_db_t newdb; /* new data block number */ > + xfs_trans_t *tp; /* transaction pointer */ > + xfs_dacmp_t cmp; /* comparison result */ > + xfs_dabuf_t *ci_bp = NULL; /* buffer with CI match */ Did you try to check the stack usage (scripts/checkstack.pl)? > + dp = args->dp; > + tp = args->trans; > + mp = dp->i_mount; > + leaf = bp->data; > + ASSERT(be16_to_cpu(leaf->hdr.info.magic) == XFS_DIR2_LEAFN_MAGIC); > +#ifdef __KERNEL__ > + ASSERT(be16_to_cpu(leaf->hdr.count) > 0); > +#endif What's this #ifdef for? > + dep = (xfs_dir2_data_entry_t *)((char *)curbp->data + > + xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address))); Perhaps a static inline to do this calculation more cleanly (assuming it's done elsewhere as well). ... > + /* > + * Compare the entry, return it if it matches. > + */ > + cmp = args->oknoent ? > + xfs_dir_compname(dp, dep->name, dep->namelen, > + args->name, args->namelen): > + xfs_da_compname(dep->name, dep->namelen, > + args->name, args->namelen); same as comment for 1/7. Josef 'Jeff' Sipek. -- My public GPG key can be found at http://www.josefsipek.net/gpg/public-0xC7958FFE.txt -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html