]> git.openpandora.org Git - pandora-kernel.git/commitdiff
quota: Make ->set_info use structure with neccesary info to VFS and XFS
authorJan Kara <jack@suse.cz>
Tue, 16 Dec 2014 11:03:51 +0000 (12:03 +0100)
committerJan Kara <jack@suse.cz>
Wed, 4 Mar 2015 15:06:38 +0000 (16:06 +0100)
Change ->set_info to take new qc_info structure which contains all the
necessary information both for XFS and VFS. Convert Q_SETINFO handler
to use this structure.

Signed-off-by: Jan Kara <jack@suse.cz>
fs/quota/dquot.c
fs/quota/quota.c
include/linux/quota.h
include/linux/quotaops.h

index cf4edd87e854d140a76129dd30f519d3d3e1ce31..f37b74eab807c95975739076c27742b4225d15cd 100644 (file)
@@ -2649,33 +2649,38 @@ int dquot_get_state(struct super_block *sb, struct qc_state *state)
 EXPORT_SYMBOL(dquot_get_state);
 
 /* Generic routine for setting common part of quota file information */
-int dquot_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii)
+int dquot_set_dqinfo(struct super_block *sb, int type, struct qc_info *ii)
 {
        struct mem_dqinfo *mi;
        int err = 0;
 
+       if ((ii->i_fieldmask & QC_WARNS_MASK) ||
+           (ii->i_fieldmask & QC_RT_SPC_TIMER))
+               return -EINVAL;
        mutex_lock(&sb_dqopt(sb)->dqonoff_mutex);
        if (!sb_has_quota_active(sb, type)) {
                err = -ESRCH;
                goto out;
        }
        mi = sb_dqopt(sb)->info + type;
-       if (ii->dqi_valid & IIF_FLAGS) {
-               if (ii->dqi_flags & ~DQF_SETINFO_MASK ||
-                   (ii->dqi_flags & DQF_ROOT_SQUASH &&
+       if (ii->i_fieldmask & QC_FLAGS) {
+               if ((ii->i_flags & QCI_ROOT_SQUASH &&
                     mi->dqi_format->qf_fmt_id != QFMT_VFS_OLD)) {
                        err = -EINVAL;
                        goto out;
                }
        }
        spin_lock(&dq_data_lock);
-       if (ii->dqi_valid & IIF_BGRACE)
-               mi->dqi_bgrace = ii->dqi_bgrace;
-       if (ii->dqi_valid & IIF_IGRACE)
-               mi->dqi_igrace = ii->dqi_igrace;
-       if (ii->dqi_valid & IIF_FLAGS)
-               mi->dqi_flags = (mi->dqi_flags & ~DQF_SETINFO_MASK) |
-                               (ii->dqi_flags & DQF_SETINFO_MASK);
+       if (ii->i_fieldmask & QC_SPC_TIMER)
+               mi->dqi_bgrace = ii->i_spc_timelimit;
+       if (ii->i_fieldmask & QC_INO_TIMER)
+               mi->dqi_igrace = ii->i_ino_timelimit;
+       if (ii->i_fieldmask & QC_FLAGS) {
+               if (ii->i_flags & QCI_ROOT_SQUASH)
+                       mi->dqi_flags |= DQF_ROOT_SQUASH;
+               else
+                       mi->dqi_flags &= ~DQF_ROOT_SQUASH;
+       }
        spin_unlock(&dq_data_lock);
        mark_info_dirty(sb, type);
        /* Force write to disk */
Simple merge
Simple merge
Simple merge