We were previously rejecting a rename if either of the involved directories
was a quota root, even if the other directory was part of the same quota
"tree". What we really want to do is identify the correct quota root
(whether local or ancestral) for each directory and compare them. So
now we do.
Signed-off-by: Greg Farnum <gfarnum@redhat.com>
(cherry picked from commit
8e8892aa46accb519faa4bb9fecf66618f1b11b2)
return -EROFS;
}
if (cct->_conf->client_quota &&
- fromdir != todir &&
- (fromdir->quota.is_enable() ||
- todir->quota.is_enable() ||
- get_quota_root(fromdir, perm) != get_quota_root(todir, perm))) {
- return -EXDEV;
+ fromdir != todir) {
+ Inode *fromdir_root =
+ fromdir->quota.is_enable() ? fromdir : get_quota_root(fromdir, perm);
+ Inode *todir_root =
+ todir->quota.is_enable() ? todir : get_quota_root(todir, perm);
+ if (fromdir_root != todir_root) {
+ return -EXDEV;
+ }
}
InodeRef target;