diff options
author | Jan Kara <jack@suse.cz> | 2014-12-16 07:07:45 -0500 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2015-03-04 10:06:38 -0500 |
commit | c14cad9eed11343014f73aae4a77278239b201b8 (patch) | |
tree | 04f76efd0d3235efc38c5cec3f7e7c7a078c9b34 | |
parent | 5eacb2ac029161d94969a511e0adf7dca28cda1f (diff) |
xfs: Add support for Q_SETINFO
Add support to XFS so that time limits can be set through Q_SETINFO
quotactl.
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jan Kara <jack@suse.cz>
-rw-r--r-- | fs/xfs/xfs_quotaops.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/fs/xfs/xfs_quotaops.c b/fs/xfs/xfs_quotaops.c index 5775acb0589b..7795e0d01382 100644 --- a/fs/xfs/xfs_quotaops.c +++ b/fs/xfs/xfs_quotaops.c | |||
@@ -111,6 +111,42 @@ xfs_quota_type(int type) | |||
111 | } | 111 | } |
112 | } | 112 | } |
113 | 113 | ||
114 | #define XFS_QC_SETINFO_MASK (QC_TIMER_MASK | QC_WARNS_MASK) | ||
115 | |||
116 | /* | ||
117 | * Adjust quota timers & warnings | ||
118 | */ | ||
119 | static int | ||
120 | xfs_fs_set_info( | ||
121 | struct super_block *sb, | ||
122 | int type, | ||
123 | struct qc_info *info) | ||
124 | { | ||
125 | struct xfs_mount *mp = XFS_M(sb); | ||
126 | struct qc_dqblk newlim; | ||
127 | |||
128 | if (sb->s_flags & MS_RDONLY) | ||
129 | return -EROFS; | ||
130 | if (!XFS_IS_QUOTA_RUNNING(mp)) | ||
131 | return -ENOSYS; | ||
132 | if (!XFS_IS_QUOTA_ON(mp)) | ||
133 | return -ESRCH; | ||
134 | if (info->i_fieldmask & ~XFS_QC_SETINFO_MASK) | ||
135 | return -EINVAL; | ||
136 | if ((info->i_fieldmask & XFS_QC_SETINFO_MASK) == 0) | ||
137 | return 0; | ||
138 | |||
139 | newlim.d_fieldmask = info->i_fieldmask; | ||
140 | newlim.d_spc_timer = info->i_spc_timelimit; | ||
141 | newlim.d_ino_timer = info->i_ino_timelimit; | ||
142 | newlim.d_rt_spc_timer = info->i_rt_spc_timelimit; | ||
143 | newlim.d_ino_warns = info->i_ino_warnlimit; | ||
144 | newlim.d_spc_warns = info->i_spc_warnlimit; | ||
145 | newlim.d_rt_spc_warns = info->i_rt_spc_warnlimit; | ||
146 | |||
147 | return xfs_qm_scall_setqlim(mp, 0, xfs_quota_type(type), &newlim); | ||
148 | } | ||
149 | |||
114 | static unsigned int | 150 | static unsigned int |
115 | xfs_quota_flags(unsigned int uflags) | 151 | xfs_quota_flags(unsigned int uflags) |
116 | { | 152 | { |
@@ -226,6 +262,7 @@ xfs_fs_set_dqblk( | |||
226 | 262 | ||
227 | const struct quotactl_ops xfs_quotactl_operations = { | 263 | const struct quotactl_ops xfs_quotactl_operations = { |
228 | .get_state = xfs_fs_get_quota_state, | 264 | .get_state = xfs_fs_get_quota_state, |
265 | .set_info = xfs_fs_set_info, | ||
229 | .quota_enable = xfs_quota_enable, | 266 | .quota_enable = xfs_quota_enable, |
230 | .quota_disable = xfs_quota_disable, | 267 | .quota_disable = xfs_quota_disable, |
231 | .rm_xquota = xfs_fs_rm_xquota, | 268 | .rm_xquota = xfs_fs_rm_xquota, |