Home Home > GIT Browse > SLE11-SP4
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Thumshirn <jthumshirn@suse.de>2018-06-11 11:14:00 +0200
committerJohannes Thumshirn <jthumshirn@suse.de>2018-06-11 11:14:05 +0200
commit9a76a0994ec66fbea0b7d842fcca0c3cc3fd9459 (patch)
treebdbf52fd014d8d879cf92be81e6f6d3319fb3df2
parentb5ab2d735a7ce879e545bc1b3355551a27470a00 (diff)
s390/dasd: fix failing path verification (bnc#1096746,
LTC#167649). suse-commit: 0af7b1907c389e4f93279071a1bfb4724f2a6956
-rw-r--r--drivers/s390/block/dasd_eckd.c8
-rw-r--r--drivers/s390/block/dasd_int.h1
2 files changed, 7 insertions, 2 deletions
diff --git a/drivers/s390/block/dasd_eckd.c b/drivers/s390/block/dasd_eckd.c
index 290073e9556b..d0ddb4c75f84 100644
--- a/drivers/s390/block/dasd_eckd.c
+++ b/drivers/s390/block/dasd_eckd.c
@@ -1246,7 +1246,11 @@ static void do_path_verification_work(struct work_struct *work)
schedule_work(work);
return;
}
-
+ /* check if path verification already running and delay if so */
+ if (test_and_set_bit(DASD_FLAG_PATH_VERIFY, &device->flags)) {
+ schedule_work(work);
+ return;
+ }
opm = 0;
npm = 0;
ppm = 0;
@@ -1375,7 +1379,7 @@ static void do_path_verification_work(struct work_struct *work)
device->path_data.tbvpm |= epm;
spin_unlock_irqrestore(get_ccwdev_lock(device->cdev), flags);
}
-
+ clear_bit(DASD_FLAG_PATH_VERIFY, &device->flags);
dasd_put_device(device);
if (data->isglobal)
mutex_unlock(&dasd_path_verification_mutex);
diff --git a/drivers/s390/block/dasd_int.h b/drivers/s390/block/dasd_int.h
index 0977609bc896..ab807fe13206 100644
--- a/drivers/s390/block/dasd_int.h
+++ b/drivers/s390/block/dasd_int.h
@@ -528,6 +528,7 @@ struct dasd_block {
#define DASD_FLAG_SAFE_OFFLINE 10 /* safe offline processing requested*/
#define DASD_FLAG_SAFE_OFFLINE_RUNNING 11 /* safe offline running */
#define DASD_FLAG_ABORTALL 12 /* Abort all noretry requests */
+#define DASD_FLAG_PATH_VERIFY 13 /* Path verification worker running */
void dasd_put_device_wake(struct dasd_device *);