diff options
author | Richard Weinberger <richard@nod.at> | 2013-08-18 13:30:07 +0200 |
---|---|---|
committer | Richard Weinberger <richard@nod.at> | 2013-09-07 10:56:55 +0200 |
commit | bc1d72e73be63a7c4a07eb10cf51e91f20bf6076 (patch) | |
tree | 12c51927d7fd92b9585071c988a3b8e61ffd7d20 /arch/um | |
parent | um: ubd: Add REQ_FLUSH suppport (diff) | |
download | linux-bc1d72e73be63a7c4a07eb10cf51e91f20bf6076.tar.xz linux-bc1d72e73be63a7c4a07eb10cf51e91f20bf6076.zip |
um: ubd: Introduce submit_request()
Just a clean-up patch to remove the open coded
variants and to ensure that all requests are submitted the
same way.
Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'arch/um')
-rw-r--r-- | arch/um/drivers/ubd_kern.c | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c index d27c703be1a1..1812bc81715b 100644 --- a/arch/um/drivers/ubd_kern.c +++ b/arch/um/drivers/ubd_kern.c @@ -1252,12 +1252,28 @@ static void prepare_flush_request(struct request *req, io_req->op = UBD_FLUSH; } +static bool submit_request(struct io_thread_req *io_req, struct ubd *dev) +{ + int n = os_write_file(thread_fd, &io_req, + sizeof(io_req)); + if (n != sizeof(io_req)) { + if (n != -EAGAIN) + printk("write to io thread failed, " + "errno = %d\n", -n); + else if (list_empty(&dev->restart)) + list_add(&dev->restart, &restart); + + kfree(io_req); + return false; + } + return true; +} + /* Called with dev->lock held */ static void do_ubd_request(struct request_queue *q) { struct io_thread_req *io_req; struct request *req; - int n; while(1){ struct ubd *dev = q->queuedata; @@ -1283,8 +1299,7 @@ static void do_ubd_request(struct request_queue *q) return; } prepare_flush_request(req, io_req); - os_write_file(thread_fd, &io_req, - sizeof(struct io_thread_req *)); + submit_request(io_req, dev); } while(dev->start_sg < dev->end_sg){ @@ -1301,17 +1316,8 @@ static void do_ubd_request(struct request_queue *q) (unsigned long long)dev->rq_pos << 9, sg->offset, sg->length, sg_page(sg)); - n = os_write_file(thread_fd, &io_req, - sizeof(struct io_thread_req *)); - if(n != sizeof(struct io_thread_req *)){ - if(n != -EAGAIN) - printk("write to io thread failed, " - "errno = %d\n", -n); - else if(list_empty(&dev->restart)) - list_add(&dev->restart, &restart); - kfree(io_req); + if (submit_request(io_req, dev) == false) return; - } dev->rq_pos += sg->length >> 9; dev->start_sg++; |