Date: Mon, 18 Jan 2010 02:43:01 GMT From: "Pedro F. Giffuni" <giffunip@tutopia.com> To: freebsd-gnats-submit@FreeBSD.org Subject: kern/142924: Small cleanup for the inode struct in ext2fs (based on UFS) Message-ID: <201001180243.o0I2h18q009174@www.freebsd.org> Resent-Message-ID: <201001180250.o0I2o61N074571@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 142924 >Category: kern >Synopsis: Small cleanup for the inode struct in ext2fs (based on UFS) >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Mon Jan 18 02:50:05 UTC 2010 >Closed-Date: >Last-Modified: >Originator: Pedro F. Giffuni >Release: 8.0-Release + BSD ext2fs >Organization: >Environment: FreeBSD mogwai.giffuni.net 8.0-RELEASE FreeBSD 8.0-RELEASE #13: Sat Jan 9 20:39:47 UTC 2010 pedro@mogwai.giffuni.net:/usr/src/sys/i386/compile/GENERIC i386 >Description: Minor enhancements based on UFS: >From SVN 118969: Eliminate the i_devvp field from the incore EXT2FS inodes, we can get the same value from ip->i_ump->um_devvp. This saves a pointer in the memory copies of inodes, which can easily run into several hundred kilobytes. The extra indirection is unmeasurable in benchmarks. ____ While here move a line before a comment in the lookup code to make space for a dirhash implementation. >How-To-Repeat: >Fix: diff -ru ext2fs.bsd/ext2_lookup.c ext2fs/ext2_lookup.c --- ext2fs.bsd/ext2_lookup.c 2010-01-17 19:02:30.000000000 +0000 +++ ext2fs/ext2_lookup.c 2010-01-17 20:40:10.000000000 +0000 @@ -347,6 +347,7 @@ slotneeded = (sizeof(struct direct) - MAXNAMLEN + cnp->cn_namelen + 3) &~ 3; */ } + bmask = VFSTOEXT2(vdp->v_mount)->um_mountp->mnt_stat.f_iosize - 1; /* * If there is cached information on a previous search of @@ -359,7 +360,6 @@ * profiling time and hence has been removed in the interest * of simplicity. */ - bmask = VFSTOEXT2(vdp->v_mount)->um_mountp->mnt_stat.f_iosize - 1; if (nameiop != LOOKUP || i_diroff == 0 || i_diroff > dp->i_size) { entryoffsetinblock = 0; diff -ru ext2fs.bsd/ext2_vfsops.c ext2fs/ext2_vfsops.c --- ext2fs.bsd/ext2_vfsops.c 2010-01-17 19:02:56.000000000 +0000 +++ ext2fs/ext2_vfsops.c 2010-01-17 20:37:52.000000000 +0000 @@ -945,9 +945,8 @@ } /* - * Finish inode initialization now that aliasing has been resolved. + * Finish inode initialization. */ - ip->i_devvp = ump->um_devvp; /* * Set up a generation number for this inode if it does not diff -ru ext2fs.bsd/inode.h ext2fs/inode.h --- ext2fs.bsd/inode.h 2010-01-17 19:03:21.000000000 +0000 +++ ext2fs/inode.h 2010-01-17 20:35:56.000000000 +0000 @@ -62,7 +62,6 @@ */ struct inode { struct vnode *i_vnode;/* Vnode associated with this inode. */ - struct vnode *i_devvp;/* Vnode for block I/O. */ struct ext2mount *i_ump; u_int32_t i_flag; /* flags, see below */ ino_t i_number; /* The identity of the inode. */ @@ -143,6 +142,9 @@ #define IN_SPACECOUNTED 0x0080 /* Blocks to be freed in free count. */ #define IN_LAZYACCESS 0x0100 /* Process IN_ACCESS after the suspension finished */ + +#define i_devvp i_ump->um_devvp + #ifdef _KERNEL /* * Structure used to pass around logical block paths generated by >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201001180243.o0I2h18q009174>