So when you use maxfiles to increase the number of inodes, both
the inode file and the inode-map file need to be grown?
Yep.
I noticed that deleting a single 2GB file can take several seconds of 100% CPU usage on an F230. Is this simply because the filer has to work its way down 6 or 7 layers of inode indirect blocks (by my calculations) and gathering up the half million or so 4K blocks?
Yep again. There's just lots of indirect blocks to clear, and blkmap entries to update.
Files up to 64 bytes fit in the inode itself. Files up to 64K use the 64 bytes in the inode as 16 direct pointers (16*4K = 64K). Files up to 64M contain 16 singly indirect pointers (16*1024*4K = 64M). And with 16 doubly indirect pointers, you can get up to 64G.
Note that this is different from UFS, in which the first 10 pointers are always direct, the 11th is singly indirect, 12th doubly indirect, etc. The WAFL way makes the math easier, it takes less indirection to handle larger files, and file traversal falls out as nicely recursive.
Dave