diff options
author | Jan Kara <jack@suse.cz> | 2016-03-29 17:20:10 +0200 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2016-03-29 17:20:10 +0200 |
commit | 17e8a8936c3f28085a858e65baee90dff5e8d48b (patch) | |
tree | 6ad1c88a92c84e90bf23c719d467eb198412e1a1 /fs/quota | |
parent | 1993b176a8224e371e0732ffada7ab9eb3b0912b (diff) | |
download | linux-rpi3-17e8a8936c3f28085a858e65baee90dff5e8d48b.tar.gz linux-rpi3-17e8a8936c3f28085a858e65baee90dff5e8d48b.tar.bz2 linux-rpi3-17e8a8936c3f28085a858e65baee90dff5e8d48b.zip |
quota: Handle Q_GETNEXTQUOTA when quota is disabled
Currently we oopsed when Q_GETNEXTQUOTA got called when quota was
disabled. Properly check whether quota is enabled for the filesystem
before calling into quota format handler.
Reported-by: Ted Tso <tytso@mit.edu>
Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/quota')
-rw-r--r-- | fs/quota/dquot.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/fs/quota/dquot.c b/fs/quota/dquot.c index ba827daea5a0..ff21980d0119 100644 --- a/fs/quota/dquot.c +++ b/fs/quota/dquot.c @@ -2047,11 +2047,20 @@ int dquot_get_next_id(struct super_block *sb, struct kqid *qid) struct quota_info *dqopt = sb_dqopt(sb); int err; - if (!dqopt->ops[qid->type]->get_next_id) - return -ENOSYS; + mutex_lock(&dqopt->dqonoff_mutex); + if (!sb_has_quota_active(sb, qid->type)) { + err = -ESRCH; + goto out; + } + if (!dqopt->ops[qid->type]->get_next_id) { + err = -ENOSYS; + goto out; + } mutex_lock(&dqopt->dqio_mutex); err = dqopt->ops[qid->type]->get_next_id(sb, qid); mutex_unlock(&dqopt->dqio_mutex); +out: + mutex_unlock(&dqopt->dqonoff_mutex); return err; } |