diff options
| author | Eric W. Biederman <ebiederm@xmission.com> | 2012-09-16 03:11:50 -0700 | 
|---|---|---|
| committer | Eric W. Biederman <ebiederm@xmission.com> | 2012-09-18 01:01:40 -0700 | 
| commit | aca645a6a54e001e004f1f1e0eafd94f994bb1b3 (patch) | |
| tree | 6e143c0077f22d5f3487d67408e7015805f74a69 | |
| parent | 431f19744d15531825cdbc8e771b43854b0d005b (diff) | |
| download | olio-linux-3.10-aca645a6a54e001e004f1f1e0eafd94f994bb1b3.tar.xz olio-linux-3.10-aca645a6a54e001e004f1f1e0eafd94f994bb1b3.zip  | |
userns: Modify dqget to take struct kqid
Modify dqget to take struct kqid instead of a type and an identifier
pair.
Modify the callers of dqget in ocfs2 and dquot to take generate
a struct kqid so they can continue to call dqget.  The conversion
to create struct kqid should all be the final conversions that
are needed in those code paths.
Cc: Jan Kara <jack@suse.cz>
Cc: Mark Fasheh <mfasheh@suse.com>
Cc: Joel Becker <jlbec@evilplan.org>
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
| -rw-r--r-- | fs/ocfs2/file.c | 6 | ||||
| -rw-r--r-- | fs/ocfs2/quota_local.c | 4 | ||||
| -rw-r--r-- | fs/quota/dquot.c | 20 | ||||
| -rw-r--r-- | include/linux/quotaops.h | 2 | 
4 files changed, 17 insertions, 15 deletions
diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index 46a1f6d7510..5a4ee77cec5 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c @@ -1184,8 +1184,7 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr)  		if (attr->ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid  		    && OCFS2_HAS_RO_COMPAT_FEATURE(sb,  		    OCFS2_FEATURE_RO_COMPAT_USRQUOTA)) { -			transfer_to[USRQUOTA] = dqget(sb, attr->ia_uid, -						      USRQUOTA); +			transfer_to[USRQUOTA] = dqget(sb, make_kqid_uid(attr->ia_uid));  			if (!transfer_to[USRQUOTA]) {  				status = -ESRCH;  				goto bail_unlock; @@ -1194,8 +1193,7 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr)  		if (attr->ia_valid & ATTR_GID && attr->ia_gid != inode->i_gid  		    && OCFS2_HAS_RO_COMPAT_FEATURE(sb,  		    OCFS2_FEATURE_RO_COMPAT_GRPQUOTA)) { -			transfer_to[GRPQUOTA] = dqget(sb, attr->ia_gid, -						      GRPQUOTA); +			transfer_to[GRPQUOTA] = dqget(sb, make_kqid_gid(attr->ia_gid));  			if (!transfer_to[GRPQUOTA]) {  				status = -ESRCH;  				goto bail_unlock; diff --git a/fs/ocfs2/quota_local.c b/fs/ocfs2/quota_local.c index f100bf70a90..020f0ba29ee 100644 --- a/fs/ocfs2/quota_local.c +++ b/fs/ocfs2/quota_local.c @@ -501,7 +501,9 @@ static int ocfs2_recover_local_quota_file(struct inode *lqinode,  			}  			dqblk = (struct ocfs2_local_disk_dqblk *)(qbh->b_data +  				ol_dqblk_block_off(sb, chunk, bit)); -			dquot = dqget(sb, le64_to_cpu(dqblk->dqb_id), type); +			dquot = dqget(sb, +				      make_kqid(&init_user_ns, type, +						le64_to_cpu(dqblk->dqb_id)));  			if (!dquot) {  				status = -EIO;  				mlog(ML_ERROR, "Failed to get quota structure " diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index 80d33782246..53e377a59b0 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c @@ -829,8 +829,10 @@ static struct dquot *get_empty_dquot(struct super_block *sb, int type)   *   a) checking for quota flags under dq_list_lock and   *   b) getting a reference to dquot before we release dq_list_lock   */ -struct dquot *dqget(struct super_block *sb, unsigned int id, int type) +struct dquot *dqget(struct super_block *sb, struct kqid qid)  { +	unsigned int type = qid.type; +	unsigned int id = from_kqid(&init_user_ns, qid);  	unsigned int hashent = hashfn(sb, id, type);  	struct dquot *dquot = NULL, *empty = NULL; @@ -1390,7 +1392,6 @@ static int dquot_active(const struct inode *inode)   */  static void __dquot_initialize(struct inode *inode, int type)  { -	unsigned int id = 0;  	int cnt;  	struct dquot *got[MAXQUOTAS];  	struct super_block *sb = inode->i_sb; @@ -1403,18 +1404,19 @@ static void __dquot_initialize(struct inode *inode, int type)  	/* First get references to structures we might need. */  	for (cnt = 0; cnt < MAXQUOTAS; cnt++) { +		struct kqid qid;  		got[cnt] = NULL;  		if (type != -1 && cnt != type)  			continue;  		switch (cnt) {  		case USRQUOTA: -			id = inode->i_uid; +			qid = make_kqid_uid(inode->i_uid);  			break;  		case GRPQUOTA: -			id = inode->i_gid; +			qid = make_kqid_gid(inode->i_gid);  			break;  		} -		got[cnt] = dqget(sb, id, cnt); +		got[cnt] = dqget(sb, qid);  	}  	down_write(&sb_dqopt(sb)->dqptr_sem); @@ -1898,9 +1900,9 @@ int dquot_transfer(struct inode *inode, struct iattr *iattr)  		return 0;  	if (iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) -		transfer_to[USRQUOTA] = dqget(sb, iattr->ia_uid, USRQUOTA); +		transfer_to[USRQUOTA] = dqget(sb, make_kqid_uid(iattr->ia_uid));  	if (iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid) -		transfer_to[GRPQUOTA] = dqget(sb, iattr->ia_gid, GRPQUOTA); +		transfer_to[GRPQUOTA] = dqget(sb, make_kqid_gid(iattr->ia_gid));  	ret = __dquot_transfer(inode, transfer_to);  	dqput_all(transfer_to); @@ -2381,7 +2383,7 @@ int dquot_get_dqblk(struct super_block *sb, struct kqid qid,  {  	struct dquot *dquot; -	dquot = dqget(sb, qid.type, from_kqid(&init_user_ns, qid)); +	dquot = dqget(sb, qid);  	if (!dquot)  		return -ESRCH;  	do_get_dqblk(dquot, di); @@ -2494,7 +2496,7 @@ int dquot_set_dqblk(struct super_block *sb, struct kqid qid,  	struct dquot *dquot;  	int rc; -	dquot = dqget(sb, qid.type, from_kqid(&init_user_ns, qid)); +	dquot = dqget(sb, qid);  	if (!dquot) {  		rc = -ESRCH;  		goto out; diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h index bd3730d76fd..1c50093ae65 100644 --- a/include/linux/quotaops.h +++ b/include/linux/quotaops.h @@ -44,7 +44,7 @@ void inode_sub_rsv_space(struct inode *inode, qsize_t number);  void dquot_initialize(struct inode *inode);  void dquot_drop(struct inode *inode); -struct dquot *dqget(struct super_block *sb, unsigned int id, int type); +struct dquot *dqget(struct super_block *sb, struct kqid qid);  void dqput(struct dquot *dquot);  int dquot_scan_active(struct super_block *sb,  		      int (*fn)(struct dquot *dquot, unsigned long priv),  |