Whamcloud - gitweb
LU-6378 osd-ldiskfs: unlock inode before attr_init 02/14102/6
authorFan Yong <fan.yong@intel.com>
Tue, 24 Mar 2015 17:21:33 +0000 (01:21 +0800)
committerOleg Drokin <oleg.drokin@intel.com>
Tue, 28 Apr 2015 05:20:12 +0000 (05:20 +0000)
The ldiskfs_create_inode() returns a locked inode to the caller (OSD)
that with I_NEW state, before further initializing the inode's attr
via osd_attr_init(), we should unlock the inode, otherwise, it will
cause some unnecessary dqget operations and affect the performance.

Signed-off-by: Fan Yong <fan.yong@intel.com>
Change-Id: I36755cacc4895775130377da4ca486da08ede895
Reviewed-on: http://review.whamcloud.com/14102
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Reviewed-by: Niu Yawei <yawei.niu@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lustre/osd-ldiskfs/osd_handler.c

index c771ac5..2105a26 100644 (file)
@@ -2201,17 +2201,19 @@ static int __osd_object_create(struct osd_thread_info *info,
 
        result = osd_create_type_f(dof->dof_type)(info, obj, attr, hint, dof,
                                                  th);
-       if (result == 0) {
-               osd_attr_init(info, obj, attr, dof);
-               osd_object_init0(obj);
-       }
-
-       if (obj->oo_inode != NULL) {
+       if (likely(obj->oo_inode != NULL)) {
                LASSERT(obj->oo_inode->i_state & I_NEW);
 
+               /* Unlock the inode before attr initialization to avoid
+                * unnecessary dqget operations. LU-6378 */
                unlock_new_inode(obj->oo_inode);
        }
 
+       if (likely(result == 0)) {
+               osd_attr_init(info, obj, attr, dof);
+               osd_object_init0(obj);
+       }
+
        /* restore previous umask value */
        current->fs->umask = umask;