Client::_rename() only checks for max files quota. As a result, max
bytes quota is not enforced. Thus the following code (copied from
qa/workunits/fs/quota/quota.sh), runs successfully instead of exiting
with error "Disk quota exceeded" -
mkdir files limit
setfattr limit -n ceph.quota.max_bytes -v 1000
truncate filles/file1 -s 1M
mv files limit
This patch makes Client::_rename() enforce both kinds of quota which
leads command "mv files limit" from above script to fail with "Disk
quota exceeded" error. This is the expected behaviour in this case.
Introduced-by: dde1a19d4105f1db41477752a71d8fe40c45cd7f
Fixes: https://tracker.ceph.com/issues/58220
Signed-off-by: Rishabh Dave <ridave@redhat.com>
else
return -CEPHFS_EROFS;
}
+
+ // don't allow cross-quota renames
if (cct->_conf.get_val<bool>("client_quota") && fromdir != todir) {
Inode *fromdir_root =
- fromdir->quota.is_enabled(QUOTA_MAX_FILES) ? fromdir : get_quota_root(fromdir, perm, QUOTA_MAX_FILES);
+ fromdir->quota.is_enabled() ? fromdir : get_quota_root(fromdir, perm);
Inode *todir_root =
- todir->quota.is_enabled(QUOTA_MAX_FILES) ? todir : get_quota_root(todir, perm, QUOTA_MAX_FILES);
+ todir->quota.is_enabled() ? todir : get_quota_root(todir, perm);
if (fromdir_root != todir_root) {
return -CEPHFS_EXDEV;
}