📄 changelog
字号:
- Fix bug in attribute list handling. Actually it is not as much a bug as too much protection in that we were not allowing attribute lists which waste space on disk while Windows XP clearly allows it and in fact creates such attribute lists so our driver was failing. - Update NTFS documentation ready for 2.6 kernel release.2.1.4 - Reduce compiler requirements. - Remove all uses of unnamed structs and unions in the driver to make old and newer gcc versions happy. Makes it a bit uglier IMO but at least people will stop hassling me about it.2.1.3 - Important bug fixes in corner cases. - super.c::parse_ntfs_boot_sector(): Correct the check for 64-bit clusters. (Philipp Thomas) - attrib.c::load_attribute_list(): Fix bug when initialized_size is a multiple of the block_size but not the cluster size. (Szabolcs Szakacsits)2.1.2 - Important bug fixes aleviating the hangs in statfs. - Fix buggy free cluster and free inode determination logic.2.1.1 - Minor updates. - Add handling for initialized_size != data_size in compressed files. - Reduce function local stack usage from 0x3d4 bytes to just noise in fs/ntfs/upcase.c. (Randy Dunlap) - Remove compiler warnings for newer gcc. - Pages are no longer kmapped by mm/filemap.c::generic_file_write() around calls to ->{prepare,commit}_write. Adapt NTFS appropriately in fs/ntfs/aops.c::ntfs_prepare_nonresident_write() by using kmap_atomic(KM_USER0).2.1.0 - First steps towards write support: implement file overwrite. - Add configuration option for developmental write support with an appropriately scary configuration help text. - Initial implementation of fs/ntfs/aops.c::ntfs_writepage() and its helper fs/ntfs/aops.c::ntfs_write_block(). This enables mmap(2) based overwriting of existing files on ntfs. Note: Resident files are only written into memory, and not written out to disk at present, so avoid writing to files smaller than about 1kiB. - Initial implementation of fs/ntfs/aops.c::ntfs_prepare_write(), its helper fs/ntfs/aops.c::ntfs_prepare_nonresident_write() and their counterparts, fs/ntfs/aops.c::ntfs_commit_write(), and fs/ntfs/aops.c::ntfs_commit_nonresident_write(), respectively. Also, add generic_file_write() to the ntfs file operations (fs/ntfs/file.c). This enables write(2) based overwriting of existing files on ntfs. Note: As with mmap(2) based overwriting, resident files are only written into memory, and not written out to disk at present, so avoid writing to files smaller than about 1kiB. - Implement ->truncate (fs/ntfs/inode.c::ntfs_truncate()) and ->setattr() (fs/ntfs/inode.c::ntfs_setattr()) inode operations for files with the purpose of intercepting and aborting all i_size changes which we do not support yet. ntfs_truncate() actually only emits a warning message but AFAICS our interception of i_size changes elsewhere means ntfs_truncate() never gets called for i_size changes. It is only called from generic_file_write() when we fail in ntfs_prepare_{,nonresident_}write() in order to discard any instantiated buffers beyond i_size. Thus i_size is not actually changed so our warning message is enough. Unfortunately it is not possible to easily determine if i_size is being changed or not hence we just emit an appropriately worded error message.2.0.25 - Small bug fixes and cleanups. - Unlock the page in an out of memory error code path in fs/ntfs/aops.c::ntfs_read_block(). - If fs/ntfs/aops.c::ntfs_read_page() is called on an uptodate page, just unlock the page and return. (This can happen due to ->writepage clearing PageUptodate() during write out of MstProtected() attributes. - Remove leaked write code again.2.0.24 - Cleanups. - Treat BUG_ON() as ASSERT() not VERIFY(), i.e. do not use side effects inside BUG_ON(). (Adam J. Richter) - Split logical OR expressions inside BUG_ON() into individual BUG_ON() calls for improved debugging. (Adam J. Richter) - Add errors flag to the ntfs volume state, accessed via NVol{,Set,Clear}Errors(vol). - Do not allow read-write remounts of read-only volumes with errors. - Clarify comment for ntfs file operation sendfile which was added by Christoph Hellwig a while ago (just using generic_file_sendfile()) to say that ntfs ->sendfile is only used for the case where the source data is on the ntfs partition and the destination is somewhere else, i.e. nothing we need to concern ourselves with. - Add generic_file_write() as our ntfs file write operation.2.0.23 - Major bug fixes (races, deadlocks, non-i386 architectures). - Massive internal locking changes to mft record locking. Fixes lock recursion and replaces the mrec_lock read/write semaphore with a mutex. Also removes the now superfluous mft_count. This fixes several race conditions and deadlocks, especially in the future write code. - Fix ntfs over loopback for compressed files by adding an optimization barrier. (gcc was screwing up otherwise ?) - Miscellaneous cleanups all over the code and a fix or two in error handling code paths. Thanks go to Christoph Hellwig for pointing out the following two: - Remove now unused function fs/ntfs/malloc.h::vmalloc_nofs(). - Fix ntfs_free() for ia64 and parisc by checking for VMALLOC_END, too.2.0.22 - Cleanups, mainly to ntfs_readdir(), and use C99 initializers. - Change fs/ntfs/dir.c::ntfs_reddir() to only read/write ->f_pos once at entry/exit respectively. - Use C99 initializers for structures. - Remove unused variable blocks from fs/ntfs/aops.c::ntfs_read_block().2.0.21 - Check for, and refuse to work with too large files/directories/volumes. - Limit volume size at mount time to 2TiB on architectures where unsigned long is 32-bits (fs/ntfs/super.c::parse_ntfs_boot_sector()). This is the most we can do without overflowing the 32-bit limit of the block device size imposed on us by sb_bread() and sb_getblk() for the time being. - Limit file/directory size at open() time to 16TiB on architectures where unsigned long is 32-bits (fs/ntfs/file.c::ntfs_file_open() and fs/ntfs/dir.c::ntfs_dir_open()). This is the most we can do without overflowing the page cache page index.2.0.20 - Support non-resident directory index bitmaps, fix page leak in readdir. - Move the directory index bitmap to use an attribute inode instead of having special fields for it inside the ntfs inode structure. This means that the index bitmaps now use the page cache for i/o, too, and also as a side effect we get support for non-resident index bitmaps for free. - Simplify/cleanup error handling in fs/ntfs/dir.c::ntfs_readdir() and fix a page leak that manifested itself in some cases. - Add fs/ntfs/inode.c::ntfs_put_inode(), which we need to release the index bitmap inode on the final iput().2.0.19 - Fix race condition, improvements, and optimizations in i/o interface. - Apply block optimization added to fs/ntfs/aops.c::ntfs_read_block() to fs/ntfs/compress.c::ntfs_file_read_compressed_block() as well. - Drop the "file" from ntfs_file_read_compressed_block(). - Rename fs/ntfs/aops.c::ntfs_enb_buffer_read_async() to ntfs_end_buffer_async_read() (more like the fs/buffer.c counterpart). - Update ntfs_end_buffer_async_read() with the improved logic from its updated counterpart fs/buffer.c::end_buffer_async_read(). Apply further logic improvements to better determine when we set PageError. - Update submission of buffers in fs/ntfs/aops.c::ntfs_read_block() to check for the buffers being uptodate first in line with the updated fs/buffer.c::block_read_full_page(). This plugs a small race condition.2.0.18 - Fix race condition in reading of compressed files. - There was a narrow window between checking a buffer head for being uptodate and locking it in ntfs_file_read_compressed_block(). We now lock the buffer and then check whether it is uptodate or not.2.0.17 - Cleanups and optimizations - shrinking the ToDo list. - Modify fs/ntfs/inode.c::ntfs_read_locked_inode() to return an error code and update callers, i.e. ntfs_iget(), to pass that error code up instead of just using -EIO. - Modifications to super.c to ensure that both mount and remount cannot set any write related options when the driver is compiled read-only. - Optimize block resolution in fs/ntfs/aops.c::ntfs_read_block() to cache the current runlist element. This should improve performance when reading very large and/or very fragmented data.2.0.16 - Convert access to $MFT/$BITMAP to attribute inode API. - Fix a stupid bug introduced in 2.0.15 where we were unmapping the wrong inode in fs/ntfs/inode.c::ntfs_attr_iget(). - Fix debugging check in fs/ntfs/aops.c::ntfs_read_block(). - Convert $MFT/$BITMAP access to attribute inode API and remove all remnants of the ugly mftbmp address space and operations hack. This means we finally have only one readpage function as well as only one async io completion handler. Yey! The mft bitmap is now just an attribute inode and is accessed from vol->mftbmp_ino just as if it were a normal file. Fake inodes rule. (-:2.0.15 - Fake inodes based attribute i/o via the pagecache, fixes and cleanups. - Fix silly bug in fs/ntfs/super.c::parse_options() which was causing remounts to fail when the partition had an entry in /etc/fstab and the entry specified the nls= option. - Apply same macro magic used in fs/ntfs/inode.h to fs/ntfs/volume.h to expand all the helper functions NVolFoo(), NVolSetFoo(), and NVolClearFoo(). - Move copyright statement from driver initialisation message to module description (fs/super.c). This makes the initialisation message fit on one line and fits in better with rest of kernel. - Update fs/ntfs/attrib.c::map_run_list() to work on both real and attribute inodes, and both for files and directories. - Implement fake attribute inodes allowing all attribute i/o to go via the page cache and to use all the normal vfs/mm functionality: - Add ntfs_attr_iget() and its helper ntfs_read_locked_attr_inode() to fs/ntfs/inode.c. - Add needed cleanup code to ntfs_clear_big_inode(). - Merge address space operations for files and directories (aops.c), now just have ntfs_aops: - Rename: end_buffer_read_attr_async() -> ntfs_end_buffer_read_async(), ntfs_attr_read_block() -> ntfs_read_block(), ntfs_file_read_page() -> ntfs_readpage(). - Rewrite fs/ntfs/aops.c::ntfs_readpage() to work on both real and attribute inodes, and both for files and directories. - Remove obsolete fs/ntfs/aops.c::ntfs_mst_readpage().2.0.14 - Run list merging code cleanup, minor locking changes, typo fixes. - Change fs/ntfs/super.c::ntfs_statfs() to not rely on BKL by moving the locking out of super.c::get_nr_free_mft_records() and taking and dropping the mftbmp_lock rw_semaphore in ntfs_statfs() itself. - Bring attribute runlist merging code (fs/ntfs/attrib.c) in sync with current userspace ntfs library code. This means that if a merge fails the original runlists are always left unmodified instead of being silently corrupted. - Misc typo fixes.2.0.13 - Use iget5_locked() in preparation for fake inodes and small cleanups. - Remove nr_mft_bits and the now superfluous union with nr_mft_records from ntfs_volume structure. - Remove nr_lcn_bits and the now
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -