]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
dm: fix missed error code if .end_io isn't implemented by target_type
authorzhendong chen <alex.chen@huawei.com>
Wed, 17 Dec 2014 06:37:04 +0000 (14:37 +0800)
committerLuis Henriques <luis.henriques@canonical.com>
Thu, 15 Jan 2015 10:44:38 +0000 (10:44 +0000)
commit 5164bece1673cdf04782f8ed3fba70743700f5da upstream.

In bio-based DM's clone_endio(), when target_type doesn't implement
.end_io (e.g. linear) r will be always be initialized 0.  So if a
WRITE SAME bio fails WRITE SAME will not be disabled as intended.

Fix this by initializing r to error, rather than 0, in clone_endio().

Signed-off-by: Alex Chen <alex.chen@huawei.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
Fixes: 7eee4ae2db ("dm: disable WRITE SAME if it fails")
Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
drivers/md/dm.c

index 32b958dbc499212bfcaceb6afbf72e58c5b4af66..00a6cff2fffda0a874c52aa6a7f60b7ed31590ba 100644 (file)
@@ -776,7 +776,7 @@ static void disable_write_same(struct mapped_device *md)
 
 static void clone_endio(struct bio *bio, int error)
 {
-       int r = 0;
+       int r = error;
        struct dm_target_io *tio = container_of(bio, struct dm_target_io, clone);
        struct dm_io *io = tio->io;
        struct mapped_device *md = tio->io->md;