> free_inodes() walks the in_use list looking for inodes with a zero
> reference count. it's not clear to me how a zero reference count inode can
> get onto the in_use list, though. i would think that iput is careful
> enough to move inodes whose reference count goes to zero to the unused
> list. all other references to the i_count field in the kernel i can find
Wrong. unused is for freed inodes. Inodes in in_use with zero i_count can
be immediately taken (without read_inode()). It _is_ needed - take it away
and you will get a helluva lot of fs accesses. Think of soft pagefaults.
iput() moves the thing to unused if it is unhashed (and thus can not be
ever found via hash lookup). Real cleaning is left to free_inodes() when
and if necessary.
However, scanning the list is probably an overkill - I'll look if we can
make the things better. In principle, iput() might move the stuff out of
in_use (in separate list), provided that iget()/igrab() would care to put
them back. I'm not on a Linux box right now, so I can't tell whether it
will be enough. I'll check it this evening, OK?
Al
-- Two of my imaginary friends reproduced once ... with negative results. Ben <float@interport.net> in ASR
- 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/