Whamcloud - gitweb
LU-957 scrub: disable OI Scrub for osd-zfs
authorJinshan Xiong <jinshan.xiong@whamcloud.com>
Fri, 10 Aug 2012 03:59:02 +0000 (20:59 -0700)
committerOleg Drokin <green@whamcloud.com>
Mon, 20 Aug 2012 15:12:47 +0000 (11:12 -0400)
ZFS is not supported by OI Scrub.

Signed-off-by: Jinshan Xiong <jinshan.xiong@intel.com>
Change-Id: I7a2f90298f37edab870edf28008a1a140260c99b
Reviewed-on: http://review.whamcloud.com/3594
Reviewed-by: Fan Yong <yong.fan@whamcloud.com>
Tested-by: Hudson
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <whamcloud.maloo@gmail.com>
lustre/mdd/mdd_lfsck.c
lustre/osd-zfs/osd_index.c
lustre/osd-zfs/osd_object.c

index 5cb24d3..e3b2d3e 100644 (file)
@@ -212,6 +212,9 @@ int mdd_lfsck_start(const struct lu_env *env, struct md_lfsck *lfsck,
        __u16                 flags   = 0;
        ENTRY;
 
+       if (lfsck->ml_it_obj == NULL)
+               RETURN(-ENOTSUPP);
+
        cfs_mutex_lock(&lfsck->ml_mutex);
        cfs_spin_lock(&lfsck->ml_lock);
        if (thread_is_running(thread)) {
@@ -315,6 +318,11 @@ int mdd_lfsck_setup(const struct lu_env *env, struct mdd_device *mdd)
        rc = obj->do_ops->do_index_try(env, obj, &dt_otable_features);
        if (rc != 0) {
                lu_object_put(env, &obj->do_lu);
+               if (rc == -ENOTSUPP) {
+                       CERROR("%s: Lustre LFSCK unsupported on this device.\n",
+                               mdd->mdd_obd_dev->obd_name);
+                       rc = 0;
+               }
                return rc;
        }
 
index 0cb3bca..8bc19ec 100644 (file)
@@ -902,7 +902,7 @@ int osd_index_try(const struct lu_env *env, struct dt_object *dt,
        struct osd_object *obj = osd_dt_obj(dt);
        ENTRY;
 
-       LASSERT(obj->oo_db != NULL);
+       LASSERT(dt_object_exists(dt));
 
        /*
         * XXX: implement support for fixed-size keys sorted with natural
@@ -911,6 +911,11 @@ int osd_index_try(const struct lu_env *env, struct dt_object *dt,
        if (feat->dif_flags & DT_IND_RANGE)
                RETURN(-ERANGE);
 
+       if (unlikely(feat == &dt_otable_features))
+               /* do not support oi scrub yet. */
+               RETURN(-ENOTSUPP);
+
+       LASSERT(obj->oo_db != NULL);
        if (likely(feat == &dt_directory_features)) {
                if (udmu_object_is_zap(obj->oo_db))
                        dt->do_index_ops = &osd_dir_ops;
index a241376..bd12851 100644 (file)
@@ -77,6 +77,7 @@ static char *osd_obj_tag = "osd_object";
 static struct dt_object_operations osd_obj_ops;
 static struct lu_object_operations osd_lu_obj_ops;
 extern struct dt_body_operations osd_body_ops;
+static struct dt_object_operations osd_obj_otable_it_ops;
 
 extern cfs_mem_cache_t *osd_object_kmem;
 
@@ -372,6 +373,11 @@ static int osd_object_init(const struct lu_env *env, struct lu_object *l,
                               osd->od_svname, PFID(lu_object_fid(l)), oid, rc);
                }
        } else if (rc == -ENOENT) {
+               if (fid_is_otable_it(&l->lo_header->loh_fid)) {
+                       obj->oo_dt.do_ops = &osd_obj_otable_it_ops;
+                       /* LFSCK iterator object is special without inode */
+                       l->lo_header->loh_attr |= LOHA_EXISTS;
+                }
                rc = 0;
        }
        LASSERT(osd_invariant(obj));
@@ -1601,3 +1607,17 @@ static struct lu_object_operations osd_lu_obj_ops = {
        .loo_object_invariant   = osd_object_invariant,
 };
 
+static int osd_otable_it_attr_get(const struct lu_env *env,
+                               struct dt_object *dt,
+                               struct lu_attr *attr,
+                               struct lustre_capa *capa)
+{
+       attr->la_valid = 0;
+       return 0;
+}
+
+static struct dt_object_operations osd_obj_otable_it_ops = {
+        .do_attr_get    = osd_otable_it_attr_get,
+        .do_index_try   = osd_index_try,
+};
+