X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=lustre%2Fosc%2Fosc_object.c;h=16bb564354fe03fac3e0c59d9955cd15de8a82ba;hp=f840257af0e61966d86aa8ee177b2f2f92d7f96d;hb=8f01f8b51d114b0d2d54a5ab7db3161782e52447;hpb=d7223c0ccda11f120e50cd0195d84583d6ee4a29 diff --git a/lustre/osc/osc_object.c b/lustre/osc/osc_object.c index f840257..16bb564 100644 --- a/lustre/osc/osc_object.c +++ b/lustre/osc/osc_object.c @@ -97,6 +97,9 @@ static int osc_object_init(const struct lu_env *env, struct lu_object *obj, spin_lock_init(&osc->oo_ol_spin); INIT_LIST_HEAD(&osc->oo_ol_list); + atomic_set(&osc->oo_nr_ios, 0); + init_waitqueue_head(&osc->oo_io_waitq); + cl_object_page_init(lu2cl(obj), sizeof(struct osc_page)); return 0; @@ -119,6 +122,7 @@ static void osc_object_free(const struct lu_env *env, struct lu_object *obj) LASSERT(atomic_read(&osc->oo_nr_reads) == 0); LASSERT(atomic_read(&osc->oo_nr_writes) == 0); LASSERT(list_empty(&osc->oo_ol_list)); + LASSERT(atomic_read(&osc->oo_nr_ios) == 0); lu_object_fini(obj); OBD_SLAB_FREE_PTR(osc, osc_object_kmem); @@ -408,4 +412,20 @@ struct lu_object *osc_object_alloc(const struct lu_env *env, return obj; } +int osc_object_invalidate(const struct lu_env *env, struct osc_object *osc) +{ + struct l_wait_info lwi = { 0 }; + ENTRY; + + CDEBUG(D_INODE, "Invalidate osc object: %p, # of active IOs: %d\n", + osc, atomic_read(&osc->oo_nr_ios)); + + l_wait_event(osc->oo_io_waitq, atomic_read(&osc->oo_nr_ios) == 0, &lwi); + + /* Discard all pages of this object. */ + osc_cache_truncate_start(env, osc, 0, NULL); + + RETURN(0); +} + /** @} osc */