public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Patch (repost): cramfs memory corruption fix
@ 2001-01-07  6:41 Adam J. Richter
  2001-01-07 13:53 ` Alan Cox
  2001-01-08  3:46 ` Linus Torvalds
  0 siblings, 2 replies; 23+ messages in thread
From: Adam J. Richter @ 2001-01-07  6:41 UTC (permalink / raw)
  To: parsley; +Cc: linux-kernel, torvalds

[-- Attachment #1: Type: text/plain, Size: 1568 bytes --]

>From: "David L. Parsley" <parsley@roanoke.edu>
>
>Using root=/dev/ram0 and a cramfs initrd gives me 'wrong magic' when it
>tries to boot.  Even more bizarre, if cramfs is compiled in the kernel
>when I use a romfs root, it says 'wrong magic' then mounts the romfs but
>can't find init.  If I take cramfs out of the kernel, the romfs mounts &
>init runs fine.  I just saw this with ac3.
>
>ramfs croaks with 'kernel BUG in filemap.c line 2559' anytime I make a
>file in ac2 and ac3.  Works fine in 2.4.0 vanilla.  Should be quite
>repeatable...

	This sounds like a bug that I posted a fix for a long time ago.
cramfs calls bforget on the superblock area, destroying that block of
the ramdisk, even when the ramdisk does not contain a cramfs file system.
Normally, bforget is called on block that really can be trashed,
such as blocks release by truncate or unlink.  If it worked for
you before, you were just getting lucky.  Here is the patch.

	Linus, please consider applying this.  Thank you.

	By the way, the other approach to fixing this problem would
be to change bforget not to trash blocks marked with BH_Protected
(I think that is just ramdisk blocks), but that would waste memory,
because we really can release blocks from things like truncating
or unlinking files.

-- 
Adam J. Richter     __     ______________   4880 Stevens Creek Blvd, Suite 104
adam@yggdrasil.com     \ /                  San Jose, California 95129-1034
+1 408 261-6630         | g g d r a s i l   United States of America
fax +1 408 261-6631      "Free Software For The Rest Of Us."

[-- Attachment #2: diffs --]
[-- Type: text/plain, Size: 353 bytes --]

--- /tmp/adam/linux-2.4.0/fs/cramfs/inode.c	Fri Dec 29 14:07:57 2000
+++ linux/fs/cramfs/inode.c	Sat Dec 30 02:12:06 2000
@@ -138,7 +138,7 @@
 		struct buffer_head * bh = bh_array[i];
 		if (bh) {
 			memcpy(data, bh->b_data, PAGE_CACHE_SIZE);
-			bforget(bh);
+			brelse(bh);
 		} else
 			memset(data, 0, PAGE_CACHE_SIZE);
 		data += PAGE_CACHE_SIZE;

^ permalink raw reply	[flat|nested] 23+ messages in thread
* Re: [PATCH] one-liner fix for bforget() honoring BH_Protected; was: Re: Patch (repost): cramfs memory corruption fix
@ 2001-01-11  3:08 Adam J. Richter
  0 siblings, 0 replies; 23+ messages in thread
From: Adam J. Richter @ 2001-01-11  3:08 UTC (permalink / raw)
  To: parsley, torvalds; +Cc: linux-kernel

>From: "David L. Parsley" <parsley@linuxjedi.org>

>Linus Torvalds wrote:

>> On Sat, 6 Jan 2001, Adam J. Richter wrote:
>> >
>> >       This sounds like a bug that I posted a fix for a long time ago.
>> > cramfs calls bforget on the superblock area, destroying that block of
>> > the ramdisk, even when the ramdisk does not contain a cramfs file system.
>> > Normally, bforget is called on block that really can be trashed,
>> > such as blocks release by truncate or unlink.
>> 
>> I'd really prefer just not letting bforget() touch BH_Protected buffers.
>> bforget() is also used by other things than unlink/truncate: it's used by
>> various partition codes etc, and it's used by the raid logic.

>Yup, I backed out Adam's one-liner in favor of the attached one-liner. 
>Tested on 2.4.0, but should patch cleanly to just about anything. ;-)

	Applying Linus's patch is fine, but I think my patch should also
be applied (in addition), although for a less important reason.  The
bforget in cramfs is going to force unnecessary device IO if cramfs
is in the list of file systems that you are trying to detect when
mounting a file system from a physical device.

Adam J. Richter     __     ______________   4880 Stevens Creek Blvd, Suite 104
adam@yggdrasil.com     \ /                  San Jose, California 95129-1034
+1 408 261-6630         | g g d r a s i l   United States of America
fax +1 408 261-6631      "Free Software For The Rest Of Us."
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 23+ messages in thread

end of thread, other threads:[~2001-01-11  4:23 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-01-07  6:41 Patch (repost): cramfs memory corruption fix Adam J. Richter
2001-01-07 13:53 ` Alan Cox
2001-01-07 19:26   ` Linus Torvalds
2001-01-07 19:42     ` Alan Cox
2001-01-07 19:56       ` Linus Torvalds
2001-01-07 21:11         ` Rik van Riel
2001-01-07 21:20           ` Alan Cox
2001-01-08  6:56           ` Eric W. Biederman
2001-01-07 21:54         ` Chris Wedgwood
2001-01-08 13:37         ` Christoph Rohland
2001-01-08 14:19           ` Christoph Hellwig
2001-01-08 14:43             ` Christoph Rohland
2001-01-08 14:42           ` Alan Cox
2001-01-08 14:49             ` Christoph Rohland
2001-01-07 20:39       ` David L. Parsley
2001-01-08 18:27         ` Linus Torvalds
2001-01-08  3:46 ` Linus Torvalds
2001-01-08 13:11   ` David Woodhouse
2001-01-08 12:30     ` Shane Nay
2001-01-08 14:34     ` David Woodhouse
2001-01-10 23:30   ` [PATCH] one-liner fix for bforget() honoring BH_Protected; was: " David L. Parsley
2001-01-11  4:23     ` Linus Torvalds
  -- strict thread matches above, loose matches on Subject: below --
2001-01-11  3:08 Adam J. Richter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox