Whamcloud - gitweb
LU-3086 build: fix 'uninitialized variables' errors
[fs/lustre-release.git] / lustre / osd-ldiskfs / osd_quota.c
index 8c17b13..f85bef7 100644 (file)
@@ -65,6 +65,10 @@ int osd_acct_obj_lookup(struct osd_thread_info *info, struct osd_device *osd,
                        const struct lu_fid *fid, struct osd_inode_id *id)
 {
        struct super_block *sb = osd_sb(osd);
+        unsigned long qf_inums[2] = {
+               le32_to_cpu(LDISKFS_SB(sb)->s_es->s_usr_quota_inum),
+               le32_to_cpu(LDISKFS_SB(sb)->s_es->s_grp_quota_inum)
+       };
 
        ENTRY;
        LASSERT(fid_is_acct(fid));
@@ -74,7 +78,7 @@ int osd_acct_obj_lookup(struct osd_thread_info *info, struct osd_device *osd,
                RETURN(-ENOENT);
 
        id->oii_gen = OSD_OII_NOGEN;
-       id->oii_ino = LDISKFS_SB(sb)->s_qf_inums[fid2type(fid)];
+       id->oii_ino = qf_inums[fid2type(fid)];
        if (!ldiskfs_valid_inum(sb, id->oii_ino))
                RETURN(-ENOENT);
        RETURN(0);
@@ -100,7 +104,11 @@ static int osd_acct_index_lookup(const struct lu_env *env,
                                 struct lustre_capa *capa)
 {
        struct osd_thread_info  *info = osd_oti_get(env);
+#ifdef HAVE_DQUOT_FS_DISK_QUOTA
+       struct fs_disk_quota    *dqblk = &info->oti_fdq;
+#else
        struct if_dqblk         *dqblk = &info->oti_dqblk;
+#endif
        struct super_block      *sb = osd_sb(osd_obj2dev(osd_dt_obj(dtobj)));
        struct lquota_acct_rec  *rec = (struct lquota_acct_rec *)dtrec;
        __u64                    id = *((__u64 *)dtkey);
@@ -112,8 +120,13 @@ static int osd_acct_index_lookup(const struct lu_env *env,
        rc = sb->s_qcop->get_dqblk(sb, obj2type(dtobj), (qid_t) id, dqblk);
        if (rc)
                RETURN(rc);
+#ifdef HAVE_DQUOT_FS_DISK_QUOTA
+       rec->bspace = dqblk->d_bcount;
+       rec->ispace = dqblk->d_icount;
+#else
        rec->bspace = dqblk->dqb_curspace;
        rec->ispace = dqblk->dqb_curinodes;
+#endif
        RETURN(+1);
 }
 
@@ -833,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)
 {
@@ -842,8 +857,14 @@ 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);
        if (attr == NULL)
                RETURN(-ENOMEM);
@@ -902,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);
 }
 
@@ -933,10 +960,6 @@ out:
        RETURN(rc);
 }
 
-#define OBJECTS                "OBJECTS"
-#define ADMIN_USR      "admin_quotafile_v2.usr"
-#define ADMIN_GRP      "admin_quotafile_v2.grp"
-
 int osd_quota_migration(const struct lu_env *env, struct dt_object *dt,
                        const struct dt_index_features *feat)
 {
@@ -945,7 +968,7 @@ int osd_quota_migration(const struct lu_env *env, struct dt_object *dt,
        struct dt_object        *root, *parent = NULL, *admin = NULL;
        dt_obj_version_t         version;
        char                    *fname;
-       bool                     isblk, converted = false;
+       bool                     isblk = false, converted = false;
        int                      rc;
        ENTRY;
 
@@ -1030,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 */