summaryrefslogtreecommitdiffstats
path: root/drivers/staging/exfat/TODO
blob: a283ce534cf47394a20626278d1be1fd87c5611c (plain)
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
A laundry list of things that need looking at, most of which will
require more work than the average checkpatch cleanup...

Note that some of these entries may not be bugs - they're things
that need to be looked at, and *possibly* fixed.

Clean up the ffsCamelCase function names.

Fix (thing)->flags to not use magic numbers - multiple offenders

Sort out all the s32/u32/u8 nonsense - most of these should be plain int.

exfat_core.c - ffsReadFile - the goto err_out seem to leak a brelse().
same for ffsWriteFile.

All the calls to fs_sync() need to be looked at, particularly in the
context of EXFAT_DELAYED_SYNC. Currently, if that's defined, we only
flush to disk when sync() gets called.  We should be doing at least
metadata flushes at appropriate times.

ffsTruncateFile -  if (old_size <= new_size) {
That doesn't look right. How did it ever work? Are they relying on lazy
block allocation when actual writes happen? If nothing else, it never
does the 'fid->size = new_size' and do the inode update....

ffsSetAttr() is just dangling in the breeze, not wired up at all...

Convert global mutexes to a per-superblock mutex.

Right now, we load exactly one UTF-8 table. Check to see
if that plays nice with different codepage and iocharset values
for simultanous mounts of different devices

exfat_rmdir() checks for -EBUSY but ffsRemoveDir() doesn't return it.
In fact, there's a complete lack of -EBUSY testing anywhere.

There's probably a few missing checks for -EEXIST

check return codes of sync_dirty_buffer()

Why is remove_file doing a num_entries++??

Double check a lot of can't-happen parameter checks (for null pointers for
things that have only one call site and can't pass a null, etc).

All the DEBUG stuff can probably be tossed, including the ioctl(). Either
that, or convert to a proper fault-injection system.

exfat_remount does exactly one thing.  Fix to actually deal with remount
options, particularly handling R/O correctly.  For that matter, allow
R/O mounts in the first place.

Figure out why the VFAT code used multi_sector_(read|write) but the
exfat code doesn't use it. The difference matters on SSDs with wear leveling.

exfat_fat_sync(), exfat_buf_sync(), and sync_alloc_bitmap()
aren't called anyplace....

Create helper function for exfat_set_entry_time() and exfat_set_entry_type()
because it's sort of ugly to be calling the same functionn directly and
other code calling through the fs_func struc ponters...

clean up the remaining vol_type checks, which are of two types:
some are ?: operators with magic numbers, and the rest are places
where we're doing stuff with '.' and '..'.

Patches to:
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>
	Valdis Kletnieks <valdis.kletnieks@vt.edu>