Re: PATCH/RFC: fix 2.5.20 ramdisk

From: Russell King (rmk@arm.linux.org.uk)
Date: Tue Jun 04 2002 - 03:45:32 EST


On Tue, Jun 04, 2002 at 10:35:25AM +0200, Jens Axboe wrote:
> On Mon, Jun 03 2002, Russell King wrote:
> > 2.5.20 seems to be incapable of executing binaries in a ramdisk-based
> > root filesystem. The ramdisk in question is an ext2fs, with a 1K
> > block size loaded via the compressed ramdisk loader in do_mounts().
> >
> > It appears that, in the case of a 1K block sized filesystem, we attempt
> > to read two 512-byte sectors into a BIO vector. The first one is copied
> > into the first 512 bytes. The second sector, however, is copied over
> > the first 512 bytes. Obviously not what we really want.
>
> Looks good.

Ok, rev. 2, slightly cleaned up:

--- orig/drivers/block/rd.c Wed May 29 21:40:26 2002
+++ linux/drivers/block/rd.c Tue Jun 4 09:44:21 2002
@@ -144,6 +144,7 @@
 {
         struct address_space * mapping;
         unsigned long index;
+ unsigned int vec_offset;
         int offset, size, err;
 
         err = 0;
@@ -152,6 +153,7 @@
         index = sector >> (PAGE_CACHE_SHIFT - 9);
         offset = (sector << 9) & ~PAGE_CACHE_MASK;
         size = vec->bv_len;
+ vec_offset = vec->bv_offset;
 
         do {
                 int count;
@@ -186,13 +188,14 @@
                 if (rw == READ) {
                         src = kmap(page);
                         src += offset;
- dst = kmap(vec->bv_page) + vec->bv_offset;
+ dst = kmap(vec->bv_page) + vec_offset;
                 } else {
                         dst = kmap(page);
                         dst += offset;
- src = kmap(vec->bv_page) + vec->bv_offset;
+ src = kmap(vec->bv_page) + vec_offset;
                 }
                 offset = 0;
+ vec_offset += count;
 
                 memcpy(dst, src, count);
 

-- 
Russell King (rmk@arm.linux.org.uk)                The developer of ARM Linux
             http://www.arm.linux.org.uk/personal/aboutme.html

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Fri Jun 07 2002 - 22:00:19 EST