--- a/fs/gfs2/quota.c +++ b/fs/gfs2/quota.c @@ -117,6 +117,7 @@ static void gfs2_qd_dispose(struct list_head *list) while (!list_empty(list)) { qd = list_first_entry(list, struct gfs2_quota_data, qd_lru); sdp = qd->qd_gl->gl_name.ln_sbd; + mutex_lock(&sdp->sd_quota_sync_mutex); list_del(&qd->qd_lru); @@ -138,6 +139,7 @@ static void gfs2_qd_dispose(struct list_head *list) /* Delete it from the common reclaim list */ call_rcu(&qd->qd_rcu, gfs2_qd_dealloc); + mutex_unlock(&sdp->sd_quota_sync_mutex); } }