Note, a technical ChangeLog aimed at kernel hackers is in fs/ntfs/ChangeLog.
+2.1.23:
+ - Stamp the user space journal, aka transaction log, aka $UsnJrnl, if
+ it is present and active thus telling Windows and applications using
+ the transaction log that changes can have happened on the volume
+ which are not recorded in $UsnJrnl.
+ - Detect the case when Windows has been hibernated (suspended to disk)
+ and if this is the case do not allow (re)mounting read-write to
+ prevent data corruption when you boot back into the suspended
+ Windows session.
+ - Implement extension of resident files using the normal file write
+ code paths, i.e. most very small files can be extended to be a little
+ bit bigger but not by much.
+ - Improve handling of ntfs volumes with errors and strange boot sectors
+ in particular.
+ - Fix various bugs.
2.1.22:
- Improve handling of ntfs volumes with errors.
- Fix various bugs and race conditions.
- Enable the code for setting the NT4 compatibility flag when we start
making NTFS 1.2 specific modifications.
-2.1.23-WIP
+2.1.23 - Implement extension of resident files and make writing safe as well as
+ many bug fixes, cleanups, and enhancements...
- Add printk rate limiting for ntfs_warning() and ntfs_error() when
compiled without debug. This avoids a possible denial of service
attack. Thanks to Carl-Daniel Hailfinger from SuSE for pointing this
out.
- Fix compilation warnings on ia64. (Randy Dunlap)
- - Use i_size_read() in fs/ntfs/attrib.c::ntfs_attr_set().
- - Use i_size_read() in fs/ntfs/logfile.c::ntfs_{check,empty}_logfile().
- - Use i_size_read() once and then use the cached value in
- fs/ntfs/lcnalloc.c::ntfs_cluster_alloc().
- - Use i_size_read() in fs/ntfs/file.c::ntfs_file_open().
+ - Use i_size_{read,write}() instead of reading i_size by hand and cache
+ the value where apropriate.
- Add size_lock to the ntfs_inode structure. This is an rw spinlock
and it locks against access to the inode sizes. Note, ->size_lock
is also accessed from irq context so you must use the _irqsave and
- _irqrestore lock and unlock functions, respectively.
- - Use i_size_read() in fs/ntfs/compress.c at the start of the read and
- use the cached value afterwards. Cache the initialized_size in the
- same way and protect access to the two sizes using the size_lock.
- - Use i_size_read() in fs/ntfs/dir.c once and then use the cached
- value afterwards.
- - Use i_size_read() in fs/ntfs/super.c once and then use the cached
- value afterwards. Cache the initialized_size in the same way and
- protect access to the two sizes using the size_lock.
+ _irqrestore lock and unlock functions, respectively. Protect all
+ accesses to allocated_size, initialized_size, and compressed_size.
- Minor optimization to fs/ntfs/super.c::ntfs_statfs() and its helpers.
- - Use i_size_read() in fs/ntfs/inode.c once and then use the cached
- value afterwards when reading the size of the bitmap inode.
- - Use i_size_{read,write}() in fs/ntfs/{aops.c,mft.c} and protect
- access to the i_size and other size fields using the size_lock.
- Implement extension of resident files in the regular file write code
paths (fs/ntfs/aops.c::ntfs_{prepare,commit}_write()). At present
this only works until the data attribute becomes too big for the mft