Merge tag 'trace-seq-buf-3.19' of git://git.kernel.org/pub/scm/linux/kernel/git/roste...
[cascardo/linux.git] / fs / quota / quota.c
index 7562164..2aa4151 100644 (file)
@@ -47,8 +47,11 @@ static int check_quotactl_permission(struct super_block *sb, int type, int cmd,
 
 static void quota_sync_one(struct super_block *sb, void *arg)
 {
-       if (sb->s_qcop && sb->s_qcop->quota_sync)
-               sb->s_qcop->quota_sync(sb, *(int *)arg);
+       int type = *(int *)arg;
+
+       if (sb->s_qcop && sb->s_qcop->quota_sync &&
+           (sb->s_quota_types & (1 << type)))
+               sb->s_qcop->quota_sync(sb, type);
 }
 
 static int quota_sync_all(int type)
@@ -297,8 +300,14 @@ static int do_quotactl(struct super_block *sb, int type, int cmd, qid_t id,
 
        if (type >= (XQM_COMMAND(cmd) ? XQM_MAXQUOTAS : MAXQUOTAS))
                return -EINVAL;
+       /*
+        * Quota not supported on this fs? Check this before s_quota_types
+        * since they needn't be set if quota is not supported at all.
+        */
        if (!sb->s_qcop)
                return -ENOSYS;
+       if (!(sb->s_quota_types & (1 << type)))
+               return -EINVAL;
 
        ret = check_quotactl_permission(sb, type, cmd, id);
        if (ret < 0)