diff options
author | Nick Piggin <npiggin@kernel.dk> | 2011-01-07 01:49:55 -0500 |
---|---|---|
committer | Nick Piggin <npiggin@kernel.dk> | 2011-01-07 01:50:28 -0500 |
commit | fb045adb99d9b7c562dc7fef834857f78249daa1 (patch) | |
tree | 1fd6a4024fffeec568abe100d730589bfdb81c38 /fs/cifs | |
parent | 5f57cbcc02cf18f6b22ef4066bb10afeb8f930ff (diff) |
fs: dcache reduce branches in lookup path
Reduce some branches and memory accesses in dcache lookup by adding dentry
flags to indicate common d_ops are set, rather than having to check them.
This saves a pointer memory access (dentry->d_op) in common path lookup
situations, and saves another pointer load and branch in cases where we
have d_op but not the particular operation.
Patched with:
git grep -E '[.>]([[:space:]])*d_op([[:space:]])*=' | xargs sed -e 's/\([^\t ]*\)->d_op = \(.*\);/d_set_d_op(\1, \2);/' -e 's/\([^\t ]*\)\.d_op = \(.*\);/d_set_d_op(\&\1, \2);/' -i
Signed-off-by: Nick Piggin <npiggin@kernel.dk>
Diffstat (limited to 'fs/cifs')
-rw-r--r-- | fs/cifs/dir.c | 16 | ||||
-rw-r--r-- | fs/cifs/inode.c | 8 | ||||
-rw-r--r-- | fs/cifs/link.c | 4 | ||||
-rw-r--r-- | fs/cifs/readdir.c | 4 |
4 files changed, 16 insertions, 16 deletions
diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c index 88bfe686ac00..e3b10ca6d453 100644 --- a/fs/cifs/dir.c +++ b/fs/cifs/dir.c | |||
@@ -135,9 +135,9 @@ static void setup_cifs_dentry(struct cifsTconInfo *tcon, | |||
135 | struct inode *newinode) | 135 | struct inode *newinode) |
136 | { | 136 | { |
137 | if (tcon->nocase) | 137 | if (tcon->nocase) |
138 | direntry->d_op = &cifs_ci_dentry_ops; | 138 | d_set_d_op(direntry, &cifs_ci_dentry_ops); |
139 | else | 139 | else |
140 | direntry->d_op = &cifs_dentry_ops; | 140 | d_set_d_op(direntry, &cifs_dentry_ops); |
141 | d_instantiate(direntry, newinode); | 141 | d_instantiate(direntry, newinode); |
142 | } | 142 | } |
143 | 143 | ||
@@ -421,9 +421,9 @@ int cifs_mknod(struct inode *inode, struct dentry *direntry, int mode, | |||
421 | rc = cifs_get_inode_info_unix(&newinode, full_path, | 421 | rc = cifs_get_inode_info_unix(&newinode, full_path, |
422 | inode->i_sb, xid); | 422 | inode->i_sb, xid); |
423 | if (pTcon->nocase) | 423 | if (pTcon->nocase) |
424 | direntry->d_op = &cifs_ci_dentry_ops; | 424 | d_set_d_op(direntry, &cifs_ci_dentry_ops); |
425 | else | 425 | else |
426 | direntry->d_op = &cifs_dentry_ops; | 426 | d_set_d_op(direntry, &cifs_dentry_ops); |
427 | 427 | ||
428 | if (rc == 0) | 428 | if (rc == 0) |
429 | d_instantiate(direntry, newinode); | 429 | d_instantiate(direntry, newinode); |
@@ -604,9 +604,9 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry, | |||
604 | 604 | ||
605 | if ((rc == 0) && (newInode != NULL)) { | 605 | if ((rc == 0) && (newInode != NULL)) { |
606 | if (pTcon->nocase) | 606 | if (pTcon->nocase) |
607 | direntry->d_op = &cifs_ci_dentry_ops; | 607 | d_set_d_op(direntry, &cifs_ci_dentry_ops); |
608 | else | 608 | else |
609 | direntry->d_op = &cifs_dentry_ops; | 609 | d_set_d_op(direntry, &cifs_dentry_ops); |
610 | d_add(direntry, newInode); | 610 | d_add(direntry, newInode); |
611 | if (posix_open) { | 611 | if (posix_open) { |
612 | filp = lookup_instantiate_filp(nd, direntry, | 612 | filp = lookup_instantiate_filp(nd, direntry, |
@@ -634,9 +634,9 @@ cifs_lookup(struct inode *parent_dir_inode, struct dentry *direntry, | |||
634 | rc = 0; | 634 | rc = 0; |
635 | direntry->d_time = jiffies; | 635 | direntry->d_time = jiffies; |
636 | if (pTcon->nocase) | 636 | if (pTcon->nocase) |
637 | direntry->d_op = &cifs_ci_dentry_ops; | 637 | d_set_d_op(direntry, &cifs_ci_dentry_ops); |
638 | else | 638 | else |
639 | direntry->d_op = &cifs_dentry_ops; | 639 | d_set_d_op(direntry, &cifs_dentry_ops); |
640 | d_add(direntry, NULL); | 640 | d_add(direntry, NULL); |
641 | /* if it was once a directory (but how can we tell?) we could do | 641 | /* if it was once a directory (but how can we tell?) we could do |
642 | shrink_dcache_parent(direntry); */ | 642 | shrink_dcache_parent(direntry); */ |
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index 99b9a2cc14b7..2a239d878e85 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c | |||
@@ -1319,9 +1319,9 @@ int cifs_mkdir(struct inode *inode, struct dentry *direntry, int mode) | |||
1319 | to set uid/gid */ | 1319 | to set uid/gid */ |
1320 | inc_nlink(inode); | 1320 | inc_nlink(inode); |
1321 | if (pTcon->nocase) | 1321 | if (pTcon->nocase) |
1322 | direntry->d_op = &cifs_ci_dentry_ops; | 1322 | d_set_d_op(direntry, &cifs_ci_dentry_ops); |
1323 | else | 1323 | else |
1324 | direntry->d_op = &cifs_dentry_ops; | 1324 | d_set_d_op(direntry, &cifs_dentry_ops); |
1325 | 1325 | ||
1326 | cifs_unix_basic_to_fattr(&fattr, pInfo, cifs_sb); | 1326 | cifs_unix_basic_to_fattr(&fattr, pInfo, cifs_sb); |
1327 | cifs_fill_uniqueid(inode->i_sb, &fattr); | 1327 | cifs_fill_uniqueid(inode->i_sb, &fattr); |
@@ -1363,9 +1363,9 @@ mkdir_get_info: | |||
1363 | inode->i_sb, xid, NULL); | 1363 | inode->i_sb, xid, NULL); |
1364 | 1364 | ||
1365 | if (pTcon->nocase) | 1365 | if (pTcon->nocase) |
1366 | direntry->d_op = &cifs_ci_dentry_ops; | 1366 | d_set_d_op(direntry, &cifs_ci_dentry_ops); |
1367 | else | 1367 | else |
1368 | direntry->d_op = &cifs_dentry_ops; | 1368 | d_set_d_op(direntry, &cifs_dentry_ops); |
1369 | d_instantiate(direntry, newinode); | 1369 | d_instantiate(direntry, newinode); |
1370 | /* setting nlink not necessary except in cases where we | 1370 | /* setting nlink not necessary except in cases where we |
1371 | * failed to get it from the server or was set bogus */ | 1371 | * failed to get it from the server or was set bogus */ |
diff --git a/fs/cifs/link.c b/fs/cifs/link.c index 85cdbf831e7b..fe2f6a93c49e 100644 --- a/fs/cifs/link.c +++ b/fs/cifs/link.c | |||
@@ -525,9 +525,9 @@ cifs_symlink(struct inode *inode, struct dentry *direntry, const char *symname) | |||
525 | rc); | 525 | rc); |
526 | } else { | 526 | } else { |
527 | if (pTcon->nocase) | 527 | if (pTcon->nocase) |
528 | direntry->d_op = &cifs_ci_dentry_ops; | 528 | d_set_d_op(direntry, &cifs_ci_dentry_ops); |
529 | else | 529 | else |
530 | direntry->d_op = &cifs_dentry_ops; | 530 | d_set_d_op(direntry, &cifs_dentry_ops); |
531 | d_instantiate(direntry, newinode); | 531 | d_instantiate(direntry, newinode); |
532 | } | 532 | } |
533 | } | 533 | } |
diff --git a/fs/cifs/readdir.c b/fs/cifs/readdir.c index ee463aeca0b0..ec5b68e3b928 100644 --- a/fs/cifs/readdir.c +++ b/fs/cifs/readdir.c | |||
@@ -103,9 +103,9 @@ cifs_readdir_lookup(struct dentry *parent, struct qstr *name, | |||
103 | } | 103 | } |
104 | 104 | ||
105 | if (cifs_sb_master_tcon(CIFS_SB(sb))->nocase) | 105 | if (cifs_sb_master_tcon(CIFS_SB(sb))->nocase) |
106 | dentry->d_op = &cifs_ci_dentry_ops; | 106 | d_set_d_op(dentry, &cifs_ci_dentry_ops); |
107 | else | 107 | else |
108 | dentry->d_op = &cifs_dentry_ops; | 108 | d_set_d_op(dentry, &cifs_dentry_ops); |
109 | 109 | ||
110 | alias = d_materialise_unique(dentry, inode); | 110 | alias = d_materialise_unique(dentry, inode); |
111 | if (alias != NULL) { | 111 | if (alias != NULL) { |