Whamcloud - gitweb
LU-6138 lfsck: set async windows size properly
[fs/lustre-release.git] / lustre / osc / osc_object.c
index bd26422..c03582a 100644 (file)
@@ -170,28 +170,28 @@ static int osc_attr_get(const struct lu_env *env, struct cl_object *obj,
         return 0;
 }
 
-static int osc_attr_set(const struct lu_env *env, struct cl_object *obj,
-                       const struct cl_attr *attr, unsigned valid)
+static int osc_attr_update(const struct lu_env *env, struct cl_object *obj,
+                          const struct cl_attr *attr, unsigned valid)
 {
-        struct lov_oinfo *oinfo = cl2osc(obj)->oo_oinfo;
-        struct ost_lvb   *lvb   = &oinfo->loi_lvb;
-
-        if (valid & CAT_SIZE)
-                lvb->lvb_size = attr->cat_size;
-        if (valid & CAT_MTIME)
-                lvb->lvb_mtime = attr->cat_mtime;
-        if (valid & CAT_ATIME)
-                lvb->lvb_atime = attr->cat_atime;
-        if (valid & CAT_CTIME)
-                lvb->lvb_ctime = attr->cat_ctime;
-        if (valid & CAT_BLOCKS)
-                lvb->lvb_blocks = attr->cat_blocks;
-        if (valid & CAT_KMS) {
-                CDEBUG(D_CACHE, "set kms from "LPU64"to "LPU64"\n",
-                       oinfo->loi_kms, (__u64)attr->cat_kms);
-                loi_kms_set(oinfo, attr->cat_kms);
-        }
-        return 0;
+       struct lov_oinfo *oinfo = cl2osc(obj)->oo_oinfo;
+       struct ost_lvb   *lvb   = &oinfo->loi_lvb;
+
+       if (valid & CAT_SIZE)
+               lvb->lvb_size = attr->cat_size;
+       if (valid & CAT_MTIME)
+               lvb->lvb_mtime = attr->cat_mtime;
+       if (valid & CAT_ATIME)
+               lvb->lvb_atime = attr->cat_atime;
+       if (valid & CAT_CTIME)
+               lvb->lvb_ctime = attr->cat_ctime;
+       if (valid & CAT_BLOCKS)
+               lvb->lvb_blocks = attr->cat_blocks;
+       if (valid & CAT_KMS) {
+               CDEBUG(D_CACHE, "set kms from "LPU64"to "LPU64"\n",
+                      oinfo->loi_kms, (__u64)attr->cat_kms);
+               loi_kms_set(oinfo, attr->cat_kms);
+       }
+       return 0;
 }
 
 static int osc_object_glimpse(const struct lu_env *env,
@@ -209,7 +209,6 @@ static int osc_object_ast_clear(struct ldlm_lock *lock, void *data)
 {
        ENTRY;
 
-       LASSERT(lock->l_granted_mode == lock->l_req_mode);
        if (lock->l_ast_data == data)
                lock->l_ast_data = NULL;
        RETURN(LDLM_ITER_CONTINUE);
@@ -231,6 +230,31 @@ static int osc_object_prune(const struct lu_env *env, struct cl_object *obj)
                              osc_object_ast_clear, osc);
        return 0;
 }
+/**
+ * Find any ldlm lock covers the osc object.
+ * \retval 0   not found
+ * \retval 1   find one
+ * \retval < 0 error
+ */
+static int osc_object_find_cbdata(const struct lu_env *env,
+                                 struct cl_object *obj, ldlm_iterator_t iter,
+                                 void *data)
+{
+       struct ldlm_res_id              res_id;
+       struct obd_device               *obd;
+       int                             rc = 0;
+
+       ostid_build_res_name(&cl2osc(obj)->oo_oinfo->loi_oi, &res_id);
+       obd = obj->co_lu.lo_dev->ld_obd;
+       rc = ldlm_resource_iterate(obd->obd_namespace, &res_id, iter, data);
+       if (rc == LDLM_ITER_STOP)
+               return 1;
+
+       if (rc == LDLM_ITER_CONTINUE)
+               return 0;
+
+       return rc;
+}
 
 void osc_object_set_contended(struct osc_object *obj)
 {
@@ -271,13 +295,14 @@ int osc_object_is_contended(struct osc_object *obj)
 }
 
 static const struct cl_object_operations osc_ops = {
-       .coo_page_init = osc_page_init,
-       .coo_lock_init = osc_lock_init,
-       .coo_io_init   = osc_io_init,
-       .coo_attr_get  = osc_attr_get,
-       .coo_attr_set  = osc_attr_set,
-       .coo_glimpse   = osc_object_glimpse,
-       .coo_prune     = osc_object_prune
+       .coo_page_init    = osc_page_init,
+       .coo_lock_init    = osc_lock_init,
+       .coo_io_init      = osc_io_init,
+       .coo_attr_get     = osc_attr_get,
+       .coo_attr_update  = osc_attr_update,
+       .coo_glimpse      = osc_object_glimpse,
+       .coo_prune        = osc_object_prune,
+       .coo_find_cbdata  = osc_object_find_cbdata
 };
 
 static const struct lu_object_operations osc_lu_obj_ops = {