Re: [PATCH] rd: Mark ramdisk buffers heads dirty

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Eric W. Biederman
Date: Wednesday, October 17, 2007 - 2:30 pm

Chris Mason <chris.mason@oracle.com> writes:



So the start:
When we write buffers from the buffer cache we clear buffer_dirty
but not PageDirty

So try_to_free_buffers() will mark any page with clean buffer_heads
that is not clean itself clean.

The ramdisk set pages dirty to keep them from being removed from the
page cache, just like ramfs.

Unfortunately when those dirty ramdisk pages get buffers on them and
those buffers all go clean and we are trying to reclaim buffer_heads
we drop those pages from the page cache.   Ouch!

We can fix the ramdisk by setting making certain that buffer_heads
on ramdisk pages stay dirty as well.  The problem is this breaks
filesystems like reiserfs and ext3 that expect to be able to make 
buffer_heads clean sometimes.

There are other ways to solve this for ramdisks, such as changing
where ramdisks are stored.  However fixing the ramdisks this way
still leaves the general problem that there are other paths to the
filesystem metadata buffers, and those other paths cause the code
to be complicated and buggy.

So I'm trying to see if we can untangle this Gordian knot, so the
code because more easily maintainable.  

To make the buffer cache a helper library instead of require
infrastructure, it looks like two things need to happen.
- Move metadata buffer heads off block devices page cache entries, 
- Communicate the mappings of data pages to block device sectors
  in a generic way without buffer heads.

How we ultimately fix the ramdisk tends to depend on how we untangle
the buffer head problem.  Right now the only simple solution is to
suppress try_to_free_buffers, which is a bit ugly.  We can also come
up with a completely separate store for the pages in the buffer cache
but if we wind up moving the metadata buffer heads anyway then that
should not be necessary.

