From: Jens Axboe <jaxboe@fusionio.com>
To: Chris Frey <cdfrey@foursquare.net>
Cc: Tejun Heo <htejun@gmail.com>, Richard Weinberger <richard@nod.at>,
Andrew Morton <akpm@linux-foundation.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"jdike@addtoit.com" <jdike@addtoit.com>,
"user-mode-linux-devel@lists.sourceforge.net"
<user-mode-linux-devel@lists.sourceforge.net>,
"user-mode-linux-user@lists.sourceforge.net"
<user-mode-linux-user@lists.sourceforge.net>,
"janjaap@bos.nl" <janjaap@bos.nl>,
"geert@linux-m68k.org" <geert@linux-m68k.org>,
"martin.petersen@oracle.com" <martin.petersen@oracle.com>,
"adobriyan@gmail.com" <adobriyan@gmail.com>,
"syzop@vulnscan.org" <syzop@vulnscan.org>
Subject: Re: [PATCH 1/1] um: ubd: Fix data corruption
Date: Thu, 07 Oct 2010 09:58:16 +0200 [thread overview]
Message-ID: <4CAD7D98.7080808@fusionio.com> (raw)
In-Reply-To: <20101005203137.GA594@foursquare.net>
On 2010-10-05 22:31, Chris Frey wrote:
> On Tue, Oct 05, 2010 at 10:23:19AM +0200, Tejun Heo wrote:
>> Hmmmm, can you please give a shot at the following one? Thank you.
>
> I applied this patch on top of stock 2.6.35.5 as usual (no other patches)
> and tested on my maverick image as before. I ran a fsck.ext3 on the
> filesystem image from the host before my test, just to make sure, and
> there were no errors.
>
> Unfortunately, this patch does not fix the issue either. I get errors
> in the guest like the following:
So how about this? Note that I haven't even compiled this. The request
handling logic really should be fixed in there, it's horribly
inefficient.
diff --git a/arch/um/drivers/ubd_kern.c b/arch/um/drivers/ubd_kern.c
index 1bcd208..c272cf6 100644
--- a/arch/um/drivers/ubd_kern.c
+++ b/arch/um/drivers/ubd_kern.c
@@ -163,6 +163,7 @@ struct ubd {
struct scatterlist sg[MAX_SG];
struct request *request;
int start_sg, end_sg;
+ unsigned int rq_offset;
};
#define DEFAULT_COW { \
@@ -187,6 +188,7 @@ struct ubd {
.request = NULL, \
.start_sg = 0, \
.end_sg = 0, \
+ .rq_offset 0, \
}
/* Protected by ubd_lock */
@@ -466,6 +468,8 @@ static void ubd_handler(void)
int n;
while(1){
+ struct ubd *dev;
+
n = os_read_file(thread_fd, &req,
sizeof(struct io_thread_req *));
if(n != sizeof(req)){
@@ -476,6 +480,11 @@ static void ubd_handler(void)
return;
}
+ /*
+ * Clear internal offset, block core will update request state
+ */
+ dev = req->req->q->queuedata;
+ dev->rq_offset = 0;
blk_end_request(req->req, 0, req->length);
kfree(req);
}
@@ -1241,10 +1250,11 @@ static void do_ubd_request(struct request_queue *q)
dev->request = req;
dev->start_sg = 0;
dev->end_sg = blk_rq_map_sg(q, req, dev->sg);
+ dev->rq_offset = 0;
}
req = dev->request;
- sector = blk_rq_pos(req);
+ sector = blk_rq_pos(req) + dev->rq_offset;
while(dev->start_sg < dev->end_sg){
struct scatterlist *sg = &dev->sg[dev->start_sg];
@@ -1272,6 +1282,7 @@ static void do_ubd_request(struct request_queue *q)
return;
}
+ dev->rq_offset += sg->length >> 9;
dev->start_sg++;
}
dev->end_sg = 0;
--
Jens Axboe
next prev parent reply other threads:[~2010-10-07 7:58 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-28 21:47 [PATCH 1/1] um: ubd: Fix data corruption Richard Weinberger
2010-09-28 22:00 ` Andrew Morton
2010-09-28 22:00 ` Andrew Morton
2010-09-28 22:13 ` Richard Weinberger
2010-09-28 22:52 ` Chris Frey
2010-09-28 23:10 ` Jens Axboe
2010-09-29 0:48 ` Janjaap Bos
2010-09-29 1:29 ` Chris Frey
2010-09-29 5:21 ` Jens Axboe
2010-09-29 6:34 ` Chris Frey
2010-10-04 16:37 ` Tejun Heo
2010-10-04 19:51 ` Chris Frey
2010-10-05 8:23 ` Tejun Heo
2010-10-05 20:31 ` Chris Frey
2010-10-07 7:58 ` Jens Axboe [this message]
2010-10-07 20:23 ` Chris Frey
2010-10-14 13:14 ` Tejun Heo
2010-10-14 14:20 ` richard -rw- weinberger
2010-10-14 18:03 ` Tejun Heo
2010-10-14 21:24 ` Richard Weinberger
2010-10-15 4:47 ` Chris Frey
2010-10-02 17:27 ` richard -rw- weinberger
2010-09-29 3:30 ` Chris Frey
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4CAD7D98.7080808@fusionio.com \
--to=jaxboe@fusionio.com \
--cc=adobriyan@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=cdfrey@foursquare.net \
--cc=geert@linux-m68k.org \
--cc=htejun@gmail.com \
--cc=janjaap@bos.nl \
--cc=jdike@addtoit.com \
--cc=linux-kernel@vger.kernel.org \
--cc=martin.petersen@oracle.com \
--cc=richard@nod.at \
--cc=syzop@vulnscan.org \
--cc=user-mode-linux-devel@lists.sourceforge.net \
--cc=user-mode-linux-user@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.