Merge pull request #1837 from poettering/grabbag2

variety of fixes
This commit is contained in:
Tom Gundersen
2015-11-11 02:31:29 +01:00
14 changed files with 148 additions and 92 deletions

View File

@@ -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;