Eric
-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH resend] ramdisk: fix zeroed ramdisk pages on memory ..., Christian Borntraeger, (Mon Oct 15, 1:28 am)
Re: [PATCH resend] ramdisk: fix zeroed ramdisk pages on me ..., Christian Borntraeger, (Mon Oct 15, 2:05 am)
Re: [PATCH resend] ramdisk: fix zeroed ramdisk pages on me ..., Eric W. Biederman, (Mon Oct 15, 11:38 am)
Re: [PATCH resend] ramdisk: fix zeroed ramdisk pages on me ..., Eric W. Biederman, (Mon Oct 15, 3:37 pm)
[PATCH] rd: Preserve the dirty bit in init_page_buffers(), Eric W. Biederman, (Mon Oct 15, 3:40 pm)
[PATCH] rd: Mark ramdisk buffers heads dirty, Eric W. Biederman, (Mon Oct 15, 3:42 pm)
Re: [PATCH resend] ramdisk: fix zeroed ramdisk pages on me ..., Eric W. Biederman, (Mon Oct 15, 8:14 pm)
Re: [PATCH resend] ramdisk: fix zeroed ramdisk pages on me ..., Eric W. Biederman, (Mon Oct 15, 9:57 pm)
[patch][rfc] rewrite ramdisk, Nick Piggin, (Tue Oct 16, 12:47 am)
Re: [patch][rfc] rewrite ramdisk, Jan Engelhardt, (Tue Oct 16, 12:52 am)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Christian Borntraeger, (Tue Oct 16, 12:56 am)
Re: Re: [PATCH] rd: Mark ramdisk buffers heads dirty, rubenjr_22, (Tue Oct 16, 1:05 am)
Re: [patch][rfc] rewrite ramdisk, Nick Piggin, (Tue Oct 16, 1:07 am)
Re: Re: [PATCH] rd: Mark ramdisk buffers heads dirty, rubenjr_22, (Tue Oct 16, 1:13 am)
Re: [patch][rfc] rewrite ramdisk, Jan Engelhardt, (Tue Oct 16, 1:17 am)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Nick Piggin, (Tue Oct 16, 1:19 am)
Re: [patch][rfc] rewrite ramdisk, Nick Piggin, (Tue Oct 16, 1:26 am)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Christian Borntraeger, (Tue Oct 16, 1:48 am)
Re: [patch][rfc] rewrite ramdisk, Jan Engelhardt, (Tue Oct 16, 1:53 am)
Re: [patch][rfc] rewrite ramdisk, Eric W. Biederman, (Tue Oct 16, 2:08 am)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Eric W. Biederman, (Tue Oct 16, 2:22 am)
Re: [PATCH] rd: Preserve the dirty bit in init_page_buffers(), Eric W. Biederman, (Tue Oct 16, 2:35 am)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Eric W. Biederman, (Tue Oct 16, 12:06 pm)
Re: [patch][rfc] rewrite ramdisk, Theodore Tso, (Tue Oct 16, 2:28 pm)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Nick Piggin, (Tue Oct 16, 3:06 pm)
Re: [patch][rfc] rewrite ramdisk, Nick Piggin, (Tue Oct 16, 3:08 pm)
Re: [patch][rfc] rewrite ramdisk, Eric W. Biederman, (Tue Oct 16, 4:48 pm)
Re: [patch][rfc] rewrite ramdisk, Nick Piggin, (Tue Oct 16, 5:28 pm)
Re: [patch][rfc] rewrite ramdisk, Eric W. Biederman, (Tue Oct 16, 6:13 pm)
Re: [patch][rfc] rewrite ramdisk, Nick Piggin, (Tue Oct 16, 6:47 pm)
Re: [patch][rfc] rewrite ramdisk, Eric W. Biederman, (Wed Oct 17, 3:30 am)
Re: [patch][rfc] rewrite ramdisk, Nick Piggin, (Wed Oct 17, 5:49 am)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Christian Borntraeger, (Wed Oct 17, 9:14 am)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Eric W. Biederman, (Wed Oct 17, 10:57 am)
Re: [patch][rfc] rewrite ramdisk, Eric W. Biederman, (Wed Oct 17, 11:45 am)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Chris Mason, (Wed Oct 17, 12:14 pm)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Eric W. Biederman, (Wed Oct 17, 1:29 pm)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Chris Mason, (Wed Oct 17, 1:54 pm)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Eric W. Biederman, (Wed Oct 17, 2:30 pm)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Christian Borntraeger, (Wed Oct 17, 2:48 pm)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Eric W. Biederman, (Wed Oct 17, 3:22 pm)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Chris Mason, (Wed Oct 17, 3:58 pm)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Eric W. Biederman, (Wed Oct 17, 4:28 pm)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Chris Mason, (Wed Oct 17, 5:03 pm)
Re: [patch][rfc] rewrite ramdisk, Nick Piggin, (Wed Oct 17, 6:06 pm)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Eric W. Biederman, (Wed Oct 17, 8:27 pm)
[RFC][PATCH] block: Isolate the buffer cache in it's own m ..., Eric W. Biederman, (Wed Oct 17, 8:59 pm)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Christian Borntraeger, (Thu Oct 18, 2:26 am)
Re: [RFC][PATCH] block: Isolate the buffer cache in it's o ..., Eric W. Biederman, (Fri Oct 19, 2:27 pm)
Re: [RFC][PATCH] block: Isolate the buffer cache in it's o ..., Eric W. Biederman, (Fri Oct 19, 2:35 pm)
Re: [PATCH] rd: Mark ramdisk buffers heads dirty, Eric W. Biederman, (Fri Oct 19, 3:46 pm)
[PATCH] rd: Use a private inode for backing storage, Eric W. Biederman, (Fri Oct 19, 3:51 pm)
Re: [RFC][PATCH] block: Isolate the buffer cache in it's o ..., Eric W. Biederman, (Sat Oct 20, 9:53 pm)
Re: [PATCH] rd: Use a private inode for backing storage, Eric W. Biederman, (Sat Oct 20, 10:10 pm)
Re: [PATCH] rd: Use a private inode for backing storage, Nick Piggin, (Sat Oct 20, 10:24 pm)
Re: [PATCH] rd: Use a private inode for backing storage, Eric W. Biederman, (Sat Oct 20, 11:48 pm)
Re: [RFC][PATCH] block: Isolate the buffer cache in it's o ..., Eric W. Biederman, (Sun Oct 21, 12:09 am)
Re: [PATCH] rd: Use a private inode for backing storage, Christian Borntraeger, (Sun Oct 21, 12:28 am)
Re: [PATCH] rd: Use a private inode for backing storage, Eric W. Biederman, (Sun Oct 21, 1:23 am)
Re: [PATCH] rd: Use a private inode for backing storage, Eric W. Biederman, (Sun Oct 21, 10:56 am)
Re: [PATCH] rd: Use a private inode for backing storage, Eric W. Biederman, (Sun Oct 21, 11:39 am)