Whamcloud - gitweb
LU-2548 quota: proper iam index truncation
authorNiu Yawei <niu@whamcloud.com>
Thu, 7 Feb 2013 06:58:18 +0000 (01:58 -0500)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 27 Feb 2013 08:00:28 +0000 (03:00 -0500)
In quota migration, the iam container needs be reinitialized
after truncation.

Signed-off-by: Niu Yawei <yawei.niu@intel.com>
Change-Id: I622cc8e4e095cc0c9dcd2d2ce0e245a6de376b3d
Reviewed-on: http://review.whamcloud.com/5292
Reviewed-by: Johann Lombardi <johann.lombardi@intel.com>
Reviewed-by: Fan Yong <fan.yong@intel.com>
Tested-by: Hudson
Tested-by: Maloo <whamcloud.maloo@gmail.com>
lustre/osd-ldiskfs/osd_quota.c

index bfab83a..39059f0 100644 (file)
@@ -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 */