diff options
author | Anand Avati <avati@redhat.com> | 2013-10-21 20:29:07 -0700 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2013-11-26 11:02:17 -0800 |
commit | 28ae39e94092ce853a114ee9186fbf8f0f1e6adb (patch) | |
tree | 388c039081b1c21df28fdd0128ba8956f5480014 | |
parent | 24e4b5d12be5d92a4e5c3167372f88cd3dfa720a (diff) |
gfapi: remove unnecessary call to glfs_resolve_base()
Calling glfs_resolve_base() on the root inode for every resolver
invocation is unnecessary and wasteful.
Here are the results from running a test program which performs
path based operations (creates and deletes 1000 files):
Without patch:
[root@blackbox ~]# sync
[root@blackbox ~]# time ./a.out 1
real 0m4.314s
user 0m1.923s
sys 0m1.144s
[root@blackbox ~]# sync
[root@blackbox ~]# time ./a.out 1
real 0m4.383s
user 0m1.940s
sys 0m1.177s
[root@blackbox ~]# sync
[root@blackbox ~]# time ./a.out 1
real 0m4.339s
user 0m1.863s
sys 0m1.129s
With patch:
[root@blackbox ~]# sync
[root@blackbox ~]# time ./a.out 1
real 0m3.005s
user 0m1.162s
sys 0m0.816s
[root@blackbox ~]# sync
[root@blackbox ~]# time ./a.out 1
real 0m3.188s
user 0m1.222s
sys 0m0.867s
[root@blackbox ~]# sync
[root@blackbox ~]# time ./a.out 1
real 0m2.999s
user 0m1.131s
sys 0m0.832s
Change-Id: Id160a24f44b4dccfcfce99a6f69ddb8938523cd5
BUG: 953694
Signed-off-by: Anand Avati <avati@redhat.com>
Reviewed-on: http://review.gluster.org/6321
Tested-by: Gluster Build System <jenkins@build.gluster.com>
-rw-r--r-- | api/src/glfs-resolve.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/api/src/glfs-resolve.c b/api/src/glfs-resolve.c index 52b95c960f1..9d64883d7e2 100644 --- a/api/src/glfs-resolve.c +++ b/api/src/glfs-resolve.c @@ -339,7 +339,8 @@ glfs_resolve_at (struct glfs *fs, xlator_t *subvol, inode_t *at, } else { inode = inode_ref (subvol->itable->root); - glfs_resolve_base (fs, subvol, inode, &ciatt); + if (strcmp (path, "/") == 0) + glfs_resolve_base (fs, subvol, inode, &ciatt); } for (component = strtok_r (path, "/", &saveptr); |