mirror of
https://github.com/systemd/systemd.git
synced 2026-08-03 22:50:29 +00:00
@@ -575,8 +575,12 @@ int btrfs_qgroup_get_quota_fd(int fd, uint64_t qgroupid, BtrfsQuotaInfo *ret) {
|
||||
unsigned i;
|
||||
|
||||
args.key.nr_items = 256;
|
||||
if (ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args) < 0)
|
||||
if (ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args) < 0) {
|
||||
if (errno == ENOENT) /* quota tree is missing: quota disabled */
|
||||
break;
|
||||
|
||||
return -errno;
|
||||
}
|
||||
|
||||
if (args.key.nr_items <= 0)
|
||||
break;
|
||||
@@ -1006,6 +1010,10 @@ static int qgroup_create_or_destroy(int fd, bool b, uint64_t qgroupid) {
|
||||
for (c = 0;; c++) {
|
||||
if (ioctl(fd, BTRFS_IOC_QGROUP_CREATE, &args) < 0) {
|
||||
|
||||
/* If quota is not enabled, we get EINVAL. Turn this into a recognizable error */
|
||||
if (errno == EINVAL)
|
||||
return -ENOPROTOOPT;
|
||||
|
||||
if (errno == EBUSY && c < 10) {
|
||||
(void) btrfs_quota_scan_wait(fd);
|
||||
continue;
|
||||
@@ -1335,8 +1343,12 @@ int btrfs_qgroup_copy_limits(int fd, uint64_t old_qgroupid, uint64_t new_qgroupi
|
||||
unsigned i;
|
||||
|
||||
args.key.nr_items = 256;
|
||||
if (ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args) < 0)
|
||||
if (ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args) < 0) {
|
||||
if (errno == ENOENT) /* quota tree missing: quota is not enabled, hence nothing to copy */
|
||||
break;
|
||||
|
||||
return -errno;
|
||||
}
|
||||
|
||||
if (args.key.nr_items <= 0)
|
||||
break;
|
||||
@@ -1766,8 +1778,12 @@ int btrfs_qgroup_find_parents(int fd, uint64_t qgroupid, uint64_t **ret) {
|
||||
unsigned i;
|
||||
|
||||
args.key.nr_items = 256;
|
||||
if (ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args) < 0)
|
||||
if (ioctl(fd, BTRFS_IOC_TREE_SEARCH, &args) < 0) {
|
||||
if (errno == ENOENT) /* quota tree missing: quota is disabled */
|
||||
break;
|
||||
|
||||
return -errno;
|
||||
}
|
||||
|
||||
if (args.key.nr_items <= 0)
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user