aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390
diff options
context:
space:
mode:
authorSteffen Maier <maier@linux.vnet.ibm.com>2013-11-05 06:59:46 -0500
committerMartin Schwidefsky <schwidefsky@de.ibm.com>2013-11-06 08:32:22 -0500
commitde9587a2f54d2d0063f0dbc775328129b9daaaa2 (patch)
treec013b5729a5250b774b5476dd48fdda817d27c80 /drivers/s390
parent106078641f32a6a10d9759f809f809725695cb09 (diff)
s390/scm_blk: fix endless loop for requests != REQ_TYPE_FS
The while loop only peeks at the top request in the queue but does not yet consume it. Since we only handle fs requests, we need to dequeue and complete all other request command types with error just in case we would ever receive such an unforeseen request. Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com> Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390')
-rw-r--r--drivers/s390/block/scm_blk.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/s390/block/scm_blk.c b/drivers/s390/block/scm_blk.c
index 5d73e6e49af6..548209a9c43c 100644
--- a/drivers/s390/block/scm_blk.c
+++ b/drivers/s390/block/scm_blk.c
@@ -223,8 +223,12 @@ static void scm_blk_request(struct request_queue *rq)
223 int ret; 223 int ret;
224 224
225 while ((req = blk_peek_request(rq))) { 225 while ((req = blk_peek_request(rq))) {
226 if (req->cmd_type != REQ_TYPE_FS) 226 if (req->cmd_type != REQ_TYPE_FS) {
227 blk_start_request(req);
228 blk_dump_rq_flags(req, KMSG_COMPONENT " bad request");
229 blk_end_request_all(req, -EIO);
227 continue; 230 continue;
231 }
228 232
229 if (!scm_permit_request(bdev, req)) { 233 if (!scm_permit_request(bdev, req)) {
230 scm_ensure_queue_restart(bdev); 234 scm_ensure_queue_restart(bdev);