aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Behrens <sbehrens@giantdisaster.de>2012-11-05 11:11:06 -0500
committerJosef Bacik <jbacik@fusionio.com>2012-12-12 17:15:36 -0500
commit1acd6831d98779c88cd57f0a5826d6df0b09f3fa (patch)
treec5e7773bcf197766a126b5d2723e058eb5b45bc6
parentaa1b8cd409f05e1489ec77ff219eff6ed4b801b8 (diff)
Btrfs: avoid risk of a deadlock in btrfs_handle_error
Remove the attempt to cancel a running scrub or device replace operation in btrfs_handle_error() because it adds the risk of a deadlock. The only penalty of not canceling the operation is that some I/O remains active until the procedure completes. This is basically the same thing that happens to other tasks that are running in user mode context, they are not affected or stopped in btrfs_handle_error(), these tasks just need to handle write errors correctly. Signed-off-by: Stefan Behrens <sbehrens@giantdisaster.de> Signed-off-by: Chris Mason <chris.mason@fusionio.com>
-rw-r--r--fs/btrfs/super.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index a1a6c296ddcd..ef2415896b06 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -116,7 +116,16 @@ static void btrfs_handle_error(struct btrfs_fs_info *fs_info)
116 if (fs_info->fs_state & BTRFS_SUPER_FLAG_ERROR) { 116 if (fs_info->fs_state & BTRFS_SUPER_FLAG_ERROR) {
117 sb->s_flags |= MS_RDONLY; 117 sb->s_flags |= MS_RDONLY;
118 printk(KERN_INFO "btrfs is forced readonly\n"); 118 printk(KERN_INFO "btrfs is forced readonly\n");
119 btrfs_scrub_cancel(fs_info); 119 /*
120 * Note that a running device replace operation is not
121 * canceled here although there is no way to update
122 * the progress. It would add the risk of a deadlock,
123 * therefore the canceling is ommited. The only penalty
124 * is that some I/O remains active until the procedure
125 * completes. The next time when the filesystem is
126 * mounted writeable again, the device replace
127 * operation continues.
128 */
120// WARN_ON(1); 129// WARN_ON(1);
121 } 130 }
122} 131}