On Monday 14 July 2003 20:25, [EMAIL PROTECTED] wrote: > The patch below is just cleanup. > > 1) page_offset as calculated in __get_metapage is always 0. > Please go through the variable substitution/calculation > to verify.
If the PAGE_CACHE_SIZE is greater than 4096, page_offset may be greater than zero. However, JFS is currently broken with a larger PAGE_CACHE_SIZE, but I mean to get that working some day. > 2) mp = NULL isn't necessary because that statement is surrounded > by "if (!mp) {". True. > 3) if statement re-ordered so else path is usually not taken. Right. I like this better. Testing for the negation and then having an else clause is ugly. > Tested successfully with dbench/tiobench/bonnie++ on 2.5.75 > uniprocessor x86. > > > > --- jfs_metapage.c.orig 2003-02-26 21:46:13.000000000 -0500 > +++ jfs_metapage.c 2003-07-14 20:54:15.000000000 -0400 > @@ -213,12 +213,8 @@ > unsigned long new) > { > struct metapage **hash_ptr; > - int l2BlocksPerPage; > - int l2bsize; > struct address_space *mapping; > struct metapage *mp; > - unsigned long page_index; > - unsigned long page_offset; > > jfs_info("__get_metapage: inode = 0x%p, lblock = 0x%lx", inode, > lblock); > > @@ -244,12 +240,7 @@ > lock_metapage(mp); > spin_unlock(&meta_lock); > } else { > - l2bsize = inode->i_blkbits; > - l2BlocksPerPage = PAGE_CACHE_SHIFT - l2bsize; > - page_index = lblock >> l2BlocksPerPage; > - page_offset = (lblock - (page_index << l2BlocksPerPage)) << > - l2bsize; > - if ((page_offset + size) > PAGE_CACHE_SIZE) { > + if (size > PAGE_CACHE_SIZE) { > spin_unlock(&meta_lock); > jfs_err("MetaData crosses page boundary!!"); > return NULL; > @@ -263,7 +254,6 @@ > * Attempt to get metapage without blocking, tapping into > * reserves if necessary. > */ > - mp = NULL; > if (JFS_IP(inode)->fileset == AGGREGATE_I) { > mp = mempool_alloc(metapage_mempool, GFP_ATOMIC); > if (!mp) { > @@ -311,13 +301,13 @@ > > if (new) { > jfs_info("__get_metapage: Calling grab_cache_page"); > - mp->page = grab_cache_page(mapping, page_index); > - if (!mp->page) { > - jfs_err("grab_cache_page failed!"); > - goto freeit; > - } else { > + mp->page = grab_cache_page(mapping, lblock >> > (PAGE_CACHE_SHIFT - > (inode->i_blkbits))); + if (mp->page) { > INCREMENT(mpStat.pagealloc); > unlock_page(mp->page); > + } else { > + jfs_err("grab_cache_page failed!"); > + goto freeit; > } > } else { > jfs_info("__get_metapage: Calling read_cache_page"); > @@ -329,7 +319,7 @@ > } else > INCREMENT(mpStat.pagealloc); > } > - mp->data = kmap(mp->page) + page_offset; > + mp->data = kmap(mp->page); > } > jfs_info("__get_metapage: returning = 0x%p", mp); > return mp; -- David Kleikamp IBM Linux Technology Center _______________________________________________ Jfs-discussion mailing list [EMAIL PROTECTED] http://www-124.ibm.com/developerworks/oss/mailman/listinfo/jfs-discussion