浏览代码

nbd: complete requests from ->timeout

By completing the request entirely in the driver we can remove the
BLK_EH_HANDLED return value and thus the split responsibility between the
driver and the block layer that has been causing trouble.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
Christoph Hellwig 7 年之前
父节点
当前提交
e5eab01704
共有 1 个文件被更改,包括 4 次插入3 次删除
  1. 4 3
      drivers/block/nbd.c

+ 4 - 3
drivers/block/nbd.c

@@ -304,7 +304,7 @@ static enum blk_eh_timer_return nbd_xmit_timeout(struct request *req,
 
 
 	if (!refcount_inc_not_zero(&nbd->config_refs)) {
 	if (!refcount_inc_not_zero(&nbd->config_refs)) {
 		cmd->status = BLK_STS_TIMEOUT;
 		cmd->status = BLK_STS_TIMEOUT;
-		return BLK_EH_HANDLED;
+		goto done;
 	}
 	}
 	config = nbd->config;
 	config = nbd->config;
 
 
@@ -342,8 +342,9 @@ static enum blk_eh_timer_return nbd_xmit_timeout(struct request *req,
 	cmd->status = BLK_STS_IOERR;
 	cmd->status = BLK_STS_IOERR;
 	sock_shutdown(nbd);
 	sock_shutdown(nbd);
 	nbd_config_put(nbd);
 	nbd_config_put(nbd);
-
-	return BLK_EH_HANDLED;
+done:
+	blk_mq_complete_request(req);
+	return BLK_EH_DONE;
 }
 }
 
 
 /*
 /*