Whamcloud - gitweb
LU-9280 osd-zfs: don't mark existing on failed creation 17/26617/3
authorNiu Yawei <yawei.niu@intel.com>
Fri, 14 Apr 2017 05:18:21 +0000 (01:18 -0400)
committerOleg Drokin <oleg.drokin@intel.com>
Sun, 23 Apr 2017 03:10:46 +0000 (03:10 +0000)
In osd_object_create(), existing flag shouldn't be set on failure.

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

index 042ea47..d8a4edd 100644 (file)
@@ -1520,8 +1520,6 @@ static int osd_object_create(const struct lu_env *env, struct dt_object *dt,
 
        /* XXX: oo_lma_flags */
        obj->oo_dt.do_lu.lo_header->loh_attr |= obj->oo_attr.la_mode & S_IFMT;
-       smp_mb();
-       obj->oo_dt.do_lu.lo_header->loh_attr |= LOHA_EXISTS;
        if (likely(!fid_is_acct(lu_object_fid(&obj->oo_dt.do_lu))))
                /* no body operations for accounting objects */
                obj->oo_dt.do_body_ops = &osd_body_ops;
@@ -1547,6 +1545,8 @@ out:
                dmu_object_free(osd->od_os, dn->dn_object, oh->ot_tx);
                osd_dnode_rele(dn);
                obj->oo_dn = NULL;
+       } else if (!rc) {
+               obj->oo_dt.do_lu.lo_header->loh_attr |= LOHA_EXISTS;
        }
        up_write(&obj->oo_guard);
        RETURN(rc);