File: TODO

package info (click to toggle)
ext2resize 1.1.17-3
  • links: PTS
  • area: main
  • in suites: woody
  • size: 772 kB
  • ctags: 678
  • sloc: ansic: 4,595; sh: 389; makefile: 56
file content (69 lines) | stat: -rw-r--r-- 3,037 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
one-time
--------
buffers: lru list, dirty list, clean list, empty list
brelse: leave alone, sync or flush
handle bad blocks in filesystem
  - refuse to move bad blocks
  - if they are after the end of the filesystem when shrinking, simply discard
  - check for bad blocks upon enlarging (Thanks Andrew)
improve hash func and profile it
ext2resize journalling (and detect it when opening)
keep the # of dirty buffers in the buffer cache
live on the edge-mode: no syncing, no journaling
make the block and inode relocator cluster moves. yet another pool?
  - there is a lot of duplicate code right now when calculating the locations
    of the block/inode bitmaps and itable, because of the added complexity of
    the RAID stripe layout.  We try to migrate bitmaps and itable towards the
    "correct" location, as mke2fs would have layed them out on a new fs.  We
    should really be calculating these in advance, and simply re-using them.
progress indicator hooks?
see whether we discard return values (we shouldn't)
  - it would be more clear if we changed all of the return values to have
    0 indicate success, and <0 indicate failure (like kernel and most other
    functions).
signal handler (done in ext2online - only around "remount" command)
when moving metadata: flush each block only once
clean up ext2_block_iterate function
  - make it more modular, add function pointers to callback functions, and
    then use this function to do all blocks per inode iterations
try to allocate blocks for moved inodes in a sensible manner
  - when marking a block to be moved we can specify a target location
  - if there is another block at that location, it will also be moved
  - this saves us from recalculating the metadata locations many times

watch these
-----------
check if all functions are really used
  - commented out some of Lennert's experimental code (journal, tst, mkfs)
check if all mallocs validate return values
do syncing here and there (only in consistent filesystem states)
eliminate failure-sensitiveness from critical paths
general code cleanup
profile pool memory usage
resolve all FIXMEs
sanity checks

misc todo
---------
write some documentation
80-column friendlyness (TODO and source)
regression tests (I do have a few tests that I use before each checkin, but....)
  - see test/testrun.sh for more info (it should probably copy files into fs
    after growing and delete files before shrinking to make tests better)
coding style
make it work on big-endian systems.

maybe once upon a day
---------------------
look at libext2fs
implement adding/deleting inode table blocks (i.e. changing the # of
	inodes in a filesystem). perhaps make this a separate
	utility. especially the consistency guarantee is hard.

for ext3
--------
- do all online inode actions via ioctl (also for ext2 later as well)
- how to keep ext3 online resize "atomic" so we never lose blocks in Bond?
- probably need to do resizing one group at a time, maybe building the
  group metadata (inode table, bitmaps) inside the kernel