Commit ccf370e4 authored by Jan Kara's avatar Jan Kara

quota: Forbid Q_GETQUOTA and Q_GETNEXTQUOTA for frozen filesystem

Commit 7955118e (quota: Allow Q_GETQUOTA for frozen filesystem)
allowed Q_GETQUOTA call for frozen filesystem. It makes sense on the
first look but zero-day testing has shown that with this change ext4
warns about starting a transaction for frozen filesystem. This happens
because ext4_acquire_dquot() prepares for allocating space for new quota
structure. Although it would be possible to implement Q_GETQUOTA for
ext4 without allocating space for non-existent structures, the matter
further complicates because OCFS2 needs to update on-disk structure use
count when a new cluster node loads quota information from disk. So just
revert the change and forbid Q_GETQUOTA together with Q_GETNEXTQUOTA for
frozen filesystem. Add comment to quotactl_cmd_write() to save us from
repeating this excercise in a few years when I forget again.
Signed-off-by: default avatarJan Kara <jack@suse.cz>
parent 044c9b67
...@@ -765,11 +765,14 @@ static int do_quotactl(struct super_block *sb, int type, int cmd, qid_t id, ...@@ -765,11 +765,14 @@ static int do_quotactl(struct super_block *sb, int type, int cmd, qid_t id,
/* Return 1 if 'cmd' will block on frozen filesystem */ /* Return 1 if 'cmd' will block on frozen filesystem */
static int quotactl_cmd_write(int cmd) static int quotactl_cmd_write(int cmd)
{ {
/*
* We cannot allow Q_GETQUOTA and Q_GETNEXTQUOTA without write access
* as dquot_acquire() may allocate space for new structure and OCFS2
* needs to increment on-disk use count.
*/
switch (cmd) { switch (cmd) {
case Q_GETFMT: case Q_GETFMT:
case Q_GETINFO: case Q_GETINFO:
case Q_GETQUOTA:
case Q_GETNEXTQUOTA:
case Q_SYNC: case Q_SYNC:
case Q_XGETQSTAT: case Q_XGETQSTAT:
case Q_XGETQSTATV: case Q_XGETQSTATV:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment