changelog

来自「一个类似windows」· 代码 · 共 803 行 · 第 1/3 页

TXT
803
字号
ToDo:
	- Find and fix bugs.
	- Enable NFS exporting of NTFS.
	- Implement aops->set_page_dirty() in order to take control of buffer
	  dirtying. Not having it means if page_has_buffers(), all buffers
	  will be dirtied with the page. And if not they won't be. That is
	  fine for the moment but will break once we enable metadata updates.
	- Implement sops->dirty_inode() to implement {a,m,c} time updates and
	  such things.
	- Implement sops->write_inode().
	- In between ntfs_prepare/commit_write, need exclusion between
	  simultaneous file extensions. Need perhaps an NInoResizeUnderway()
	  flag which we can set in ntfs_prepare_write() and clear again in
	  ntfs_commit_write(). Just have to be careful in readpage/writepage,
	  as well as in truncate, that we play nice... We might need to have
	  a data_size field in the ntfs_inode to store the real attribute
	  length. Also need to be careful with initialized_size extention in
	  ntfs_prepare_write. Basically, just be _very_ careful in this code...
	  OTOH, perhaps i_sem, which is held accross generic_file_write is
	  sufficient for synchronisation here. We then just need to make sure
	  ntfs_readpage/writepage/truncate interoperate properly with us.

2.1.5 - Fix minor bug in attribute list attribute handling.

	- 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 <szaka@sienet.hu>)

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 <rddunlap@osdl.ord>)
	- Remove compiler warnings for newer gcc.

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 run list 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 run list merging code (fs/ntfs/attrib.c) in sync with
	  current userspace ntfs library code. This means that if a merge
	  fails the original run lists 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 superfluous union with nr_clusters
	  from ntfs_volume structure.
	- Use iget5_locked() and friends instead of conventional iget(). Wrap
	  the call in fs/ntfs/inode.c::ntfs_iget() and update callers of iget()
	  to use ntfs_iget(). Leave only one iget() call at mount time so we
	  don't need an ntfs_iget_mount().
	- Change fs/ntfs/inode.c::ntfs_new_extent_inode() to take mft_no as an
	  additional argument.

2.0.12 - Initial cleanup of address space operations following 2.0.11 changes.

	- Merge fs/ntfs/aops.c::end_buffer_read_mst_async() and
	  fs/ntfs/aops.c::end_buffer_read_file_async() into one function
	  fs/ntfs/aops.c::end_buffer_read_attr_async() using NInoMstProtected()
	  to determine whether to apply mst fixups or not.
	- Above change allows merging fs/ntfs/aops.c::ntfs_file_read_block()
	  and fs/ntfs/aops.c::ntfs_mst_readpage() into one function
	  fs/ntfs/aops.c::ntfs_attr_read_block(). Also, create a tiny wrapper
	  fs/ntfs/aops.c::ntfs_mst_readpage() to transform the parameters from
	  the VFS readpage function prototype to the ntfs_attr_read_block()
	  function prototype.

2.0.11 - Initial preparations for fake inode based attribute i/o.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?