aboutsummaryrefslogtreecommitdiffstats
path: root/meta-renesas-extras/recipes/linux/linux-renesas/0001-Btrfs-add-ioctl-to-wait-for-qgroup-rescan-completion.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-renesas-extras/recipes/linux/linux-renesas/0001-Btrfs-add-ioctl-to-wait-for-qgroup-rescan-completion.patch')
-rw-r--r--meta-renesas-extras/recipes/linux/linux-renesas/0001-Btrfs-add-ioctl-to-wait-for-qgroup-rescan-completion.patch124
1 files changed, 0 insertions, 124 deletions
diff --git a/meta-renesas-extras/recipes/linux/linux-renesas/0001-Btrfs-add-ioctl-to-wait-for-qgroup-rescan-completion.patch b/meta-renesas-extras/recipes/linux/linux-renesas/0001-Btrfs-add-ioctl-to-wait-for-qgroup-rescan-completion.patch
deleted file mode 100644
index b495d393..00000000
--- a/meta-renesas-extras/recipes/linux/linux-renesas/0001-Btrfs-add-ioctl-to-wait-for-qgroup-rescan-completion.patch
+++ /dev/null
@@ -1,124 +0,0 @@
-From 57254b6ebce4ceca02d9c8b615f6059c56c19238 Mon Sep 17 00:00:00 2001
-From: Jan Schmidt <list.btrfs@jan-o-sch.net>
-Date: Mon, 6 May 2013 19:14:17 +0000
-Subject: [PATCH] Btrfs: add ioctl to wait for qgroup rescan completion
-
-btrfs_qgroup_wait_for_completion waits until the currently running qgroup
-operation completes. It returns immediately when no rescan process is in
-progress. This is useful to automate things around the rescan process (e.g.
-testing).
-
-Signed-off-by: Jan Schmidt <list.btrfs@jan-o-sch.net>
-Signed-off-by: Josef Bacik <jbacik@fusionio.com>
----
- fs/btrfs/ctree.h | 2 ++
- fs/btrfs/ioctl.c | 12 ++++++++++++
- fs/btrfs/qgroup.c | 21 +++++++++++++++++++++
- include/uapi/linux/btrfs.h | 1 +
- 4 files changed, 36 insertions(+)
-
-diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
-index a365400..e36e97b 100644
---- a/fs/btrfs/ctree.h
-+++ b/fs/btrfs/ctree.h
-@@ -1613,6 +1613,7 @@ struct btrfs_fs_info {
- struct mutex qgroup_rescan_lock; /* protects the progress item */
- struct btrfs_key qgroup_rescan_progress;
- struct btrfs_workers qgroup_rescan_workers;
-+ struct completion qgroup_rescan_completion;
-
- /* filesystem state */
- unsigned long fs_state;
-@@ -3820,6 +3821,7 @@ int btrfs_quota_enable(struct btrfs_trans_handle *trans,
- int btrfs_quota_disable(struct btrfs_trans_handle *trans,
- struct btrfs_fs_info *fs_info);
- int btrfs_qgroup_rescan(struct btrfs_fs_info *fs_info);
-+int btrfs_qgroup_wait_for_completion(struct btrfs_fs_info *fs_info);
- int btrfs_add_qgroup_relation(struct btrfs_trans_handle *trans,
- struct btrfs_fs_info *fs_info, u64 src, u64 dst);
- int btrfs_del_qgroup_relation(struct btrfs_trans_handle *trans,
-diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c
-index 0f81d67..1e0dda1 100644
---- a/fs/btrfs/ioctl.c
-+++ b/fs/btrfs/ioctl.c
-@@ -3937,6 +3937,16 @@ static long btrfs_ioctl_quota_rescan_status(struct file *file, void __user *arg)
- return ret;
- }
-
-+static long btrfs_ioctl_quota_rescan_wait(struct file *file, void __user *arg)
-+{
-+ struct btrfs_root *root = BTRFS_I(fdentry(file)->d_inode)->root;
-+
-+ if (!capable(CAP_SYS_ADMIN))
-+ return -EPERM;
-+
-+ return btrfs_qgroup_wait_for_completion(root->fs_info);
-+}
-+
- static long btrfs_ioctl_set_received_subvol(struct file *file,
- void __user *arg)
- {
-@@ -4179,6 +4189,8 @@ long btrfs_ioctl(struct file *file, unsigned int
- return btrfs_ioctl_quota_rescan(file, argp);
- case BTRFS_IOC_QUOTA_RESCAN_STATUS:
- return btrfs_ioctl_quota_rescan_status(file, argp);
-+ case BTRFS_IOC_QUOTA_RESCAN_WAIT:
-+ return btrfs_ioctl_quota_rescan_wait(file, argp);
- case BTRFS_IOC_DEV_REPLACE:
- return btrfs_ioctl_dev_replace(root, argp);
- case BTRFS_IOC_GET_FSLABEL:
-diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c
-index 7f38cce..d059d86 100644
---- a/fs/btrfs/qgroup.c
-+++ b/fs/btrfs/qgroup.c
-@@ -2070,6 +2070,8 @@ out:
- } else {
- pr_err("btrfs: qgroup scan failed with %d\n", err);
- }
-+
-+ complete_all(&fs_info->qgroup_rescan_completion);
- }
-
- static void
-@@ -2110,6 +2112,7 @@ btrfs_qgroup_rescan(struct btrfs_fs_info *fs_info)
- fs_info->qgroup_flags |= BTRFS_QGROUP_STATUS_FLAG_RESCAN;
- memset(&fs_info->qgroup_rescan_progress, 0,
- sizeof(fs_info->qgroup_rescan_progress));
-+ init_completion(&fs_info->qgroup_rescan_completion);
-
- /* clear all current qgroup tracking information */
- for (n = rb_first(&fs_info->qgroup_tree); n; n = rb_next(n)) {
-@@ -2126,3 +2129,21 @@ btrfs_qgroup_rescan(struct btrfs_fs_info *fs_info)
-
- return 0;
- }
-+
-+int btrfs_qgroup_wait_for_completion(struct btrfs_fs_info *fs_info)
-+{
-+ int running;
-+ int ret = 0;
-+
-+ mutex_lock(&fs_info->qgroup_rescan_lock);
-+ spin_lock(&fs_info->qgroup_lock);
-+ running = fs_info->qgroup_flags & BTRFS_QGROUP_STATUS_FLAG_RESCAN;
-+ spin_unlock(&fs_info->qgroup_lock);
-+ mutex_unlock(&fs_info->qgroup_rescan_lock);
-+
-+ if (running)
-+ ret = wait_for_completion_interruptible(
-+ &fs_info->qgroup_rescan_completion);
-+
-+ return ret;
-+}
-diff --git a/include/uapi/linux/btrfs.h b/include/uapi/linux/btrfs.h
-index 5ef0df5..5b683b5 100644
---- a/include/uapi/linux/btrfs.h
-+++ b/include/uapi/linux/btrfs.h
-@@ -530,6 +530,7 @@ struct btrfs_ioctl_send_args {
- struct btrfs_ioctl_quota_rescan_args)
- #define BTRFS_IOC_QUOTA_RESCAN_STATUS _IOR(BTRFS_IOCTL_MAGIC, 45, \
- struct btrfs_ioctl_quota_rescan_args)
-+#define BTRFS_IOC_QUOTA_RESCAN_WAIT _IO(BTRFS_IOCTL_MAGIC, 46)
- #define BTRFS_IOC_GET_FSLABEL _IOR(BTRFS_IOCTL_MAGIC, 49, \
- char[BTRFS_LABEL_SIZE])
- #define BTRFS_IOC_SET_FSLABEL _IOW(BTRFS_IOCTL_MAGIC, 50, \