[PATCH] JFFS2 kernel panics fixup on Sibley

zhao, forrest forrest.zhao at intel.com
Tue Dec 27 21:00:58 EST 2005


On Tue, 2005-12-27 at 16:07 +0300, Alexey, Korolev wrote:

> ======================================= 
>  
> diff -aur c/fs/jffs2/nodelist.c b/fs/jffs2/nodelist.c
> --- c/fs/jffs2/nodelist.c 2005-12-23 16:43:09.000000000 +0300
> +++ b/fs/jffs2/nodelist.c 2005-12-23 16:48:43.000000000 +0300
> @@ -436,7 +436,7 @@
>    * adding and jffs2_flash_read_end() interface. */
>   if (c->mtd->point) {
>    err = c->mtd->point(c->mtd, ofs, len, &retlen, &buffer);
> -  if (!err && retlen < tn->csize) {
> +  if (!err && retlen < len) {
>     JFFS2_WARNING("MTD point returned len too short: %u instead of 
> %u.\n", retlen, tn->csize);
>     c->mtd->unpoint(c->mtd, buffer, ofs, len);
>    } else if (err)
> diff -aur c/fs/jffs2/scan.c b/fs/jffs2/scan.c
> --- c/fs/jffs2/scan.c 2005-12-23 16:43:09.000000000 +0300
> +++ b/fs/jffs2/scan.c 2005-12-23 16:48:43.000000000 +0300
> @@ -454,7 +454,7 @@
>     buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
>     D1(printk(KERN_DEBUG "Fewer than %zd bytes (node header) left to end 
> of buf. Reading 0x%x at 0x%08x\n",
>        sizeof(struct jffs2_unknown_node), buf_len, ofs));
> -   err = jffs2_flash_read_safe(c, buf_ofs, buf_len, buf);
> +   err = jffs2_flash_read_safe(c, ofs, buf_len, buf);
>     if (err)
>      return err;
>     buf_ofs = ofs;
> @@ -511,7 +511,7 @@
>      break;
>     }
>     D1(printk(KERN_DEBUG "Reading another 0x%x at 0x%08x\n", buf_len, ofs));
> -   err = jffs2_flash_read_safe(c, buf_ofs, buf_len, buf);
> +   err = jffs2_flash_read_safe(c, ofs, buf_len, buf);
>     if (err)
>      return err;
>     buf_ofs = ofs;
> @@ -587,7 +587,7 @@
>      buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - 
> ofs);
>      D1(printk(KERN_DEBUG "Fewer than %zd bytes (inode node) left to end 
> of buf. Reading 0x%x at 0x%08x\n",
>         sizeof(struct jffs2_raw_inode), buf_len, ofs));
> -    err = jffs2_flash_read_safe(c, buf_ofs, buf_len, buf);
> +    err = jffs2_flash_read_safe(c, ofs, buf_len, buf);
>      if (err)
>       return err;
>      buf_ofs = ofs;
> @@ -603,7 +603,7 @@
>      buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - 
> ofs);
>      D1(printk(KERN_DEBUG "Fewer than %d bytes (dirent node) left to end 
> of buf. Reading 0x%x at 0x%08x\n",
>         je32_to_cpu(node->totlen), buf_len, ofs));
> -    err = jffs2_flash_read_safe(c, buf_ofs, buf_len, buf);
> +    err = jffs2_flash_read_safe(c, ofs, buf_len, buf);
>      if (err)
>       return err;
>      buf_ofs = ofs;
> @@ -650,7 +650,7 @@
>     } else {
>      if (buf_ofs + buf_len < ofs + je32_to_cpu(node->totlen)) {
>       buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - 
> ofs);
> -     err = jffs2_flash_read_safe(c, buf_ofs, buf_len, buf);
> +     err = jffs2_flash_read_safe(c, ofs, buf_len, buf);
>       if (err)
>        return err;
>       buf_ofs = ofs;

Artem,

I reviewed the part of this patch for EBH, the above remaining
part need your review before we could check in the patch to CVS.

Alexey,

I don't have a Sibley flash at hand, so didn't do intensive
test for it. Thank you for the fix.

Thanks,
Forrest






More information about the linux-mtd mailing list