quota: Remove locking for writing to the old quota format
authorJan Kara <jack@suse.cz>
Thu, 8 Jun 2017 14:18:54 +0000 (16:18 +0200)
committerJan Kara <jack@suse.cz>
Thu, 17 Aug 2017 17:03:44 +0000 (19:03 +0200)
The old quota quota format has fixed offset in quota file based on ID so
there's no locking needed against concurrent modifications of the file
(locking against concurrent IO on the same dquot is still provided by
dq_lock).

Reviewed-by: Andreas Dilger <adilger@dilger.ca>
Signed-off-by: Jan Kara <jack@suse.cz>
fs/quota/quota_v1.c

index 94cceb76b9a3cf5b9ca66203450eb9564e493bdd..12d69cda57cca9f25a998e88b9be38e534aa0e11 100644 (file)
@@ -83,9 +83,7 @@ static int v1_commit_dqblk(struct dquot *dquot)
        short type = dquot->dq_id.type;
        ssize_t ret;
        struct v1_disk_dqblk dqblk;
        short type = dquot->dq_id.type;
        ssize_t ret;
        struct v1_disk_dqblk dqblk;
-       struct quota_info *dqopt = sb_dqopt(dquot->dq_sb);
 
 
-       down_write(&dqopt->dqio_sem);
        v1_mem2disk_dqblk(&dqblk, &dquot->dq_dqb);
        if (((type == USRQUOTA) && uid_eq(dquot->dq_id.uid, GLOBAL_ROOT_UID)) ||
            ((type == GRPQUOTA) && gid_eq(dquot->dq_id.gid, GLOBAL_ROOT_GID))) {
        v1_mem2disk_dqblk(&dqblk, &dquot->dq_dqb);
        if (((type == USRQUOTA) && uid_eq(dquot->dq_id.uid, GLOBAL_ROOT_UID)) ||
            ((type == GRPQUOTA) && gid_eq(dquot->dq_id.gid, GLOBAL_ROOT_GID))) {
@@ -99,7 +97,6 @@ static int v1_commit_dqblk(struct dquot *dquot)
                ret = dquot->dq_sb->s_op->quota_write(dquot->dq_sb, type,
                        (char *)&dqblk, sizeof(struct v1_disk_dqblk),
                        v1_dqoff(from_kqid(&init_user_ns, dquot->dq_id)));
                ret = dquot->dq_sb->s_op->quota_write(dquot->dq_sb, type,
                        (char *)&dqblk, sizeof(struct v1_disk_dqblk),
                        v1_dqoff(from_kqid(&init_user_ns, dquot->dq_id)));
-       up_write(&dqopt->dqio_sem);
        if (ret != sizeof(struct v1_disk_dqblk)) {
                quota_error(dquot->dq_sb, "dquota write failed");
                if (ret >= 0)
        if (ret != sizeof(struct v1_disk_dqblk)) {
                quota_error(dquot->dq_sb, "dquota write failed");
                if (ret >= 0)