Commit 9377abd026bf9bde7db90dac09170034bf6d1cbf

Authored by Jan Kara
Committed by Linus Torvalds
1 parent bb45d64224

quota: don't call sync_fs() from vfs_quota_off() when there's no quota turn off

Sometimes, vfs_quota_off() is called on a partially set up super block (for
example when fill_super() fails for some reason).  In such cases we cannot
call ->sync_fs() because it can Oops because of not properly filled in super
block.  So in case we find there's not quota to turn off, we just skip
everything and return which fixes the above problem.

[akpm@linux-foundation.org: fxi tpyo]
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 1 changed file with 10 additions and 0 deletions Side-by-side Diff

... ... @@ -1491,6 +1491,16 @@
1491 1491  
1492 1492 /* We need to serialize quota_off() for device */
1493 1493 mutex_lock(&dqopt->dqonoff_mutex);
  1494 +
  1495 + /*
  1496 + * Skip everything if there's nothing to do. We have to do this because
  1497 + * sometimes we are called when fill_super() failed and calling
  1498 + * sync_fs() in such cases does no good.
  1499 + */
  1500 + if (!sb_any_quota_enabled(sb) && !sb_any_quota_suspended(sb)) {
  1501 + mutex_unlock(&dqopt->dqonoff_mutex);
  1502 + return 0;
  1503 + }
1494 1504 for (cnt = 0; cnt < MAXQUOTAS; cnt++) {
1495 1505 toputinode[cnt] = NULL;
1496 1506 if (type != -1 && cnt != type)