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>
This commit is contained in:
@@ -1252,12 +1252,28 @@ static void prepare_flush_request(struct request *req,
|
|||||||
io_req->op = UBD_FLUSH;
|
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 */
|
/* Called with dev->lock held */
|
||||||
static void do_ubd_request(struct request_queue *q)
|
static void do_ubd_request(struct request_queue *q)
|
||||||
{
|
{
|
||||||
struct io_thread_req *io_req;
|
struct io_thread_req *io_req;
|
||||||
struct request *req;
|
struct request *req;
|
||||||
int n;
|
|
||||||
|
|
||||||
while(1){
|
while(1){
|
||||||
struct ubd *dev = q->queuedata;
|
struct ubd *dev = q->queuedata;
|
||||||
@@ -1283,8 +1299,7 @@ static void do_ubd_request(struct request_queue *q)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
prepare_flush_request(req, io_req);
|
prepare_flush_request(req, io_req);
|
||||||
os_write_file(thread_fd, &io_req,
|
submit_request(io_req, dev);
|
||||||
sizeof(struct io_thread_req *));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
while(dev->start_sg < dev->end_sg){
|
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,
|
(unsigned long long)dev->rq_pos << 9,
|
||||||
sg->offset, sg->length, sg_page(sg));
|
sg->offset, sg->length, sg_page(sg));
|
||||||
|
|
||||||
n = os_write_file(thread_fd, &io_req,
|
if (submit_request(io_req, dev) == false)
|
||||||
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);
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
dev->rq_pos += sg->length >> 9;
|
dev->rq_pos += sg->length >> 9;
|
||||||
dev->start_sg++;
|
dev->start_sg++;
|
||||||
|
Reference in New Issue
Block a user