홍신 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
Seemingly Similar 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