diff options
-rw-r--r-- | fs/gfs2/incore.h | 1 | ||||
-rw-r--r-- | fs/gfs2/ops_fstype.c | 1 | ||||
-rw-r--r-- | fs/gfs2/quota.c | 6 |
3 files changed, 6 insertions, 2 deletions
diff --git a/fs/gfs2/incore.h b/fs/gfs2/incore.h index 37b3cd795d6c..2ab4f8d8f4c4 100644 --- a/fs/gfs2/incore.h +++ b/fs/gfs2/incore.h | |||
@@ -714,6 +714,7 @@ struct gfs2_sbd { | |||
714 | struct list_head sd_quota_list; | 714 | struct list_head sd_quota_list; |
715 | atomic_t sd_quota_count; | 715 | atomic_t sd_quota_count; |
716 | struct mutex sd_quota_mutex; | 716 | struct mutex sd_quota_mutex; |
717 | struct mutex sd_quota_sync_mutex; | ||
717 | wait_queue_head_t sd_quota_wait; | 718 | wait_queue_head_t sd_quota_wait; |
718 | struct list_head sd_trunc_list; | 719 | struct list_head sd_trunc_list; |
719 | spinlock_t sd_trunc_lock; | 720 | spinlock_t sd_trunc_lock; |
diff --git a/fs/gfs2/ops_fstype.c b/fs/gfs2/ops_fstype.c index 8e40fda985d6..82303b474958 100644 --- a/fs/gfs2/ops_fstype.c +++ b/fs/gfs2/ops_fstype.c | |||
@@ -93,6 +93,7 @@ static struct gfs2_sbd *init_sbd(struct super_block *sb) | |||
93 | 93 | ||
94 | INIT_LIST_HEAD(&sdp->sd_quota_list); | 94 | INIT_LIST_HEAD(&sdp->sd_quota_list); |
95 | mutex_init(&sdp->sd_quota_mutex); | 95 | mutex_init(&sdp->sd_quota_mutex); |
96 | mutex_init(&sdp->sd_quota_sync_mutex); | ||
96 | init_waitqueue_head(&sdp->sd_quota_wait); | 97 | init_waitqueue_head(&sdp->sd_quota_wait); |
97 | INIT_LIST_HEAD(&sdp->sd_trunc_list); | 98 | INIT_LIST_HEAD(&sdp->sd_trunc_list); |
98 | spin_lock_init(&sdp->sd_trunc_lock); | 99 | spin_lock_init(&sdp->sd_trunc_lock); |
diff --git a/fs/gfs2/quota.c b/fs/gfs2/quota.c index cfb4cdeddacb..4a9726aa191f 100644 --- a/fs/gfs2/quota.c +++ b/fs/gfs2/quota.c | |||
@@ -1132,12 +1132,13 @@ int gfs2_quota_sync(struct super_block *sb, int type) | |||
1132 | unsigned int x; | 1132 | unsigned int x; |
1133 | int error = 0; | 1133 | int error = 0; |
1134 | 1134 | ||
1135 | sdp->sd_quota_sync_gen++; | ||
1136 | |||
1137 | qda = kcalloc(max_qd, sizeof(struct gfs2_quota_data *), GFP_KERNEL); | 1135 | qda = kcalloc(max_qd, sizeof(struct gfs2_quota_data *), GFP_KERNEL); |
1138 | if (!qda) | 1136 | if (!qda) |
1139 | return -ENOMEM; | 1137 | return -ENOMEM; |
1140 | 1138 | ||
1139 | mutex_lock(&sdp->sd_quota_sync_mutex); | ||
1140 | sdp->sd_quota_sync_gen++; | ||
1141 | |||
1141 | do { | 1142 | do { |
1142 | num_qd = 0; | 1143 | num_qd = 0; |
1143 | 1144 | ||
@@ -1162,6 +1163,7 @@ int gfs2_quota_sync(struct super_block *sb, int type) | |||
1162 | } | 1163 | } |
1163 | } while (!error && num_qd == max_qd); | 1164 | } while (!error && num_qd == max_qd); |
1164 | 1165 | ||
1166 | mutex_unlock(&sdp->sd_quota_sync_mutex); | ||
1165 | kfree(qda); | 1167 | kfree(qda); |
1166 | 1168 | ||
1167 | return error; | 1169 | return error; |