Commit dd187a2603d9904ddc410441348f0cfc558a5233

Authored by Evgeniy Dushistov
Committed by Linus Torvalds
1 parent abf5d15fd2

[PATCH] ufs: little directory lookup optimization

This patch make little optimization of ufs_find_entry like "ext2" does.  Save
number of page and reuse it again in the next call.

Signed-off-by: Evgeniy Dushistov <dushistov@mail.ru>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

Showing 4 changed files with 8 additions and 5 deletions Side-by-side Diff

... ... @@ -252,6 +252,7 @@
252 252 unsigned long start, n;
253 253 unsigned long npages = ufs_dir_pages(dir);
254 254 struct page *page = NULL;
  255 + struct ufs_inode_info *ui = UFS_I(dir);
255 256 struct ufs_dir_entry *de;
256 257  
257 258 UFSD("ENTER, dir_ino %lu, name %s, namlen %u\n", dir->i_ino, name, namelen);
... ... @@ -262,8 +263,8 @@
262 263 /* OFFSET_CACHE */
263 264 *res_page = NULL;
264 265  
265   - /* start = ei->i_dir_start_lookup; */
266   - start = 0;
  266 + start = ui->i_dir_start_lookup;
  267 +
267 268 if (start >= npages)
268 269 start = 0;
269 270 n = start;
... ... @@ -295,7 +296,7 @@
295 296  
296 297 found:
297 298 *res_page = page;
298   - /* ei->i_dir_start_lookup = n; */
  299 + ui->i_dir_start_lookup = n;
299 300 return de;
300 301 }
301 302  
... ... @@ -264,6 +264,7 @@
264 264 ufsi->i_shadow = 0;
265 265 ufsi->i_osync = 0;
266 266 ufsi->i_oeftflag = 0;
  267 + ufsi->i_dir_start_lookup = 0;
267 268 memset(&ufsi->i_u1, 0, sizeof(ufsi->i_u1));
268 269  
269 270 insert_inode_hash(inode);
... ... @@ -628,12 +628,12 @@
628 628 ufsi->i_shadow = fs32_to_cpu(sb, ufs_inode->ui_u3.ui_sun.ui_shadow);
629 629 ufsi->i_oeftflag = fs32_to_cpu(sb, ufs_inode->ui_u3.ui_sun.ui_oeftflag);
630 630 ufsi->i_lastfrag = (inode->i_size + uspi->s_fsize - 1) >> uspi->s_fshift;
  631 + ufsi->i_dir_start_lookup = 0;
631 632  
632 633 if (S_ISCHR(mode) || S_ISBLK(mode) || inode->i_blocks) {
633 634 for (i = 0; i < (UFS_NDADDR + UFS_NINDIR); i++)
634 635 ufsi->i_u1.i_data[i] = ufs_inode->ui_u2.ui_addr.ui_db[i];
635   - }
636   - else {
  636 + } else {
637 637 for (i = 0; i < (UFS_NDADDR + UFS_NINDIR) * 4; i++)
638 638 ufsi->i_u1.i_symlink[i] = ufs_inode->ui_u2.ui_symlink[i];
639 639 }
include/linux/ufs_fs_i.h
... ... @@ -27,6 +27,7 @@
27 27 __u32 i_oeftflag;
28 28 __u16 i_osync;
29 29 __u32 i_lastfrag;
  30 + __u32 i_dir_start_lookup;
30 31 struct inode vfs_inode;
31 32 };
32 33