diff options
Diffstat (limited to 'fs/ntfs/ChangeLog')
-rw-r--r-- | fs/ntfs/ChangeLog | 85 |
1 files changed, 72 insertions, 13 deletions
diff --git a/fs/ntfs/ChangeLog b/fs/ntfs/ChangeLog index de58579a1d0e..50a7749cfca1 100644 --- a/fs/ntfs/ChangeLog +++ b/fs/ntfs/ChangeLog | |||
@@ -1,18 +1,15 @@ | |||
1 | ToDo/Notes: | 1 | ToDo/Notes: |
2 | - Find and fix bugs. | 2 | - Find and fix bugs. |
3 | - In between ntfs_prepare/commit_write, need exclusion between | 3 | - The only places in the kernel where a file is resized are |
4 | simultaneous file extensions. This is given to us by holding i_sem | 4 | ntfs_file_write*() and ntfs_truncate() for both of which i_sem is |
5 | on the inode. The only places in the kernel when a file is resized | 5 | held. Just have to be careful in read-/writepage and other helpers |
6 | are prepare/commit write and truncate for both of which i_sem is | 6 | not running under i_sem that we play nice... Also need to be careful |
7 | held. Just have to be careful in readpage/writepage and all other | 7 | with initialized_size extension in ntfs_file_write*() and writepage. |
8 | helpers not running under i_sem that we play nice... | 8 | UPDATE: The only things that need to be checked are the compressed |
9 | Also need to be careful with initialized_size extention in | 9 | write and the other attribute resize/write cases like index |
10 | ntfs_prepare_write. Basically, just be _very_ careful in this code... | 10 | attributes, etc. For now none of these are implemented so are safe. |
11 | UPDATE: The only things that need to be checked are read/writepage | 11 | - Implement filling in of holes in aops.c::ntfs_writepage() and its |
12 | which do not hold i_sem. Note writepage cannot change i_size but it | 12 | helpers. |
13 | needs to cope with a concurrent i_size change, just like readpage. | ||
14 | Also both need to cope with concurrent changes to the other sizes, | ||
15 | i.e. initialized/allocated/compressed size, as well. | ||
16 | - Implement mft.c::sync_mft_mirror_umount(). We currently will just | 13 | - Implement mft.c::sync_mft_mirror_umount(). We currently will just |
17 | leave the volume dirty on umount if the final iput(vol->mft_ino) | 14 | leave the volume dirty on umount if the final iput(vol->mft_ino) |
18 | causes a write of any mirrored mft records due to the mft mirror | 15 | causes a write of any mirrored mft records due to the mft mirror |
@@ -22,6 +19,68 @@ ToDo/Notes: | |||
22 | - Enable the code for setting the NT4 compatibility flag when we start | 19 | - Enable the code for setting the NT4 compatibility flag when we start |
23 | making NTFS 1.2 specific modifications. | 20 | making NTFS 1.2 specific modifications. |
24 | 21 | ||
22 | 2.1.25 - (Almost) fully implement write(2) and truncate(2). | ||
23 | |||
24 | - Change ntfs_map_runlist_nolock(), ntfs_attr_find_vcn_nolock() and | ||
25 | {__,}ntfs_cluster_free() to also take an optional attribute search | ||
26 | context as argument. This allows calling these functions with the | ||
27 | mft record mapped. Update all callers. | ||
28 | - Fix potential deadlock in ntfs_mft_data_extend_allocation_nolock() | ||
29 | error handling by passing in the active search context when calling | ||
30 | ntfs_cluster_free(). | ||
31 | - Change ntfs_cluster_alloc() to take an extra boolean parameter | ||
32 | specifying whether the cluster are being allocated to extend an | ||
33 | attribute or to fill a hole. | ||
34 | - Change ntfs_attr_make_non_resident() to call ntfs_cluster_alloc() | ||
35 | with @is_extension set to TRUE and remove the runlist terminator | ||
36 | fixup code as this is now done by ntfs_cluster_alloc(). | ||
37 | - Change ntfs_attr_make_non_resident to take the attribute value size | ||
38 | as an extra parameter. This is needed since we need to know the size | ||
39 | before we can map the mft record and our callers always know it. The | ||
40 | reason we cannot simply read the size from the vfs inode i_size is | ||
41 | that this is not necessarily uptodate. This happens when | ||
42 | ntfs_attr_make_non_resident() is called in the ->truncate call path. | ||
43 | - Fix ntfs_attr_make_non_resident() to update the vfs inode i_blocks | ||
44 | which is zero for a resident attribute but should no longer be zero | ||
45 | once the attribute is non-resident as it then has real clusters | ||
46 | allocated. | ||
47 | - Add fs/ntfs/attrib.[hc]::ntfs_attr_extend_allocation(), a function to | ||
48 | extend the allocation of an attributes. Optionally, the data size, | ||
49 | but not the initialized size can be extended, too. | ||
50 | - Implement fs/ntfs/inode.[hc]::ntfs_truncate(). It only supports | ||
51 | uncompressed and unencrypted files and it never creates sparse files | ||
52 | at least for the moment (making a file sparse requires us to modify | ||
53 | its directory entries and we do not support directory operations at | ||
54 | the moment). Also, support for highly fragmented files, i.e. ones | ||
55 | whose data attribute is split across multiple extents, is severly | ||
56 | limited. When such a case is encountered, EOPNOTSUPP is returned. | ||
57 | - Enable ATTR_SIZE attribute changes in ntfs_setattr(). This completes | ||
58 | the initial implementation of file truncation. Now both open(2)ing | ||
59 | a file with the O_TRUNC flag and the {,f}truncate(2) system calls | ||
60 | will resize a file appropriately. The limitations are that only | ||
61 | uncompressed and unencrypted files are supported. Also, there is | ||
62 | only very limited support for highly fragmented files (the ones whose | ||
63 | $DATA attribute is split into multiple attribute extents). | ||
64 | - In attrib.c::ntfs_attr_set() call balance_dirty_pages_ratelimited() | ||
65 | and cond_resched() in the main loop as we could be dirtying a lot of | ||
66 | pages and this ensures we play nice with the VM and the system as a | ||
67 | whole. | ||
68 | - Implement file operations ->write, ->aio_write, ->writev for regular | ||
69 | files. This replaces the old use of generic_file_write(), et al and | ||
70 | the address space operations ->prepare_write and ->commit_write. | ||
71 | This means that both sparse and non-sparse (unencrypted and | ||
72 | uncompressed) files can now be extended using the normal write(2) | ||
73 | code path. There are two limitations at present and these are that | ||
74 | we never create sparse files and that we only have limited support | ||
75 | for highly fragmented files, i.e. ones whose data attribute is split | ||
76 | across multiple extents. When such a case is encountered, | ||
77 | EOPNOTSUPP is returned. | ||
78 | - $EA attributes can be both resident and non-resident. | ||
79 | - Use %z for size_t to fix compilation warnings. (Andrew Morton) | ||
80 | - Fix compilation warnings with gcc-4.0.2 on SUSE 10.0. | ||
81 | - Document extended attribute ($EA) NEED_EA flag. (Based on libntfs | ||
82 | patch by Yura Pakhuchiy.) | ||
83 | |||
25 | 2.1.24 - Lots of bug fixes and support more clean journal states. | 84 | 2.1.24 - Lots of bug fixes and support more clean journal states. |
26 | 85 | ||
27 | - Support journals ($LogFile) which have been modified by chkdsk. This | 86 | - Support journals ($LogFile) which have been modified by chkdsk. This |