Messages in this thread | | | Date | Tue, 18 May 1999 20:20:36 +0200 | From | Manfred Spraul <> | Subject | Re: ext2 question |
| |
"Theodore Y. Ts'o" wrote: > > Huh? Can you give me a pointer to the Unix 95 specs which you're > referring to?
I was talking about Windows 95. Windows 95 has a 'large' kernel, e.g. swappable text segments for kernel modules, many kernel data structures are allocated from pageable memory, and the synchonization is (mostly) based on semaphores. This means that the mmap() and swap-codepath must be able to page in/out without using any other services.
> Now you need to somehow convert from an extent system to > an indirect block system, which means blocking as you frantically try to > create all of the necessary indirect and doubly indirect and triply > indirect blocks.
No: use a mixed system: currently: the first 12 blocks direct, then 256 blocks indirect, then 65536 blocks indirect, etc. you replace the constants 12, 256 with 2 variables, everything else remains unchanged.
I though that: You add 2 new flags to inode->i_flags: - if 'direct is extent' set: the extents are stored in the inode. During iget(): add the len fields; store the result as DIRECT_LEN in the memory inode. if the flag is not set: DIRECT_LEN=12 - 'indirect is extent' set: as I explained, the number of blocks that are stored in the indirect block in contained in the disk inode. (INDIRECT_LEN) otherwise: INDIRECT_LEN=256
all you have to do is make a few modification to ext2_bmap() - if (blocknum < 12) + if (blocknum < DIRECT_LEN) access direct and - blocknum -= 12; + blocknum -= DIRECT_LEN; and - if (blocknum < 256) + if (blocknum < INDIRECT_LEN) access indirect etc.
Overall, the required changes should be: - every inode has third flag: 'extents possible': (can be implemented as memory-only or stored on the disk)
- ext2_alloc_block: if 'extents possible' & not spare: add an extent; otherwise: clear 'extents possible', start a new block group (i.e. switch from direct to indirect or from indirect to double indirect); use the current system.
- ext2_bmap: implement as explained above.
-- Manfred
- 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/
| |