Re: [PATCH 17/19] quota: Some stylistic cleanup for dquot interface

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu 11-11-10 15:14:36, Dmitry Monakhov wrote:
> This patch performs only stylistic cleanup. No changes in logic at all.
> - Rename dqget() to find_get_dquot()
  This seems as a pointless excercise to me...

> - Wrap direct dq_count increment to helper function
  This makes sense so if you need a name for it, why not dqgrab() - along
the way how iget() vs igrab() work?

> Some places still access dq_count directly, but this is because
> reference counting algorithm. It will be changed in later patches.

									Honza
> 
> Signed-off-by: Dmitry Monakhov <dmonakhov@xxxxxxxxxx>
> ---
>  fs/ocfs2/file.c          |    8 ++++----
>  fs/ocfs2/quota_global.c  |    2 +-
>  fs/ocfs2/quota_local.c   |    3 ++-
>  fs/quota/dquot.c         |   42 ++++++++++++++++++++++++++----------------
>  include/linux/quotaops.h |    3 ++-
>  5 files changed, 35 insertions(+), 23 deletions(-)
> 
> diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
> index 9a03c15..b7e7c9b 100644
> --- a/fs/ocfs2/file.c
> +++ b/fs/ocfs2/file.c
> @@ -1205,8 +1205,8 @@ 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] =
> +				find_get_dquot(sb, attr->ia_uid, USRQUOTA);
>  			if (!transfer_to[USRQUOTA]) {
>  				status = -ESRCH;
>  				goto bail_unlock;
> @@ -1215,8 +1215,8 @@ 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] =
> +				find_get_dquot(sb, attr->ia_gid, GRPQUOTA);
>  			if (!transfer_to[GRPQUOTA]) {
>  				status = -ESRCH;
>  				goto bail_unlock;
> diff --git a/fs/ocfs2/quota_global.c b/fs/ocfs2/quota_global.c
> index 3d2841c..cdf2a23 100644
> --- a/fs/ocfs2/quota_global.c
> +++ b/fs/ocfs2/quota_global.c
> @@ -692,7 +692,7 @@ static int ocfs2_release_dquot(struct dquot *dquot)
>  	mlog_entry("id=%u, type=%d", dquot->dq_id, dquot->dq_type);
>  
>  	mutex_lock(&dquot->dq_mutex);
> -	/* Check whether we are not racing with some other dqget() */
> +	/* Check whether we are not racing with some other find_get_dquot() */
>  	if (atomic_read(&dquot->dq_count) > 1)
>  		goto out;
>  	status = ocfs2_lock_global_qf(oinfo, 1);
> diff --git a/fs/ocfs2/quota_local.c b/fs/ocfs2/quota_local.c
> index 9e68ce5..6e5c7e9 100644
> --- a/fs/ocfs2/quota_local.c
> +++ b/fs/ocfs2/quota_local.c
> @@ -500,7 +500,8 @@ 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 = find_get_dquot(sb, le64_to_cpu(dqblk->dqb_id),
> +					type);
>  			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 33dc32e..af3413e 100644
> --- a/fs/quota/dquot.c
> +++ b/fs/quota/dquot.c
> @@ -16,7 +16,8 @@
>   *		Revised list management to avoid races
>   *		-- Bill Hawes, <whawes@xxxxxxxx>, 9/98
>   *
> - *		Fixed races in dquot_transfer(), dqget() and dquot_alloc_...().
> + *		Fixed races in dquot_transfer(), find_get_dquot() and
> + *		dquot_alloc_...().
>   *		As the consequence the locking was moved from dquot_decr_...(),
>   *		dquot_incr_...() to calling functions.
>   *		invalidate_dquots() now writes modified dquots.
> @@ -109,8 +110,9 @@
>   * Each dquot has its dq_mutex mutex. Locked dquots might not be referenced
>   * from inodes (dquot_alloc_space() and such don't check the dq_mutex).
>   * Currently dquot is locked only when it is being read to memory (or space for
> - * it is being allocated) on the first dqget() and when it is being released on
> - * the last dqput(). The allocation and release oparations are serialized by
> + * it is being allocated) on the first find_get_dquot() and when it is being
> + * released on the last dqput().
> + * The allocation and release oparations are serialized by
>   * the dq_mutex and by checking the use count in dquot_release().  Write
>   * operations on dquots don't hold dq_mutex as they copy data under dq_data_lock
>   * spinlock to internal buffers before writing.
> @@ -522,7 +524,7 @@ int dquot_release(struct dquot *dquot)
>  	struct quota_info *dqopt = sb_dqopts(dquot);
>  
>  	mutex_lock(&dquot->dq_mutex);
> -	/* Check whether we are not racing with some other dqget() */
> +	/* Check whether we are not racing with some other find_get_dquot() */
>  	if (atomic_read(&dquot->dq_count) > 1)
>  		goto out_dqlock;
>  	mutex_lock(&dqopt->dqio_mutex);
> @@ -577,7 +579,7 @@ restart:
>  		if (atomic_read(&dquot->dq_count)) {
>  			DEFINE_WAIT(wait);
>  
> -			atomic_inc(&dquot->dq_count);
> +			dqget(dquot);
>  			prepare_to_wait(&dquot->dq_wait_unused, &wait,
>  					TASK_UNINTERRUPTIBLE);
>  			spin_unlock(&dqopt->dq_list_lock);
> @@ -627,7 +629,7 @@ int dquot_scan_active(struct super_block *sb,
>  		if (dquot->dq_sb != sb)
>  			continue;
>  		/* Now we have active dquot so we can just increase use count */
> -		atomic_inc(&dquot->dq_count);
> +		dqget(dquot);
>  		spin_unlock(&dqopt->dq_list_lock);
>  		dqstats_inc(DQST_LOOKUPS);
>  		dqput(old_dquot);
> @@ -674,7 +676,7 @@ int dquot_quota_sync(struct super_block *sb, int type, int wait)
>  			/* Now we have active dquot from which someone is
>   			 * holding reference so we can safely just increase
>  			 * use count */
> -			atomic_inc(&dquot->dq_count);
> +			dqget(dquot);
>  			spin_unlock(&dqopt->dq_list_lock);
>  			dqstats_inc(DQST_LOOKUPS);
>  			dqctl(sb)->dq_op->write_dquot(dquot);
> @@ -869,6 +871,11 @@ static struct dquot *get_empty_dquot(struct super_block *sb, int type)
>  	return dquot;
>  }
>  
> +inline void dqget(struct dquot *dquot)
> +{
> +	atomic_inc(&dquot->dq_count);
> +}
> +
>  /*
>   * Get reference to dquot
>   *
> @@ -877,7 +884,7 @@ 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 *find_get_dquot(struct super_block *sb, unsigned int id, int type)
>  {
>  	struct hlist_bl_head * blh = dquot_hash + hashfn(sb, id, type);
>  	struct dquot *dquot = NULL, *empty = NULL;
> @@ -922,7 +929,7 @@ we_slept:
>  	} else {
>  		if (!atomic_read(&dquot->dq_count))
>  			remove_free_dquot(dquot);
> -		atomic_inc(&dquot->dq_count);
> +		dqget(dquot);
>  		hlist_bl_unlock(blh);
>  		spin_unlock(&dqopt->dq_list_lock);
>  		dqstats_inc(DQST_CACHE_HITS);
> @@ -948,7 +955,7 @@ out:
>  
>  	return dquot;
>  }
> -EXPORT_SYMBOL(dqget);
> +EXPORT_SYMBOL(find_get_dquot);
>  
>  static int dqinit_needed(struct inode *inode, int type)
>  {
> @@ -1427,7 +1434,7 @@ static int dquot_active(const struct inode *inode)
>   * Initialize quota pointers in inode
>   *
>   * We do things in a bit complicated way but by that we avoid calling
> - * dqget() and thus filesystem callbacks under dqptr_sem.
> + * find_get_dquot() and thus filesystem callbacks under dqptr_sem.
>   *
>   * It is better to call this function outside of any transaction as it
>   * might need a lot of space in journal for dquot structure allocation.
> @@ -1462,7 +1469,7 @@ static void __dquot_initialize(struct inode *inode, int type)
>  			id = inode->i_gid;
>  			break;
>  		}
> -		got[cnt] = dqget(sb, id, cnt);
> +		got[cnt] = find_get_dquot(sb, id, cnt);
>  	}
>  
>  	down_write(&dqopts(sb)->dqptr_sem);
> @@ -1991,9 +1998,12 @@ 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] = find_get_dquot(sb, iattr->ia_uid,
> +						USRQUOTA);
> +
>  	if (iattr->ia_valid & ATTR_GID && iattr->ia_gid != inode->i_gid)
> -		transfer_to[GRPQUOTA] = dqget(sb, iattr->ia_gid, GRPQUOTA);
> +		transfer_to[GRPQUOTA] = find_get_dquot(sb, iattr->ia_gid,
> +						GRPQUOTA);
>  
>  	ret = __dquot_transfer(inode, transfer_to);
>  	dqput_all(transfer_to);
> @@ -2547,7 +2557,7 @@ int dquot_get_dqblk(struct super_block *sb, int type, qid_t id,
>  {
>  	struct dquot *dquot;
>  
> -	dquot = dqget(sb, id, type);
> +	dquot = find_get_dquot(sb, id, type);
>  	if (!dquot)
>  		return -ESRCH;
>  	do_get_dqblk(dquot, di);
> @@ -2660,7 +2670,7 @@ int dquot_set_dqblk(struct super_block *sb, int type, qid_t id,
>  	struct dquot *dquot;
>  	int rc;
>  
> -	dquot = dqget(sb, id, type);
> +	dquot = find_get_dquot(sb, id, type);
>  	if (!dquot) {
>  		rc = -ESRCH;
>  		goto out;
> diff --git a/include/linux/quotaops.h b/include/linux/quotaops.h
> index 68ceef5..93e39c6 100644
> --- a/include/linux/quotaops.h
> +++ b/include/linux/quotaops.h
> @@ -52,7 +52,8 @@ 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*find_get_dquot(struct super_block *sb, unsigned int id, int type);
> +void dqget(struct dquot *dquot);
>  void dqput(struct dquot *dquot);
>  int dquot_scan_active(struct super_block *sb,
>  		      int (*fn)(struct dquot *dquot, unsigned long priv),
> -- 
> 1.6.5.2
> 
-- 
Jan Kara <jack@xxxxxxx>
SUSE Labs, CR
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux