Messages in this thread | | | Date | Tue, 16 Feb 1999 12:44:55 -0500 (EST) | From | Alexander Viro <> | Subject | Re: fsync on large files |
| |
On Tue, 16 Feb 1999, Alan Cox wrote:
> > in <linux/list.h> (as opposed to the braindamaged BSD compatibility macros > > in <linux/lists.h>), and it's fairly trivial to just keep each dirty block > > on two dirty lists (one inode-specific, one global - you'd still use the > > global one for normal write-outs). > > > > This works for ext2, but it doesn't work with filesystems (most notably > > FAT filesystems, and possibly some B-tree based filesystems) where > > metadata might be shared by multiple files, so a block might have to be > > on multiple inode dirty lists. I had thought about using a linked list > > architecture and threading buffer_head structures onto inode dirty > > linked lists, but I discarded that plan since it wouldn't work for all > > filesystems. > > As a percentage the number of 'shared blocks' is low. So just keep a single > 'might be shared list' and write that list out too.
That really starts to resemble *BSD buffer cache architecture - they just index buffer cache by inode + offset instead of device + offset, assign negative offsets to metadata (on normal filesystems) and for FAT they keep metadata assigned to the device itself.
- 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/
| |