Re: [PATCH 19/27] quota: Move locking into clear_dquot_dirty()

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

 



On Aug 16, 2017, at 9:41 AM, Jan Kara <jack@xxxxxxx> wrote:
> 
> Move locking of dq_list_lock into clear_dquot_dirty(). It makes the
> function more self-contained and will simplify our life later.
> 
> Signed-off-by: Jan Kara <jack@xxxxxxx>

Reviewed-by: Andreas Dilger <adilger@xxxxxxxxx>

> ---
> fs/quota/dquot.c | 15 ++++++---------
> 1 file changed, 6 insertions(+), 9 deletions(-)
> 
> diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c
> index 67f154231072..4a407f30922d 100644
> --- a/fs/quota/dquot.c
> +++ b/fs/quota/dquot.c
> @@ -375,12 +375,15 @@ static inline void dqput_all(struct dquot **dquot)
> 		dqput(dquot[cnt]);
> }
> 
> -/* This function needs dq_list_lock */
> static inline int clear_dquot_dirty(struct dquot *dquot)
> {
> -	if (!test_and_clear_bit(DQ_MOD_B, &dquot->dq_flags))
> +	spin_lock(&dq_list_lock);
> +	if (!test_and_clear_bit(DQ_MOD_B, &dquot->dq_flags)) {
> +		spin_unlock(&dq_list_lock);
> 		return 0;
> +	}
> 	list_del_init(&dquot->dq_dirty);
> +	spin_unlock(&dq_list_lock);
> 	return 1;
> }
> 
> @@ -445,12 +448,8 @@ int dquot_commit(struct dquot *dquot)
> 	struct quota_info *dqopt = sb_dqopt(dquot->dq_sb);
> 
> 	mutex_lock(&dquot->dq_lock);
> -	spin_lock(&dq_list_lock);
> -	if (!clear_dquot_dirty(dquot)) {
> -		spin_unlock(&dq_list_lock);
> +	if (!clear_dquot_dirty(dquot))
> 		goto out_lock;
> -	}
> -	spin_unlock(&dq_list_lock);
> 	/* Inactive dquot can be only if there was error during read/init
> 	 * => we have better not writing it */
> 	if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags))
> @@ -766,9 +765,7 @@ void dqput(struct dquot *dquot)
> 			 * We clear dirty bit anyway, so that we avoid
> 			 * infinite loop here
> 			 */
> -			spin_lock(&dq_list_lock);
> 			clear_dquot_dirty(dquot);
> -			spin_unlock(&dq_list_lock);
> 		}
> 		goto we_slept;
> 	}
> --
> 2.12.3
> 


Cheers, Andreas





Attachment: signature.asc
Description: Message signed with OpenPGP


[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