diff options
author | Matt Fleming <matt.fleming@intel.com> | 2014-03-05 17:22:57 +0000 |
---|---|---|
committer | Matt Fleming <matt.fleming@intel.com> | 2014-03-05 17:31:41 +0000 |
commit | 4fd69331ad227a4d8de26592d017b73e00caca9f (patch) | |
tree | bfd95ed518ff0cb44318715432d321a92a7b9a0c /fs/quota | |
parent | 69e608411473ac56358ef35277563982d0565381 (diff) | |
parent | 0ac09f9f8cd1fb028a48330edba6023d347d3cea (diff) | |
download | lwn-4fd69331ad227a4d8de26592d017b73e00caca9f.tar.gz lwn-4fd69331ad227a4d8de26592d017b73e00caca9f.zip |
Merge remote-tracking branch 'tip/x86/urgent' into efi-for-mingo
Conflicts:
arch/x86/include/asm/efi.h
Diffstat (limited to 'fs/quota')
-rw-r--r-- | fs/quota/dquot.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index 831d49a4111f..cfc8dcc16043 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c @@ -581,9 +581,17 @@ int dquot_scan_active(struct super_block *sb, dqstats_inc(DQST_LOOKUPS); dqput(old_dquot); old_dquot = dquot; - ret = fn(dquot, priv); - if (ret < 0) - goto out; + /* + * ->release_dquot() can be racing with us. Our reference + * protects us from new calls to it so just wait for any + * outstanding call and recheck the DQ_ACTIVE_B after that. + */ + wait_on_dquot(dquot); + if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) { + ret = fn(dquot, priv); + if (ret < 0) + goto out; + } spin_lock(&dq_list_lock); /* We are safe to continue now because our dquot could not * be moved out of the inuse list while we hold the reference */ |