홍신 shin hong
2009-Sep-03  10:12 UTC
[PATCH] Don''t exist from cleaner_kthread and transaction_kthread until kthread_should_stop is true
upstream commit 2ad49887150894b9ed6a87a76b409adceee6b074
Motivated from the commit,
I found that cleaner_kthread() and transaction_kthread()
can result similar error since these two function can exit
even though kthread_should_stop() is not true.
In order to resolve the bug, break statements are changed
into continue statements in order to wait until kthread_should_stop()
becomes true.
--- a/fs/btrfs/async-thread.c
+++ b/fs/btrfs/async-thread.c
--- a/fs/btrfs/disk-io.c   2009-08-17 06:19:38.000000000 +0900
+++ a/fs/btrfs/disk-io.c 2009-09-03 19:09:14.640625000 +0900
@@ -1435,7 +1435,7 @@
        do {
                smp_mb();
                if (root->fs_info->closing)
-                       break;
+                       continue;
                vfs_check_frozen(root->fs_info->sb, SB_FREEZE_WRITE);
                mutex_lock(&root->fs_info->cleaner_mutex);
@@ -1447,7 +1447,7 @@
                } else {
                        smp_mb();
                        if (root->fs_info->closing)
-                               break;
+                               continue;
                        set_current_state(TASK_INTERRUPTIBLE);
                        schedule();
                        __set_current_state(TASK_RUNNING);
@@ -1468,7 +1468,7 @@
        do {
                smp_mb();
                if (root->fs_info->closing)
-                       break;
+                       continue;
                delay = HZ * 30;
                vfs_check_frozen(root->fs_info->sb, SB_FREEZE_WRITE);
@@ -1499,7 +1499,7 @@
                        refrigerator();
                } else {
                        if (root->fs_info->closing)
-                               break;
+                               continue;
                        set_current_state(TASK_INTERRUPTIBLE);
                        schedule_timeout(delay);
                        __set_current_state(TASK_RUNNING);
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs"
in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
홍신 shin hong
2009-Sep-04  00:06 UTC
Re: [PATCH] Don''t exist from cleaner_kthread and transaction_kthread until kthread_should_stop is true
However, Vitaily Gusev notice me that kthread_stop() has been changed
recently so that it may executed for threads which was existed.
(commit  63706172f332fd3f6e7458ebfb35fa6de9c21dc5
              kthreads: rework kthread_stop())
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs"
in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
홍신 shin hong
2009-Sep-04  00:11 UTC
Re: [PATCH] Don''t exist from cleaner_kthread and transaction_kthread until kthread_should_stop is true
However, it seems that the kthread_stop() patch is not yet applied. Linux 2.6.30.5 still use the order one. On Fri, Sep 4, 2009 at 9:06 AM, 홍신 shin hong<hongshin@gmail.com> wrote:> However, Vitaily Gusev notice me that kthread_stop() has been changed > recently so that it may executed for threads which was existed. > (commit 63706172f332fd3f6e7458ebfb35fa6de9c21dc5 > kthreads: rework kthread_stop()) >-- To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Maybe Matching Threads
- [PATCH 08/12] Btrfs: Introduce global metadata reservation
- iozone remove_suid oops...
- [PATCH 2/4] Btrfs: fix deadlock on sb->s_umount when doing umount
- [PATCH] Btrfs: check return value for kthread_run() correctly
- Deadlock in btrfs-cleaner, related to snapshot deletion