On Thu 20-11-08 12:05:55, Jörn Engel wrote: > On Wed, 19 November 2008 21:32:42 +0100, Jan Kara wrote: > > > > I have a problem in UDF so I thought I'll post it here if someone has a > > good idea how to solve it. > > UDF does preallocation on directories (on files a well, but that is not a > > problem). Now this helps against directory fragmentation but there is an > > issue with it: When to drop this preallocation? Currently it is done in > > udf_clear_inode() which has two problems: > > 1) udf_clear_inode() is really called to late to do anything like freeing > > space from inode and UDF has to play some nasty tricks (like > > explicitely syncing inode, calling invalidate_inode_buffers() once > > more) to make everything work. Using udf_drop_inode() would be much > > better but that is called under i_lock so it's not really usable > > (unless I'd drop i_lock in it but then it would even nastier). > > 2) When you create lots of directories, they use quite some additional > > space for preallocation and there's not really a got way how to get rid > > of preallocated blocks than dropping dcache or umount + mount the > > filesystem. > > > > So after all I'm thinking whether directory preallocation is really worth > > the trouble. But before I go and rip it I'd like to check whether someone > > does not have some clever idea :). > > Problem 2 has lru written all over, don't you think? Problem 1 is > similar to something I'm debugging this very moment. With some luck my > solution might work for you as well. Hmm, yes, I was thinking of implementing something like LRU. I just thought it might be a bit overkill. But maybe not... > However, I don't see a big difference between files and directories yet. > Maybe because there shouldn't be, or maybe because I've been missing > something critical. Could you elaborate on that? For files I use ->release() callback to drop preallocation. So preallocation is dropped on last close of a file which is not completely optimal but generally good enough. Thanks for your ideas. Honza -- Jan Kara <jack@xxxxxxx> SUSE Labs, CR -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html