NTFS: The big ntfs write(2) rewrite has arrived. We now implement our own
[sfrench/cifs-2.6.git] / fs / ntfs / ChangeLog
index 3b8ff2318085120bb939b5ff0444b3e61a3c8926..03015c7b236cd3fb8b38192ea875d6f2944c8f2f 100644 (file)
@@ -1,16 +1,15 @@
 ToDo/Notes:
        - Find and fix bugs.
-       - In between ntfs_prepare/commit_write, need exclusion between
-         simultaneous file extensions.  This is given to us by holding i_sem
-         on the inode.  The only places in the kernel when a file is resized
-         are prepare/commit write and ntfs_truncate() for both of which i_sem
-         is held.  Just have to be careful in read-/writepage and other helpers
+       - The only places in the kernel where a file is resized are
+         ntfs_file_write*() and ntfs_truncate() for both of which i_sem is
+         held.  Just have to be careful in read-/writepage and other helpers
          not running under i_sem that we play nice...  Also need to be careful
-         with initialized_size extention in ntfs_prepare_write and writepage.
-         UPDATE: The only things that need to be checked are
-         prepare/commit_write as well as the compressed write and the other
-         attribute resize/write cases like index attributes, etc.  For now
-         none of these are implemented so are safe.
+         with initialized_size extension in ntfs_file_write*() and writepage.
+         UPDATE: The only things that need to be checked are the compressed
+         write and the other attribute resize/write cases like index
+         attributes, etc.  For now none of these are implemented so are safe.
+       - Implement filling in of holes in aops.c::ntfs_writepage() and its
+         helpers.
        - Implement mft.c::sync_mft_mirror_umount().  We currently will just
          leave the volume dirty on umount if the final iput(vol->mft_ino)
          causes a write of any mirrored mft records due to the mft mirror
@@ -20,7 +19,7 @@ ToDo/Notes:
        - Enable the code for setting the NT4 compatibility flag when we start
          making NTFS 1.2 specific modifications.
 
-2.1.25-WIP
+2.1.25 - (Almost) fully implement write(2) and truncate(2).
 
        - Change ntfs_map_runlist_nolock(), ntfs_attr_find_vcn_nolock() and
          {__,}ntfs_cluster_free() to also take an optional attribute search
@@ -49,7 +48,12 @@ ToDo/Notes:
          extend the allocation of an attributes.  Optionally, the data size,
          but not the initialized size can be extended, too.
        - Implement fs/ntfs/inode.[hc]::ntfs_truncate().  It only supports
-         uncompressed and unencrypted files.
+         uncompressed and unencrypted files and it never creates sparse files
+         at least for the moment (making a file sparse requires us to modify
+         its directory entries and we do not support directory operations at
+         the moment).  Also, support for highly fragmented files, i.e. ones
+         whose data attribute is split across multiple extents, is severly
+         limited.  When such a case is encountered, EOPNOTSUPP is returned.
        - Enable ATTR_SIZE attribute changes in ntfs_setattr().  This completes
          the initial implementation of file truncation.  Now both open(2)ing
          a file with the O_TRUNC flag and the {,f}truncate(2) system calls
@@ -61,6 +65,16 @@ ToDo/Notes:
          and cond_resched() in the main loop as we could be dirtying a lot of
          pages and this ensures we play nice with the VM and the system as a
          whole.
+       - Implement file operations ->write, ->aio_write, ->writev for regular
+         files.  This replaces the old use of generic_file_write(), et al and
+         the address space operations ->prepare_write and ->commit_write.
+         This means that both sparse and non-sparse (unencrypted and
+         uncompressed) files can now be extended using the normal write(2)
+         code path.  There are two limitations at present and these are that
+         we never create sparse files and that we only have limited support
+         for highly fragmented files, i.e. ones whose data attribute is split
+         across multiple extents.   When such a case is encountered,
+         EOPNOTSUPP is returned.
 
 2.1.24 - Lots of bug fixes and support more clean journal states.