Re: [patch] [possible race in ext2] Re: how to write get_block?

Stephen C. Tweedie (sct@redhat.com)
Tue, 12 Oct 1999 12:52:11 +0100 (BST)


Hi,

On 11 Oct 1999 17:58:54 -0500, ebiederm+eric@ccr.net (Eric W. Biederman)
said:

> What about adding to the end of ext2_alloc_block:

> bh = get_hash_table(inode->i_dev, result, inode->i_sb->s_blocksize);
> /* something is playing with our fresh block, make them stop. ;-) */
> if (bh) {
> if (buffer_dirty(bh)) {
> mark_buffer_clean(bh);
> wait_on_buffer(bh);
> }
> bforget(bh);
> }

Again, it's a lot of extra unnecessary lookups. The advantages of
having a dirty buffer list include being fast, and also massively
speeding up the metadata update part of fsync.

> Ultimately we really want to have indirect blocks, and
> the directory in the page cache as it should result in
> more uniform code, and faster partial truncates (as well as faster
> syncs).

There is one major potential future problem with moving this to the page
cache. At some point I want to be able to extend the large (64G) memory
support on Intel to include the page cache in high memory. The buffer
cache would still live in low memory. If we do that, then moving
filesystem metadata out of permanently-mapped buffer memory and into the
page cache is going to complicate directory and indirect operations
significantly.

--Stephen

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