mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-29 07:04:10 +08:00
s390/dasd: fix missing path conf_data after failed allocation
dasd_eckd_path_available_action() does a memory allocation to store the per path configuration data permanently. In the unlikely case that this allocation fails there is no conf_data stored for the corresponding path. This is OK since this is not necessary for an operational path but some features like control unit initiated reconfiguration (CUIR) do not work. To fix this add the path to the 'to be verified pathmask' again and schedule the handler again. Signed-off-by: Stefan Haberland <sth@linux.ibm.com> Reviewed-by: Jan Hoeppner <hoeppner@linux.ibm.com> Link: https://lore.kernel.org/r/20211020115124.1735254-7-sth@linux.ibm.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
542e30ce8e
commit
9dffede011
@ -1403,6 +1403,14 @@ static void dasd_eckd_path_available_action(struct dasd_device *device,
|
||||
if (conf_data) {
|
||||
memcpy(conf_data, data->rcd_buffer,
|
||||
DASD_ECKD_RCD_DATA_SIZE);
|
||||
} else {
|
||||
/*
|
||||
* path is operational but path config data could not
|
||||
* be stored due to low mem condition
|
||||
* add it to the error path mask and schedule a path
|
||||
* verification later that this could be added again
|
||||
*/
|
||||
epm |= lpm;
|
||||
}
|
||||
pos = pathmask_to_pos(lpm);
|
||||
dasd_eckd_store_conf_data(device, conf_data, pos);
|
||||
@ -1423,7 +1431,10 @@ static void dasd_eckd_path_available_action(struct dasd_device *device,
|
||||
}
|
||||
dasd_path_add_nppm(device, npm);
|
||||
dasd_path_add_ppm(device, ppm);
|
||||
dasd_path_add_tbvpm(device, epm);
|
||||
if (epm) {
|
||||
dasd_path_add_tbvpm(device, epm);
|
||||
dasd_device_set_timer(device, 50);
|
||||
}
|
||||
dasd_path_add_cablepm(device, cablepm);
|
||||
dasd_path_add_nohpfpm(device, hpfpm);
|
||||
spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags);
|
||||
|
Loading…
Reference in New Issue
Block a user