diff options
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.patch | 124 |
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, \ |