Re: [RFC][PATCH] ChunkFS: fs fission for faster fsck

Jan Kara
2007-04-26T08:47:42Z

> On Wed, Apr 25, 2007 at 08:54:34PM +1000, David Chinner wrote:
> > On Tue, Apr 24, 2007 at 04:53:11PM -0500, Amit Gud wrote:
> > > ---------- ----------
> > > | cnode 0 |---------->| cnode 0 |----------> to another cnode or NULL
> > > ---------- ----------
> > > | cnode 1 |----- | cnode 1 |-----
> > > ---------- | ---------- |
> > > | cnode 2 |-- | | cnode 2 |-- |
> > > ---------- | | ---------- | |
> > > | cnode 3 | | | | cnode 3 | | |
> > > ---------- | | ---------- | |
> > > | | | | | |
> > >
> > > inodes inodes or NULL
> >
> > How do you recover if fsfuzzer takes out a cnode in the chain? The
> > chunk is marked clean, but clearly corrupted and needs fixing and
> > you don't know what it was pointing at. Hence you have a pointer to
> > a trashed cnode *somewhere* that you need to find and fix, and a
> > bunch of orphaned cnodes that nobody points to *somewhere else* in
> > the filesystem that you have to find. That's a full scan fsck case,
> > isn't?
>
> Excellent question. This is one of the trickier aspects of chunkfs -
> the orphan inode problem (tricky, but solvable). The problem is what
> if you smash/lose/corrupt an inode in one chunk that has a
> continuation inode in another chunk? A back pointer does you no good
> if the back pointer is corrupted.
>
> What you do is keep tabs on whether you see damage that looks like
> this has occurred - e.g., inode use/free counts wrong, you had to zero
> a corrupted inode - and when this happens, you do a scan of all
> continuation inodes in chunks that have links to the corrupted chunk.
> What you need to make this go fast is (1) a pre-made list of which
> chunks have links with which other chunks, (2) a fast way to read all
> of the continuation inodes in a chunk (ignoring chunk-local inodes).
> This stage is O(fs size) approximately, but it should be quite swift.
Do I get it right that you just have in each cnode a pointer to the
previous & next cnode? But then if two consecutive cnodes get corrupted,
you have no way to connect the chain, do you? If each cnode contained
some unique identifier of the file and a number identifying position of
cnode, then there would be at least some way (through expensive) to
link them together correctly...

Honza
--
Jan Kara <jack@suse.cz>
SuSE CR Labs