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));
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);
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)
{
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);
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);
}
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 */