|
@@ -2582,6 +2582,14 @@ int dquot_set_dqinfo(struct super_block *sb, int type, struct if_dqinfo *ii)
|
|
|
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 &&
|
|
|
+ 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;
|