Whamcloud - gitweb
LU-6719 osd-zfs: Ignore EEXIST during object init 54/18054/4
authorNathaniel Clark <nathaniel.l.clark@intel.com>
Wed, 20 Jan 2016 16:16:00 +0000 (11:16 -0500)
committerOleg Drokin <oleg.drokin@intel.com>
Fri, 5 Feb 2016 14:57:25 +0000 (14:57 +0000)
ZFS can return EEXIST if object exists but is being destroyed.

Specifically see dnode_hold_impl()

Signed-off-by: Nathaniel Clark <nathaniel.l.clark@intel.com>
Change-Id: Id99b406b2f02a1337b9f1566fba30dbced755d5d
Reviewed-on: http://review.whamcloud.com/18054
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Tested-by: Jenkins
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 d59aa91..9884333 100644 (file)
@@ -399,6 +399,11 @@ static int osd_object_init(const struct lu_env *env, struct lu_object *l,
        if (rc == 0) {
                LASSERT(obj->oo_db == NULL);
                rc = __osd_obj2dbuf(env, osd->od_os, oid, &obj->oo_db);
+               /* EEXIST will be returned if object is being deleted in ZFS */
+               if (rc == -EEXIST) {
+                       rc = 0;
+                       GOTO(out, rc);
+               }
                if (rc != 0) {
                        CERROR("%s: lookup "DFID"/"LPX64" failed: rc = %d\n",
                               osd->od_svname, PFID(lu_object_fid(l)), oid, rc);