X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fosc%2Fosc_object.c;h=b6b01a3e08bd6eac60b7b148dc21896c66bbd7ed;hp=6b44d630724bea0067a14a1e091f57aa3e1cd327;hb=8ac020df4592fc6e85edd75d54cb3795a4e50f8e;hpb=9130d05de4e2b610095169b6f49a149c66444ee2 diff --git a/lustre/osc/osc_object.c b/lustre/osc/osc_object.c index 6b44d63..b6b01a3 100644 --- a/lustre/osc/osc_object.c +++ b/lustre/osc/osc_object.c @@ -200,10 +200,30 @@ EXPORT_SYMBOL(osc_object_glimpse); static int osc_object_ast_clear(struct ldlm_lock *lock, void *data) { + struct osc_object *osc = (struct osc_object *)data; + struct ost_lvb *lvb = lock->l_lvb_data; + struct lov_oinfo *oinfo; ENTRY; - if (lock->l_ast_data == data) + if (lock->l_ast_data == data) { lock->l_ast_data = NULL; + + LASSERT(osc != NULL); + LASSERT(osc->oo_oinfo != NULL); + LASSERT(lvb != NULL); + + /* Updates lvb in lock by the cached oinfo */ + oinfo = osc->oo_oinfo; + cl_object_attr_lock(&osc->oo_cl); + memcpy(lvb, &oinfo->loi_lvb, sizeof(oinfo->loi_lvb)); + cl_object_attr_unlock(&osc->oo_cl); + + LDLM_DEBUG(lock, "update lvb size %llu blocks %llu [cma]time: " + "%llu %llu %llu", lvb->lvb_size, lvb->lvb_blocks, + lvb->lvb_ctime, lvb->lvb_mtime, lvb->lvb_atime); + + ldlm_clear_lvb_cached(lock); + } RETURN(LDLM_ITER_CONTINUE); }