From 9af17f8c36e8bc04e61b7eb2df868d0fe4b6916c Mon Sep 17 00:00:00 2001 From: Niu Yawei Date: Thu, 7 Feb 2013 01:58:18 -0500 Subject: [PATCH] LU-2548 quota: proper iam index truncation In quota migration, the iam container needs be reinitialized after truncation. Signed-off-by: Niu Yawei Change-Id: I622cc8e4e095cc0c9dcd2d2ce0e245a6de376b3d Reviewed-on: http://review.whamcloud.com/5292 Reviewed-by: Johann Lombardi Reviewed-by: Fan Yong Tested-by: Hudson Tested-by: Maloo --- lustre/osd-ldiskfs/osd_quota.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/lustre/osd-ldiskfs/osd_quota.c b/lustre/osd-ldiskfs/osd_quota.c index bfab83a..39059f0 100644 --- a/lustre/osd-ldiskfs/osd_quota.c +++ b/lustre/osd-ldiskfs/osd_quota.c @@ -846,6 +846,8 @@ out: return rc; } +/* Nobdy else can access the global index now, it's safe to truncate and + * reinitialize it */ static int truncate_quota_index(const struct lu_env *env, struct dt_object *dt, const struct dt_index_features *feat) { @@ -855,8 +857,12 @@ static int truncate_quota_index(const struct lu_env *env, struct dt_object *dt, struct osd_thandle *oth; struct inode *inode; int rc; + struct iam_container *bag = &(osd_dt_obj(dt))->oo_dir->od_container; ENTRY; + LASSERT(bag->ic_root_bh != NULL); + iam_container_fini(bag); + LASSERT(fid_seq(lu_object_fid(&dt->do_lu)) == FID_SEQ_QUOTA_GLB); OBD_ALLOC_PTR(attr); @@ -917,6 +923,12 @@ out_lock: out: dt_trans_stop(env, &osd->od_dt_dev, th); OBD_FREE_PTR(attr); + + if (rc == 0) { + rc = iam_container_setup(bag); + if (rc != 0) + iam_container_fini(bag); + } RETURN(rc); } @@ -1041,7 +1053,7 @@ int osd_quota_migration(const struct lu_env *env, struct dt_object *dt, if (rc) { CERROR("%s: Failed to truncate the quota index "DFID", rc:%d\n", osd->od_svname, PFID(lu_object_fid(&dt->do_lu)), rc); - RETURN(rc); + GOTO(out, rc); } /* set up indexing operations for the admin file */ -- 1.8.3.1