From 4a2015811a1fe420553a6f4aebcfd849fe37619a Mon Sep 17 00:00:00 2001 From: Jiri Kosina Date: Wed, 28 May 2014 11:55:23 +0200 Subject: [PATCH] floppy: do not corrupt bio.bi_flags when reading block 0 Commit e0008fff130 ("floppy: silence warning during disk test") caused bio.bi_flags being overwritten, and its initialization to BIO_UPTODATE in bio_init() to be lost. This was unnoticed until a958ff9438 ("floppy: bail out in open() if drive is not responding to block0 read"), because the error value wasn't checked for in the bio completion callback. Now we are actually looking at the error, and the loss of BIO_UPTODATE causes EIO to be wrongly passed to the callback, which confuses the FD_OPEN_SHOULD_FAIL_BIT logic. Fix this by not destroying previous value of bi_flags when setting BIO_QUIET. Cc: Stephen Hemminger Reported-by: Takashi Iwai Signed-off-by: Jiri Kosina --- drivers/block/floppy.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/block/floppy.c b/drivers/block/floppy.c index 5f69c910c3ac5..8e767bb7995ec 100644 --- a/drivers/block/floppy.c +++ b/drivers/block/floppy.c @@ -3809,7 +3809,7 @@ static int __floppy_read_block_0(struct block_device *bdev, int drive) bio.bi_iter.bi_size = size; bio.bi_bdev = bdev; bio.bi_iter.bi_sector = 0; - bio.bi_flags = (1 << BIO_QUIET); + bio.bi_flags |= (1 << BIO_QUIET); bio.bi_private = &cbdata; bio.bi_end_io = floppy_rb0_cb; -- 2.39.5