mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/
synced 2026-09-26 18:16:26 +00:00
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> |
History
|
|
|---|---|---|
| .. | ||
| dasd.c | ||
| 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 | ||
| dcssblk.c | ||
| Kconfig | ||
| Makefile | ||
| scm_blk.c | ||
| scm_blk.h | ||
| scm_drv.c | ||
| xpram.c | ||