kernel_optimize_test/drivers/s390/block
Stefan Haberland 9487cfd343 s390/dasd: fix handling of internal requests
Internal DASD device driver I/O such as query host access count or
path verification is started using the _sleep_on() function.
To mark a request as started or ended the callback_data is set to either
DASD_SLEEPON_START_TAG or DASD_SLEEPON_END_TAG.

In cases where the request has to be stopped unconditionally the status is
set to DASD_SLEEPON_END_TAG as well which leads to immediate clearing of
the request.
But the request might still be on a device request queue for normal
operation which might lead to a panic because of a BUG() statement in
__dasd_device_process_final_queue() or a list corruption of the device
request queue.

Fix by removing the setting of DASD_SLEEPON_END_TAG in the
dasd_cancel_req() and dasd_generic_requeue_all_requests() functions and
ensure that the request is not deleted in the requeue function.
Trigger the device tasklet in the requeue function and let the normal
processing cleanup the request.

Signed-off-by: Stefan Haberland <sth@linux.vnet.ibm.com>
Reviewed-by: Jan Hoeppner <hoeppner@linux.vnet.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
2018-02-19 08:00:06 +01:00
..
dasd_3990_erp.c
dasd_alias.c
dasd_devmap.c
dasd_diag.c
dasd_diag.h
dasd_eckd.c
dasd_eckd.h
dasd_eer.c
dasd_erp.c
dasd_fba.c
dasd_fba.h
dasd_genhd.c
dasd_int.h
dasd_ioctl.c
dasd_proc.c
dasd.c s390/dasd: fix handling of internal requests 2018-02-19 08:00:06 +01:00
dcssblk.c
Kconfig
Makefile
scm_blk.c
scm_blk.h
scm_drv.c
xpram.c