OpenCloudOS-Kernel/drivers/block
Michael Schmitz d28e4dff08 block: ataflop: more blk-mq refactoring fixes
As it turns out, my earlier patch in commit 86d46fdaa1 (block:
ataflop: fix breakage introduced at blk-mq refactoring) was
incomplete. This patch fixes any remaining issues found during
more testing and code review.

Requests exceeding 4 k are handled in 4k segments but
__blk_mq_end_request() is never called on these (still
sectors outstanding on the request). With redo_fd_request()
removed, there is no provision to kick off processing of the
next segment, causing requests exceeding 4k to hang. (By
setting /sys/block/fd0/queue/max_sectors_k <= 4 as workaround,
this behaviour can be avoided).

Instead of reintroducing redo_fd_request(), requeue the remainder
of the request by calling blk_mq_requeue_request() on incomplete
requests (i.e. when blk_update_request() still returns true), and
rely on the block layer to queue the residual as new request.

Both error handling and formatting needs to release the
ST-DMA lock, so call finish_fdc() on these (this was previously
handled by redo_fd_request()). finish_fdc() may be called
legitimately without the ST-DMA lock held - make sure we only
release the lock if we actually held it. In a similar way,
early exit due to errors in ataflop_queue_rq() must release
the lock.

After minor errors, fd_error sets up to recalibrate the drive
but never re-runs the current operation (another task handled by
redo_fd_request() before). Call do_fd_action() to get the next
steps (seek, retry read/write) underway.

Signed-off-by: Michael Schmitz <schmitzmic@gmail.com>
Fixes: 6ec3938cff (ataflop: convert to blk-mq)
CC: linux-block@vger.kernel.org
Link: https://lore.kernel.org/r/20211024002013.9332-1-schmitzmic@gmail.com
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2021-10-25 07:54:32 -06:00
..
aoe block: aoe: fixup coccinelle warnings 2021-10-21 08:54:15 -06:00
drbd drbd: add error handling support for add_disk() 2021-10-18 14:41:36 -06:00
mtip32xx mtip32xx: Remove redundant 'flush_workqueue()' calls 2021-10-18 14:50:37 -06:00
null_blk null_blk: poll queue support 2021-10-18 14:41:36 -06:00
paride pf: fix error codes in pf_init_unit() 2021-10-18 14:42:16 -06:00
rnbd rnbd: add error handling support for add_disk() 2021-10-21 09:00:56 -06:00
rsxx block/rsxx: add error handling support for add_disk() 2021-10-18 14:41:36 -06:00
xen-blkback isystem: trim/fixup stdarg.h and other headers 2021-08-19 09:02:55 +09:00
zram block: switch polling to be bio based 2021-10-18 06:17:36 -06:00
Kconfig block: remove support for cryptoloop and the xor transfer 2021-10-22 08:34:58 -06:00
Makefile block: remove support for cryptoloop and the xor transfer 2021-10-22 08:34:58 -06:00
amiflop.c amiflop: add error handling support for add_disk() 2021-10-18 14:41:37 -06:00
ataflop.c block: ataflop: more blk-mq refactoring fixes 2021-10-25 07:54:32 -06:00
brd.c block: switch polling to be bio based 2021-10-18 06:17:36 -06:00
floppy.c floppy: add error handling support for add_disk() 2021-10-18 14:41:37 -06:00
loop.c block: remove support for cryptoloop and the xor transfer 2021-10-22 08:34:58 -06:00
loop.h block: remove support for cryptoloop and the xor transfer 2021-10-22 08:34:58 -06:00
n64cart.c n64cart: add error handling support for add_disk() 2021-10-18 14:41:36 -06:00
nbd.c nbd: Fix use-after-free in pid_show 2021-10-20 08:09:56 -06:00
pktcdvd.c pktcdvd: add error handling support for add_disk() 2021-10-18 14:41:36 -06:00
ps3disk.c ps3disk: use memcpy_{from,to}_bvec 2021-08-02 13:37:27 -06:00
ps3vram.c block: switch polling to be bio based 2021-10-18 06:17:36 -06:00
rbd.c rbd: add add_disk() error handling 2021-10-18 14:41:37 -06:00
rbd_types.h libceph, rbd: replace zero-length array with flexible-array 2020-06-01 13:22:53 +02:00
sunvdc.c Char / Misc driver updates for 5.14-rc1 2021-07-05 13:42:16 -07:00
swim.c swim: add error handling support for add_disk() 2021-10-18 14:41:37 -06:00
swim3.c swim3: add missing major.h include 2021-10-18 14:42:44 -06:00
swim_asm.S treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152 2019-05-30 11:26:32 -07:00
sx8.c sx8: fix an error code in carm_init_one() 2021-10-18 14:42:30 -06:00
virtio_blk.c Revert "virtio-blk: Add validation for block size in config space" 2021-10-13 08:35:36 -04:00
xen-blkfront.c xen-blkfront: add error handling support for add_disk() 2021-10-21 09:00:56 -06:00
z2ram.c for-5.14/drivers-2021-06-29 2021-06-30 12:21:16 -07:00