Patchwork [3.11.y.z,extended,stable] Patch "s390/dasd: hold request queue sysfs lock when calling elevator_init()" has been added to staging queue

mail settings
Submitter Luis Henriques
Date March 17, 2014, 11:07 a.m.
Message ID <>
Download mbox | patch
Permalink /patch/330898/
State New
Headers show


Luis Henriques - March 17, 2014, 11:07 a.m.
This is a note to let you know that I have just added a patch titled

    s390/dasd: hold request queue sysfs lock when calling elevator_init()

to the linux-3.11.y-queue branch of the 3.11.y.z extended stable tree 
which can be found at:;a=shortlog;h=refs/heads/linux-3.11.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.11.y.z tree, see



From 1ef7c043793f684c470eb54ce56283590b4ea407 Mon Sep 17 00:00:00 2001
From: Heiko Carstens <>
Date: Thu, 31 Oct 2013 13:24:28 +0100
Subject: s390/dasd: hold request queue sysfs lock when calling elevator_init()

commit ef0899410ff630b2e75306da49996dbbfa318165 upstream.

"elevator: Fix a race in elevator switching and md device initialization"
changed the semantics of elevator_init() in a way that now enforces to hold
the corresponding request queue's sysfs_lock when calling elevator_init()
to fix a race.
The patch did not convert the s390 dasd device driver which is the only
device driver which also calls elevator_init(). So add the missing locking.

Cc: Tomoki Sekiyama <>
Cc: Jens Axboe <>
Signed-off-by: Heiko Carstens <>
Signed-off-by: Jens Axboe <>
Cc: Christian Borntraeger <>
Signed-off-by: Luis Henriques <>
 drivers/s390/block/dasd.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)



diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c
index 451bf99..846d5c6 100644
--- a/drivers/s390/block/dasd.c
+++ b/drivers/s390/block/dasd.c
@@ -2978,12 +2978,12 @@  static int dasd_alloc_queue(struct dasd_block *block)

 	block->request_queue->elevator = NULL;
+	mutex_lock(&block->request_queue->sysfs_lock);
 	rc = elevator_init(block->request_queue, "deadline");
-	if (rc) {
+	if (rc)
-		return rc;
-	}
-	return 0;
+	mutex_unlock(&block->request_queue->sysfs_lock);
+	return rc;