提交 9a8d23d8 编写于 作者: T Tejun Heo 提交者: Jens Axboe

mg_disk: fix queue hang / infinite retry on !fs requests

Both request functions in mg_disk simply return when they encounter a
!fs request, which means the request will never be cleared from the
queue causing queue hang and indefinite retry of the request.  Fix it.

While at it, flatten condition checks and add unlikely to !fs tests.

[ Impact: fix possible queue hang / infinite retry of !fs requests ]
Signed-off-by: NTejun Heo <tj@kernel.org>
Cc: unsik Kim <donari75@gmail.com>
Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
上级 8f6205cd
...@@ -672,16 +672,16 @@ static void mg_request_poll(struct request_queue *q) ...@@ -672,16 +672,16 @@ static void mg_request_poll(struct request_queue *q)
while ((req = elv_next_request(q)) != NULL) { while ((req = elv_next_request(q)) != NULL) {
host = req->rq_disk->private_data; host = req->rq_disk->private_data;
if (blk_fs_request(req)) {
switch (rq_data_dir(req)) { if (unlikely(!blk_fs_request(req))) {
case READ: __blk_end_request_cur(req, -EIO);
mg_read(req); continue;
break;
case WRITE:
mg_write(req);
break;
}
} }
if (rq_data_dir(req) == READ)
mg_read(req);
else
mg_write(req);
} }
} }
...@@ -766,8 +766,10 @@ static void mg_request(struct request_queue *q) ...@@ -766,8 +766,10 @@ static void mg_request(struct request_queue *q)
continue; continue;
} }
if (!blk_fs_request(req)) if (unlikely(!blk_fs_request(req))) {
return; __blk_end_request_cur(req, -EIO);
continue;
}
if (!mg_issue_req(req, host, sect_num, sect_cnt)) if (!mg_issue_req(req, host, sect_num, sect_cnt))
return; return;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册