Whamcloud - gitweb
LU-5565 osd-ldiskfs: handle non-existing objects 08/12608/6
authorJohn L. Hammond <john.hammond@intel.com>
Mon, 10 Nov 2014 18:11:50 +0000 (12:11 -0600)
committerOleg Drokin <oleg.drokin@intel.com>
Fri, 16 Jan 2015 03:26:35 +0000 (03:26 +0000)
In the DT API method implementations in lustre/osd/osd_ldiskfs.c
replace assertions that the object exists (or does not exist) with
appropriate error returns.

Signed-off-by: John L. Hammond <john.hammond@intel.com>
Change-Id: If346861eb352efaf0b90a8e7778e8fbb3cf16bf0
Reviewed-on: http://review.whamcloud.com/12608
Reviewed-by: Fan Yong <fan.yong@intel.com>
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
lustre/osd-ldiskfs/osd_handler.c

index 0d27665..db71792 100644 (file)
@@ -1730,7 +1730,9 @@ static int osd_attr_get(const struct lu_env *env,
 {
        struct osd_object *obj = osd_dt_obj(dt);
 
-       LASSERT(dt_object_exists(dt));
+       if (!dt_object_exists(dt))
+               return -ENOENT;
+
        LASSERT(!dt_object_remote(dt));
        LINVRNT(osd_invariant(obj));
 
@@ -1973,8 +1975,10 @@ static int osd_attr_set(const struct lu_env *env,
        struct inode      *inode;
        int rc;
 
+       if (!dt_object_exists(dt))
+               return -ENOENT;
+
        LASSERT(handle != NULL);
-       LASSERT(dt_object_exists(dt));
        LASSERT(!dt_object_remote(dt));
        LASSERT(osd_invariant(obj));
 
@@ -2416,8 +2420,10 @@ static int osd_object_create(const struct lu_env *env, struct dt_object *dt,
        int result;
        ENTRY;
 
+       if (dt_object_exists(dt))
+               return -EEXIST;
+
        LINVRNT(osd_invariant(obj));
-       LASSERT(!dt_object_exists(dt));
        LASSERT(!dt_object_remote(dt));
        LASSERT(osd_write_locked(env, obj));
        LASSERT(th != NULL);
@@ -2745,8 +2751,10 @@ static int osd_object_ea_create(const struct lu_env *env, struct dt_object *dt,
 
        ENTRY;
 
+       if (dt_object_exists(dt))
+               RETURN(-EEXIST);
+
        LASSERT(osd_invariant(obj));
-       LASSERT(!dt_object_exists(dt));
        LASSERT(!dt_object_remote(dt));
        LASSERT(osd_write_locked(env, obj));
        LASSERT(th != NULL);
@@ -2804,8 +2812,10 @@ static int osd_object_ref_add(const struct lu_env *env,
        struct osd_thandle *oh;
        int                 rc = 0;
 
+       if (!dt_object_exists(dt))
+               return -ENOENT;
+
        LINVRNT(osd_invariant(obj));
-       LASSERT(dt_object_exists(dt));
        LASSERT(!dt_object_remote(dt));
        LASSERT(osd_write_locked(env, obj));
        LASSERT(th != NULL);
@@ -2851,7 +2861,6 @@ static int osd_declare_object_ref_del(const struct lu_env *env,
 {
        struct osd_thandle *oh;
 
-       LASSERT(dt_object_exists(dt));
        LASSERT(!dt_object_remote(dt));
        LASSERT(handle != NULL);
 
@@ -2875,8 +2884,10 @@ static int osd_object_ref_del(const struct lu_env *env, struct dt_object *dt,
        struct osd_device       *osd = osd_dev(dt->do_lu.lo_dev);
        struct osd_thandle      *oh;
 
+       if (!dt_object_exists(dt))
+               return -ENOENT;
+
        LINVRNT(osd_invariant(obj));
-       LASSERT(dt_object_exists(dt));
        LASSERT(!dt_object_remote(dt));
        LASSERT(osd_write_locked(env, obj));
        LASSERT(th != NULL);
@@ -2952,7 +2963,9 @@ static int osd_xattr_get(const struct lu_env *env, struct dt_object *dt,
                return sizeof(dt_obj_version_t);
         }
 
-       LASSERT(dt_object_exists(dt));
+       if (!dt_object_exists(dt))
+               return -ENOENT;
+
        LASSERT(!dt_object_remote(dt));
        LASSERT(inode->i_op != NULL);
        LASSERT(inode->i_op->getxattr != NULL);
@@ -3094,7 +3107,9 @@ static int osd_xattr_list(const struct lu_env *env, struct dt_object *dt,
        struct osd_thread_info *info   = osd_oti_get(env);
        struct dentry          *dentry = &info->oti_obj_dentry;
 
-       LASSERT(dt_object_exists(dt));
+       if (!dt_object_exists(dt))
+               return -ENOENT;
+
        LASSERT(!dt_object_remote(dt));
        LASSERT(inode->i_op != NULL);
        LASSERT(inode->i_op->listxattr != NULL);
@@ -3114,7 +3129,6 @@ static int osd_declare_xattr_del(const struct lu_env *env,
        struct osd_thandle *oh;
        struct super_block *sb = osd_sb(osd_dev(dt->do_lu.lo_dev));
 
-       LASSERT(dt_object_exists(dt));
        LASSERT(!dt_object_remote(dt));
        LASSERT(handle != NULL);
 
@@ -3145,7 +3159,9 @@ static int osd_xattr_del(const struct lu_env *env, struct dt_object *dt,
        struct dentry          *dentry = &info->oti_obj_dentry;
        int                     rc;
 
-       LASSERT(dt_object_exists(dt));
+       if (!dt_object_exists(dt))
+               return -ENOENT;
+
        LASSERT(!dt_object_remote(dt));
        LASSERT(inode->i_op != NULL);
        LASSERT(inode->i_op->removexattr != NULL);
@@ -3181,7 +3197,9 @@ static struct obd_capa *osd_capa_get(const struct lu_env *env,
        if (!osd->od_fl_capa)
                RETURN(ERR_PTR(-ENOENT));
 
-       LASSERT(dt_object_exists(dt));
+       if (!dt_object_exists(dt))
+               RETURN(ERR_PTR(-ENOENT));
+
        LASSERT(!dt_object_remote(dt));
        LINVRNT(osd_invariant(obj));
 
@@ -3535,8 +3553,10 @@ static int osd_index_iam_delete(const struct lu_env *env, struct dt_object *dt,
        int                     rc;
        ENTRY;
 
+       if (!dt_object_exists(dt))
+               RETURN(-ENOENT);
+
        LINVRNT(osd_invariant(obj));
-       LASSERT(dt_object_exists(dt));
        LASSERT(!dt_object_remote(dt));
        LASSERT(bag->ic_object == obj->oo_inode);
        LASSERT(handle != NULL);
@@ -3576,7 +3596,6 @@ static int osd_index_declare_ea_delete(const struct lu_env *env,
        int                 rc;
        ENTRY;
 
-       LASSERT(dt_object_exists(dt));
        LASSERT(!dt_object_remote(dt));
        LASSERT(handle != NULL);
 
@@ -3656,8 +3675,10 @@ static int osd_index_ea_delete(const struct lu_env *env, struct dt_object *dt,
        int                        rc;
        ENTRY;
 
+       if (!dt_object_exists(dt))
+               RETURN(-ENOENT);
+
        LINVRNT(osd_invariant(obj));
-       LASSERT(dt_object_exists(dt));
        LASSERT(!dt_object_remote(dt));
        LASSERT(handle != NULL);
 
@@ -3810,8 +3831,10 @@ static int osd_index_iam_lookup(const struct lu_env *env, struct dt_object *dt,
        int                     rc;
        ENTRY;
 
+       if (!dt_object_exists(dt))
+               RETURN(-ENOENT);
+
        LASSERT(osd_invariant(obj));
-       LASSERT(dt_object_exists(dt));
        LASSERT(!dt_object_remote(dt));
        LASSERT(bag->ic_object == obj->oo_inode);
 
@@ -3894,15 +3917,19 @@ static int osd_index_iam_insert(const struct lu_env *env, struct dt_object *dt,
        struct osd_object     *obj = osd_dt_obj(dt);
        struct iam_path_descr *ipd;
        struct osd_thandle    *oh;
-       struct iam_container  *bag = &obj->oo_dir->od_container;
+       struct iam_container  *bag;
        struct osd_thread_info *oti = osd_oti_get(env);
        struct iam_rec         *iam_rec;
        int                     rc;
        ENTRY;
 
+       if (!dt_object_exists(dt))
+               RETURN(-ENOENT);
+
        LINVRNT(osd_invariant(obj));
-       LASSERT(dt_object_exists(dt));
        LASSERT(!dt_object_remote(dt));
+
+       bag = &obj->oo_dir->od_container;
        LASSERT(bag->ic_object == obj->oo_inode);
        LASSERT(th != NULL);
 
@@ -4519,8 +4546,10 @@ static int osd_index_ea_insert(const struct lu_env *env, struct dt_object *dt,
        int                     rc;
        ENTRY;
 
+       if (!dt_object_exists(dt))
+               RETURN(-ENOENT);
+
        LASSERT(osd_invariant(obj));
-       LASSERT(dt_object_exists(dt));
        LASSERT(!dt_object_remote(dt));
        LASSERT(th != NULL);
 
@@ -4605,7 +4634,8 @@ static struct dt_it *osd_it_iam_init(const struct lu_env *env,
         struct iam_path_descr  *ipd;
         struct iam_container   *bag = &obj->oo_dir->od_container;
 
-        LASSERT(lu_object_exists(lo));
+       if (!dt_object_exists(dt))
+               return ERR_PTR(-ENOENT);
 
         if (osd_object_auth(env, dt, capa, CAPA_OPC_BODY_READ))
                 return ERR_PTR(-EACCES);
@@ -4902,7 +4932,8 @@ static struct dt_it *osd_it_ea_init(const struct lu_env *env,
        struct dentry           *obj_dentry = &info->oti_it_dentry;
        ENTRY;
 
-       LASSERT(lu_object_exists(lo));
+       if (!dt_object_exists(dt))
+               RETURN(ERR_PTR(-ENOENT));
 
        if (info->oti_it_inline) {
                OBD_ALLOC_PTR(it);