An error occurred fetching the project authors.
- 18 Feb, 2003 1 commit
-
-
Anton Altaparmakov authored
-
- 21 Aug, 2002 1 commit
-
-
Anton Altaparmakov authored
- 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.
-
- 20 Aug, 2002 1 commit
-
-
Anton Altaparmakov authored
files on ntfs. (Note: Resident files are not supported yet, so avoid writing to files smaller than 1kiB.)
-
- 13 Aug, 2002 1 commit
-
-
Anton Altaparmakov authored
- 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.
-
- 07 Aug, 2002 1 commit
-
-
Anton Altaparmakov authored
- 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.
-
- 05 Aug, 2002 1 commit
-
-
Anton Altaparmakov authored
- 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.
-
- 24 Jul, 2002 1 commit
-
-
Anton Altaparmakov authored
- 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().
-
- 15 Jul, 2002 2 commits
-
-
Anton Altaparmakov authored
- 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.
-
Anton Altaparmakov authored
- 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().
-
- 13 Jul, 2002 1 commit
-
-
Anton Altaparmakov authored
- 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.
-
- 11 Jul, 2002 2 commits
-
-
Anton Altaparmakov authored
- 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.
-
Anton Altaparmakov authored
- 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.
-
- 08 Jul, 2002 3 commits
-
-
Anton Altaparmakov authored
-
Anton Altaparmakov authored
- Fix a stupid bug introduced in 2.0.15 where we were unmapping the wrong inode in fs/ntfs/inode.c::ntfs_attr_iget(). - 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. (-:
-
Anton Altaparmakov authored
- 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().
-
- 03 Jul, 2002 1 commit
-
-
Anton Altaparmakov authored
- 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.
-
- 27 Jun, 2002 1 commit
-
-
Anton Altaparmakov authored
- 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.
-
- 26 Jun, 2002 1 commit
-
-
Anton Altaparmakov authored
- 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.
-
- 25 Jun, 2002 1 commit
-
-
Anton Altaparmakov authored
- Move definition of ntfs_inode_state_bits to fs/ntfs/inode.h and do some macro magic (adapted from include/linux/buffer_head.h) to expand all the helper functions NInoFoo(), NInoSetFoo(), and NInoClearFoo(). - Add new flag to ntfs_inode_state_bits: NI_Sparse. - Add new fields to ntfs_inode structure to allow use of fake inodes for attribute i/o: type, name, name_len. Also add new state bits: NI_Attr, which, if set, indicates the inode is a fake inode, and NI_MstProtected, which, if set, indicates the attribute uses multi sector transfer protection, i.e. fixups need to be applied after reads and before/after writes. - Rename fs/ntfs/inode.c::ntfs_{new,clear,destroy}_inode() to ntfs_{new,clear,destroy}_extent_inode() and update callers. - Use ntfs_clear_extent_inode() in fs/ntfs/inode.c::__ntfs_clear_inode() instead of ntfs_destroy_extent_inode(). - Cleanup memory deallocations in {__,}ntfs_clear_{,big_}inode(). - Make all operations on ntfs inode state bits use the NIno* functions. - Set up the new ntfs inode fields and state bits in fs/ntfs/inode.c::ntfs_read_inode() and add appropriate cleanup of allocated memory to __ntfs_clear_inode(). - Cleanup ntfs_inode structure a bit for better ordering of elements w.r.t. their size to allow better packing of the structure in memory.
-
- 19 Jun, 2002 3 commits
-
-
Anton Altaparmakov authored
- Add check at mount time to verify that the number of inodes on the volume does not exceed 2^32 - 1, which is the maximum allowed for NTFS according to Microsoft. - Change mft_no member of ntfs_inode structure to be unsigned long. Update all users. This makes ntfs_inode->mft_no just a copy of struct inode->i_ino. But we can't just always use struct inode->i_ino and remove mft_no because extent inodes do not have an attached struct inode.
-
Anton Altaparmakov authored
-
Anton Altaparmakov authored
- Remove unused variables left over after Rusty's patch to the decompression engine. - Change buffer size in ntfs_readdir()/ntfs_filldir() to use NLS_MAX_CHARSET_SIZE. - Miscellaneous minor cleanups to comments.
-
- 29 May, 2002 1 commit
-
-
Anton Altaparmakov authored
In order to handle the case insensitivity issues of NTFS with regards to the dcache and the dcache requiring only one dentry per directory, we deal with dentry aliases that only differ in case in ->ntfs_lookup() while maintining a case sensitive dcache. This means that we get the full benefit of dcache speed when the file/directory is looked up with the same case as returned by ->ntfs_readdir() but that a lookup for any other case (or for the short file name) will not find anything in dcache and will enter ->ntfs_lookup() instead, where we search the directory for a fully matching file name (including case) and if that is not found, we search for a file name that matches with different case and if that has non-POSIX semantics we return that. We actually do only one search (case sensitive) and keep tabs on whether we have found a case insensitive match in the process. To simplify matters for us, we do not treat the short vs long filenames as two hard links but instead if the lookup matches a short filename, we return the dentry for the corresponding long filename instead. In ->ntfs_lookup() we distinguish three cases: 1) @dent perfectly matches (i.e. including case) a directory entry with a file name in the WIN32 or POSIX namespaces. In this case ntfs_lookup_inode_by_name() will return with name set to NULL and we just d_add() @dent. 2) @dent matches (not including case) a directory entry with a file name in the WIN32 namespace. In this case ntfs_lookup_inode_by_name() will return with name set to point to a kmalloc()ed ntfs_name structure containing the properly cased little endian Unicode name. We convert the name to the current NLS code page, search if a dentry with this name already exists and if so return that instead of @dent. The VFS will then destroy the old @dent and use the one we returned. If a dentry is not found, we allocate a new one, d_add() it, and return it as above. 3) @dent matches either perfectly or not (i.e. we don't care about case) a directory entry with a file name in the DOS namespace. In this case ntfs_lookup_inode_by_name() will return with name set to point to a kmalloc()ed ntfs_name structure containing the mft reference (cpu endian) of the inode. We use the mft reference to read the inode and to find the file name in the WIN32 namespace corresponding to the matched short file name. We then convert the name to the current NLS code page, and proceed searching for a dentry with this name, etc, as in case 2), above.
-
- 28 May, 2002 1 commit
-
-
Anton Altaparmakov authored
Also, minor updates/fixes to docs and comments.
-
- 27 May, 2002 1 commit
-
-
Anton Altaparmakov authored
-
- 26 May, 2002 1 commit
-
-
Anton Altaparmakov authored
- Remove unused source file fs/ntfs/attraops.c. - Remove show_inodes mount option(s), thus dropping support for displaying of short file names. - Remove deprecated mount option posix. - Restore show_sys_files mount option. - Add new mount option case_sensitive, to determine if the driver treats file names as case sensitive or not. If case sensitive, create file names in the POSIX namespace. Otherwise create file names in the WIN32 namespace. By default, or when case_sensitive is set to FALSE, files remain accessible via their short file name, if it exists. - Add additional argument to ntfs_lookup_inode_by_name() in which we return information about the matching file name if the case is not matching or the match is a short file name. See comments above the function definition for details.
-
- 11 May, 2002 2 commits
-
-
Anton Altaparmakov authored
-
Anton Altaparmakov authored
-
- 04 May, 2002 1 commit
-
-
Anton Altaparmakov authored
- Initialize the mftbmp address space properly now that there are more fields in the struct address_space. This was leading to hangs and oopses on umount since 2.5.12 because of changes to other parts of the kernel. We probably want a kernel generic init_address_space() function... - Drop BKL from ntfs_readdir() after consultation with Al Viro. The only caller of ->readdir() is vfs_readdir() which holds i_sem during the call, and i_sem is sufficient protection against changes in the directory inode (including ->i_size). - Use generic_file_llseek() for directories (as opposed to default_llseek()) as this downs i_sem instead of the BKL which is what we now need for exclusion against ->f_pos changes considering we no longer take the BKL in ntfs_readdir().
-
- 02 May, 2002 1 commit
-
-
Anton Altaparmakov authored
Upgrade is imperative!
-
- 27 Apr, 2002 1 commit
-
-
Anton Altaparmakov authored
- Add documentation on how to use the MD driver to be able to use NTFS stripe and volume sets in Linux and generally cleanup documentation a bit. Remove all uses of kdev_t in favour of struct block_device *: - Change compress.c::ntfs_file_read_compressed_block() to use sb_getblk() instead of getblk(). - Change super.c::ntfs_fill_suoer() to use bdev_hardsect_size() instead of get_hardsect_size(). - No need to get old blocksize in super.c::ntfs_fill_super() as fs/super.c::get_sb_bdev() already does this. - Set bh->b_bdev instead of bh->b_dev throughout aops.c.
-
- 26 Apr, 2002 1 commit
-
-
Anton Altaparmakov authored
- Remove some dead code from mft.c. - Optimize readpage and read_block functions throughout aops.c so that only initialized blocks are read. Non-initialized ones have their buffer head mapped, zeroed, and set up to date, without scheduling any i/o. Thanks to Al Viro for advice on how to avoid the device i/o. Thanks go to Andrew Morton for spotting the below: - Fix buglet in allocate_compression_buffers() error code path. - Call flush_dcache_page() after modifying page cache page contents in ntfs_file_readpage(). - Check for existence of page buffers throughout aops.c before calling create_empty_buffers(). This happens when an I/O error occurs and the read is retried. (It also happens once writing is implemented so that needed doing anyway but I had left it for later...) - Don't BUG_ON() uptodate and/or mapped buffers throughout aops.c in readpage and read_block functions. Reasoning same as above (i.e. I/O error retries and future write code paths.)
-
- 24 Apr, 2002 1 commit
-
-
Anton Altaparmakov authored
-
- 13 Apr, 2002 1 commit
-
-
Anton Altaparmakov authored
directly instead of taking the address of a pointer. A return value of NULL means the allocation failed. Updated all callers appropriately.
-
- 11 Apr, 2002 1 commit
-
-
Anton Altaparmakov authored
-
- 25 Mar, 2002 2 commits
-
-
Anton Altaparmakov authored
-
Anton Altaparmakov authored
version change to 2.0.0, removing the TNG from the name. We want to enter the kernel now so no need for TNG in the name and the higher major version number sets off the new driver clearly away from the old driver.
-
- 23 Mar, 2002 1 commit
-
-
Anton Altaparmakov authored
initialized_size vs data_size (i.e. i_size) everywhere. Now host of mftbmp address space mapping is set to the ntfs volume so it can be retrieved in the async i/o completion handler. Hopefully this will not cause problems. If it does need to use a fake inode.
-
- 22 Mar, 2002 1 commit
-
-
Anton Altaparmakov authored
- Rename, cleanup, and improve end_buffer_read_index_async, is now end_buffer_read_mst_async. - Replace ntfs_dir_readpage by ntfs_mst_readpage which is a fusion of ntfs_dir_readpage and mft.c::ntfs_mft_readpage with support for mapping unmapped run lists within instead of calling ntfs_file_get_block. - Throw away ntfs_mft_readpage. This now becomes aops.c::ntfs_mst_readpage merged together with aops.c::ntfs_dir_readpage. The effect of the above is that we have one readpage function less and that this copes properly with the intricacies of initialized_size vs data_size vs allocated size. - Various cleanups.
-
- 21 Mar, 2002 1 commit
-
-
Anton Altaparmakov authored
- Don't read the run list of file data and directory indexes in read_inode. - Various cleanups.
-