diff options
| author | Christoph Hellwig <hch@infradead.org> | 2010-03-03 09:05:03 -0500 | 
|---|---|---|
| committer | Jan Kara <jack@suse.cz> | 2010-03-05 00:20:29 +0100 | 
| commit | b43fa8284d7790d9cca32c9c55e24f29be2fa33b (patch) | |
| tree | acb7f205fe2a1ae324e0e11c50f43baaa6b8dfab | |
| parent | 759bfee658beab14af7b357156461d0eb852be2c (diff) | |
| download | olio-linux-3.10-b43fa8284d7790d9cca32c9c55e24f29be2fa33b.tar.xz olio-linux-3.10-b43fa8284d7790d9cca32c9c55e24f29be2fa33b.zip  | |
dquot: cleanup dquot transfer routine
Get rid of the transfer dquot operation - it is now always called from
the filesystem and if a filesystem really needs it's own (which none
currently does) it can just call into it's own routine directly.
Rename the now static low-level dquot_transfer helper to __dquot_transfer
and vfs_dq_transfer to dquot_transfer to have a consistent namespace,
and make the new dquot_transfer return a normal negative errno value
which all callers expect.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jan Kara <jack@suse.cz>
| -rw-r--r-- | Documentation/filesystems/Locking | 2 | ||||
| -rw-r--r-- | drivers/staging/pohmelfs/inode.c | 2 | ||||
| -rw-r--r-- | fs/ext2/inode.c | 2 | ||||
| -rw-r--r-- | fs/ext3/inode.c | 2 | ||||
| -rw-r--r-- | fs/ext3/super.c | 1 | ||||
| -rw-r--r-- | fs/ext4/inode.c | 2 | ||||
| -rw-r--r-- | fs/ext4/super.c | 1 | ||||
| -rw-r--r-- | fs/jfs/file.c | 5 | ||||
| -rw-r--r-- | fs/ocfs2/file.c | 4 | ||||
| -rw-r--r-- | fs/ocfs2/quota_global.c | 1 | ||||
| -rw-r--r-- | fs/quota/dquot.c | 12 | ||||
| -rw-r--r-- | fs/reiserfs/inode.c | 3 | ||||
| -rw-r--r-- | fs/reiserfs/super.c | 1 | ||||
| -rw-r--r-- | fs/udf/file.c | 2 | ||||
| -rw-r--r-- | fs/ufs/truncate.c | 2 | ||||
| -rw-r--r-- | include/linux/quota.h | 1 | ||||
| -rw-r--r-- | include/linux/quotaops.h | 5 | 
17 files changed, 19 insertions, 29 deletions
diff --git a/Documentation/filesystems/Locking b/Documentation/filesystems/Locking index 4428f55f213..4574e0272bd 100644 --- a/Documentation/filesystems/Locking +++ b/Documentation/filesystems/Locking @@ -462,7 +462,6 @@ in sys_read() and friends.  prototypes:  	int (*initialize) (struct inode *, int);  	int (*drop) (struct inode *); -	int (*transfer) (struct inode *, struct iattr *);  	int (*write_dquot) (struct dquot *);  	int (*acquire_dquot) (struct dquot *);  	int (*release_dquot) (struct dquot *); @@ -477,7 +476,6 @@ What filesystem should expect from the generic quota functions:  		FS recursion	Held locks when called  initialize:	yes		maybe dqonoff_sem  drop:		yes		- -transfer:	yes		-  write_dquot:	yes		dqonoff_sem or dqptr_sem  acquire_dquot:	yes		dqonoff_sem or dqptr_sem  release_dquot:	yes		dqonoff_sem or dqptr_sem diff --git a/drivers/staging/pohmelfs/inode.c b/drivers/staging/pohmelfs/inode.c index f69b7783027..11fc4d5c43e 100644 --- a/drivers/staging/pohmelfs/inode.c +++ b/drivers/staging/pohmelfs/inode.c @@ -969,7 +969,7 @@ int pohmelfs_setattr_raw(struct inode *inode, struct iattr *attr)  	if ((attr->ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid) ||  	    (attr->ia_valid & ATTR_GID && attr->ia_gid != inode->i_gid)) { -		err = vfs_dq_transfer(inode, attr) ? -EDQUOT : 0; +		err = dquot_transfer(inode, attr);  		if (err)  			goto err_out_exit;  	} diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c index 71b032c65a0..3cfcfd9a131 100644 --- a/fs/ext2/inode.c +++ b/fs/ext2/inode.c @@ -1459,7 +1459,7 @@ int ext2_setattr(struct dentry *dentry, struct iattr *iattr)  		return error;  	if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) ||  	    (iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) { -		error = vfs_dq_transfer(inode, iattr) ? -EDQUOT : 0; +		error = dquot_transfer(inode, iattr);  		if (error)  			return error;  	} diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c index 20f02d69365..14d40a4dd6f 100644 --- a/fs/ext3/inode.c +++ b/fs/ext3/inode.c @@ -3160,7 +3160,7 @@ int ext3_setattr(struct dentry *dentry, struct iattr *attr)  			error = PTR_ERR(handle);  			goto err_out;  		} -		error = vfs_dq_transfer(inode, attr) ? -EDQUOT : 0; +		error = dquot_transfer(inode, attr);  		if (error) {  			ext3_journal_stop(handle);  			return error; diff --git a/fs/ext3/super.c b/fs/ext3/super.c index 8b8bc4f9cb1..f7d4a2c19de 100644 --- a/fs/ext3/super.c +++ b/fs/ext3/super.c @@ -752,7 +752,6 @@ static ssize_t ext3_quota_write(struct super_block *sb, int type,  static const struct dquot_operations ext3_quota_operations = {  	.initialize	= dquot_initialize,  	.drop		= dquot_drop, -	.transfer	= dquot_transfer,  	.write_dquot	= ext3_write_dquot,  	.acquire_dquot	= ext3_acquire_dquot,  	.release_dquot	= ext3_release_dquot, diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 9f607ea411c..6a002a6d062 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c @@ -5263,7 +5263,7 @@ int ext4_setattr(struct dentry *dentry, struct iattr *attr)  			error = PTR_ERR(handle);  			goto err_out;  		} -		error = vfs_dq_transfer(inode, attr) ? -EDQUOT : 0; +		error = dquot_transfer(inode, attr);  		if (error) {  			ext4_journal_stop(handle);  			return error; diff --git a/fs/ext4/super.c b/fs/ext4/super.c index d231da8798e..b4253fb7bab 100644 --- a/fs/ext4/super.c +++ b/fs/ext4/super.c @@ -1017,7 +1017,6 @@ static const struct dquot_operations ext4_quota_operations = {  #ifdef CONFIG_QUOTA  	.get_reserved_space = ext4_get_reserved_space,  #endif -	.transfer	= dquot_transfer,  	.write_dquot	= ext4_write_dquot,  	.acquire_dquot	= ext4_acquire_dquot,  	.release_dquot	= ext4_release_dquot, diff --git a/fs/jfs/file.c b/fs/jfs/file.c index a4229e49330..2c201783836 100644 --- a/fs/jfs/file.c +++ b/fs/jfs/file.c @@ -100,8 +100,9 @@ int jfs_setattr(struct dentry *dentry, struct iattr *iattr)  	if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) ||  	    (iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) { -		if (vfs_dq_transfer(inode, iattr)) -			return -EDQUOT; +		rc = dquot_transfer(inode, iattr); +		if (rc) +			return rc;  	}  	rc = inode_setattr(inode, iattr); diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index 6cf3d8d1836..472e8f8bc89 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c @@ -1020,7 +1020,7 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr)  		/*  		 * Gather pointers to quota structures so that allocation /  		 * freeing of quota structures happens here and not inside -		 * vfs_dq_transfer() where we have problems with lock ordering +		 * dquot_transfer() where we have problems with lock ordering  		 */  		if (attr->ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid  		    && OCFS2_HAS_RO_COMPAT_FEATURE(sb, @@ -1053,7 +1053,7 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr)  			mlog_errno(status);  			goto bail_unlock;  		} -		status = vfs_dq_transfer(inode, attr) ? -EDQUOT : 0; +		status = dquot_transfer(inode, attr);  		if (status < 0)  			goto bail_commit;  	} else { diff --git a/fs/ocfs2/quota_global.c b/fs/ocfs2/quota_global.c index ed96b3eeb13..b654bd103b6 100644 --- a/fs/ocfs2/quota_global.c +++ b/fs/ocfs2/quota_global.c @@ -853,7 +853,6 @@ static void ocfs2_destroy_dquot(struct dquot *dquot)  const struct dquot_operations ocfs2_quota_operations = {  	.initialize	= dquot_initialize,  	.drop		= dquot_drop, -	.transfer	= dquot_transfer,  	.write_dquot	= ocfs2_write_dquot,  	.acquire_dquot	= ocfs2_acquire_dquot,  	.release_dquot	= ocfs2_release_dquot, diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index ed131318b84..78ce4c48ad7 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c @@ -1669,7 +1669,7 @@ EXPORT_SYMBOL(dquot_free_inode);   * This operation can block, but only after everything is updated   * A transaction must be started when entering this function.   */ -int dquot_transfer(struct inode *inode, qid_t *chid, unsigned long mask) +static int __dquot_transfer(struct inode *inode, qid_t *chid, unsigned long mask)  {  	qsize_t space, cur_space;  	qsize_t rsv_space = 0; @@ -1766,12 +1766,11 @@ over_quota:  	ret = NO_QUOTA;  	goto warn_put_all;  } -EXPORT_SYMBOL(dquot_transfer);  /* Wrapper for transferring ownership of an inode for uid/gid only   * Called from FSXXX_setattr()   */ -int vfs_dq_transfer(struct inode *inode, struct iattr *iattr) +int dquot_transfer(struct inode *inode, struct iattr *iattr)  {  	qid_t chid[MAXQUOTAS];  	unsigned long mask = 0; @@ -1786,12 +1785,12 @@ int vfs_dq_transfer(struct inode *inode, struct iattr *iattr)  	}  	if (sb_any_quota_active(inode->i_sb) && !IS_NOQUOTA(inode)) {  		vfs_dq_init(inode); -		if (inode->i_sb->dq_op->transfer(inode, chid, mask) == NO_QUOTA) -			return 1; +		if (__dquot_transfer(inode, chid, mask) == NO_QUOTA) +			return -EDQUOT;  	}  	return 0;  } -EXPORT_SYMBOL(vfs_dq_transfer); +EXPORT_SYMBOL(dquot_transfer);  /*   * Write info of quota file to disk @@ -1814,7 +1813,6 @@ EXPORT_SYMBOL(dquot_commit_info);  const struct dquot_operations dquot_operations = {  	.initialize	= dquot_initialize,  	.drop		= dquot_drop, -	.transfer	= dquot_transfer,  	.write_dquot	= dquot_commit,  	.acquire_dquot	= dquot_acquire,  	.release_dquot	= dquot_release, diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c index f56a3d2e649..99a5e5a8ab5 100644 --- a/fs/reiserfs/inode.c +++ b/fs/reiserfs/inode.c @@ -3134,8 +3134,7 @@ int reiserfs_setattr(struct dentry *dentry, struct iattr *attr)  						  jbegin_count);  				if (error)  					goto out; -				error = -				    vfs_dq_transfer(inode, attr) ? -EDQUOT : 0; +				error = dquot_transfer(inode, attr);  				if (error) {  					journal_end(&th, inode->i_sb,  						    jbegin_count); diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c index e942ceecf2b..97c3e8ed7db 100644 --- a/fs/reiserfs/super.c +++ b/fs/reiserfs/super.c @@ -618,7 +618,6 @@ static int reiserfs_quota_on(struct super_block *, int, int, char *, int);  static const struct dquot_operations reiserfs_quota_operations = {  	.initialize = dquot_initialize,  	.drop = dquot_drop, -	.transfer = dquot_transfer,  	.write_dquot = reiserfs_write_dquot,  	.acquire_dquot = reiserfs_acquire_dquot,  	.release_dquot = reiserfs_release_dquot, diff --git a/fs/udf/file.c b/fs/udf/file.c index 35ca47281fa..2df7fcb677b 100644 --- a/fs/udf/file.c +++ b/fs/udf/file.c @@ -229,7 +229,7 @@ static int udf_setattr(struct dentry *dentry, struct iattr *iattr)  	if ((iattr->ia_valid & ATTR_UID && iattr->ia_uid != inode->i_uid) ||              (iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)) { -		error = vfs_dq_transfer(inode, iattr) ? -EDQUOT : 0; +		error = dquot_transfer(inode, iattr);  		if (error)  			return error;  	} diff --git a/fs/ufs/truncate.c b/fs/ufs/truncate.c index 56ab31f00bd..87bbab68590 100644 --- a/fs/ufs/truncate.c +++ b/fs/ufs/truncate.c @@ -520,7 +520,7 @@ static int ufs_setattr(struct dentry *dentry, struct iattr *attr)  	if ((ia_valid & ATTR_UID && attr->ia_uid != inode->i_uid) ||  	    (ia_valid & ATTR_GID && attr->ia_gid != inode->i_gid)) { -		error = vfs_dq_transfer(inode, attr) ? -EDQUOT : 0; +		error = dquot_transfer(inode, attr);  		if (error)  			return error;  	} diff --git a/include/linux/quota.h b/include/linux/quota.h index e3b07895d32..422e6aa78ed 100644 --- a/include/linux/quota.h +++ b/include/linux/quota.h @@ -297,7 +297,6 @@ struct quota_format_ops {  struct dquot_operations {  	int (*initialize) (struct inode *, int);  	int (*drop) (struct inode *); -	int (*transfer) (struct inode *, qid_t *, unsigned long);  	int (*write_dquot) (struct dquot *);		/* Ordinary dquot write */  	struct dquot *(*alloc_dquot)(struct super_block *, int);	/* Allocate memory for new dquot */  	void (*destroy_dquot)(struct dquot *);		/* Free memory for dquot */ diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h index 9ce7f051a4b..fa27b7218c8 100644 --- a/include/linux/quotaops.h +++ b/include/linux/quotaops.h @@ -42,7 +42,6 @@ int dquot_alloc_inode(const struct inode *inode);  int dquot_claim_space_nodirty(struct inode *inode, qsize_t number);  void dquot_free_inode(const struct inode *inode); -int dquot_transfer(struct inode *inode, qid_t *chid, unsigned long mask);  int dquot_commit(struct dquot *dquot);  int dquot_acquire(struct dquot *dquot);  int dquot_release(struct dquot *dquot); @@ -66,7 +65,7 @@ int vfs_get_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *d  int vfs_set_dqblk(struct super_block *sb, int type, qid_t id, struct if_dqblk *di);  void vfs_dq_drop(struct inode *inode); -int vfs_dq_transfer(struct inode *inode, struct iattr *iattr); +int dquot_transfer(struct inode *inode, struct iattr *iattr);  int vfs_dq_quota_on_remount(struct super_block *sb);  static inline struct mem_dqinfo *sb_dqinfo(struct super_block *sb, int type) @@ -234,7 +233,7 @@ static inline int vfs_dq_quota_on_remount(struct super_block *sb)  	return 0;  } -static inline int vfs_dq_transfer(struct inode *inode, struct iattr *iattr) +static inline int dquot_transfer(struct inode *inode, struct iattr *iattr)  {  	return 0;  }  |