aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ntfs
Commit message (Collapse)AuthorAge
* NTFS: Complete the previous fix for the unset device when mapping buffersAnton Altaparmakov2005-08-16
| | | | | | | for mft record writing. I had missed the writepage based mft record write code path. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Fix bug in mft record writing where we forgot to set the device inAnton Altaparmakov2005-08-16
| | | | | | | the buffers when mapping them after the VM had discarded them. Thanks to Martin MOKREJŠ for the bug report. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* [PATCH] turn many #if $undefined_string into #ifdef $undefined_stringOlaf Hering2005-07-27
| | | | | | | | | turn many #if $undefined_string into #ifdef $undefined_string to fix some warnings after -Wno-def was added to global CFLAGS Signed-off-by: Olaf Hering <olh@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
* NTFS: Fix a nasty deadlock that appeared in recent kernels.Anton Altaparmakov2005-06-26
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The situation: VFS inode X on a mounted ntfs volume is dirty. For same inode X, the ntfs_inode is dirty and thus corresponding on-disk inode, i.e. mft record, which is in a dirty PAGE_CACHE_PAGE belonging to the table of inodes, i.e. $MFT, inode 0. What happens: Process 1: sys_sync()/umount()/whatever... calls __sync_single_inode() for $MFT -> do_writepages() -> write_page for the dirty page containing the on-disk inode X, the page is now locked -> ntfs_write_mst_block() which clears PageUptodate() on the page to prevent anyone else getting hold of it whilst it does the write out. This is necessary as the on-disk inode needs "fixups" applied before the write to disk which are removed again after the write and PageUptodate is then set again. It then analyses the page looking for dirty on-disk inodes and when it finds one it calls ntfs_may_write_mft_record() to see if it is safe to write this on-disk inode. This then calls ilookup5() to check if the corresponding VFS inode is in icache(). This in turn calls ifind() which waits on the inode lock via wait_on_inode whilst holding the global inode_lock. Process 2: pdflush results in a call to __sync_single_inode for the same VFS inode X on the ntfs volume. This locks the inode (I_LOCK) then calls write-inode -> ntfs_write_inode -> map_mft_record() -> read_cache_page() for the page (in page cache of table of inodes $MFT, inode 0) containing the on-disk inode. This page has PageUptodate() clear because of Process 1 (see above) so read_cache_page() blocks when it tries to take the page lock for the page so it can call ntfs_read_page(). Thus Process 1 is holding the page lock on the page containing the on-disk inode X and it is waiting on the inode X to be unlocked in ifind() so it can write the page out and then unlock the page. And Process 2 is holding the inode lock on inode X and is waiting for the page to be unlocked so it can call ntfs_readpage() or discover that Process 1 set PageUptodate() again and use the page. Thus we have a deadlock due to ifind() waiting on the inode lock. The solution: The fix is to use the newly introduced ilookup5_nowait() which does not wait on the inode's lock and hence avoids the deadlock. This is safe as we do not care about the VFS inode and only use the fact that it is in the VFS inode cache and the fact that the vfs and ntfs inodes are one struct in memory to find the ntfs inode in memory if present. Also, the ntfs inode has its own locking so it does not matter if the vfs inode is locked. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Prepare for 2.1.23 release: Update documentation and bump version.Anton Altaparmakov2005-06-25
| | | | Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Change ntfs_map_runlist_nolock() to only decompress the mapping pairsAnton Altaparmakov2005-06-25
| | | | | | | | | | if the requested vcn is inside it. Otherwise we get into problems when we try to map an out of bounds vcn because we then try to map the already mapped runlist fragment which causes ntfs_mapping_pairs_decompress() to fail and return error. Update ntfs_attr_find_vcn_nolock() accordingly. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Add an extra parameter @last_vcn to ntfs_get_size_for_mapping_pairs()Anton Altaparmakov2005-06-25
| | | | | | | | and ntfs_mapping_pairs_build() to allow the runlist encoding to be partial which is desirable when filling holes in sparse attributes. Update all callers. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Change the runlist terminator of the newly allocated cluster(s) toAnton Altaparmakov2005-06-25
| | | | | | | LCN_ENOENT in ntfs_attr_make_non_resident(). Otherwise the runlist code gets confused. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Fix several occurences of a bug where we would perform 'var & ~const'Anton Altaparmakov2005-06-25
| | | | | | | | with a 64-bit variable and a int, i.e. 32-bit, constant. This causes the higher order 32-bits of the 64-bit variable to be zeroed. To fix this cast the 'const' to the same 64-bit type as 'var'. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Detect the case when Windows has been suspended to disk on the volumeAnton Altaparmakov2005-06-25
| | | | | | | to be mounted and if this is the case do not allow (re)mounting read-write. This is done by parsing hiberfil.sys if present. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Fix a bug in address space operations error recovery code paths whereAnton Altaparmakov2005-06-25
| | | | | | | | if the runlist was not mapped at all and a mapping error occured we would leave the runlist locked on exit to the function so that the next access to the same file would try to take the lock and deadlock. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Stamp the transaction log ($UsnJrnl), aka user space journal, if itAnton Altaparmakov2005-06-25
| | | | | | | is active on the volume and we are mounting read-write or remounting from read-only to read-write. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Use C99 style structure initialization after memory allocation whereAnton Altaparmakov2005-05-27
| | | | | | | possible (fs/ntfs/{attrib.c,index.c,super.c}). Thanks to Al Viro and Pekka Enberg. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Remove spurious void pointer casts from fs/ntfs/.Pekka Enberg2005-05-27
| | | | | Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi> Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Use MAX_BUF_PER_PAGE instead of variable sized array allocation forAnton Altaparmakov2005-05-05
| | | | | | better code generation and one less sparse warning in fs/ntfs/aops.c. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Minor cleanup: Define and use NTFS_MAX_CLUSTER_SIZE constant insteadAnton Altaparmakov2005-05-05
| | | | | | of hard coded 0x10000 in fs/ntfs/super.c. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Update attribute definition handling.Anton Altaparmakov2005-05-05
| | | | Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Some utilities modify the boot sector but do not update the checksum.Anton Altaparmakov2005-05-05
| | | | | | | | | Thus, relax the checking in fs/ntfs/super.c::is_boot_sector_ntfs() to only emit a warning when the checksum is incorrect rather than refusing the mount. Thanks to Bernd Casimir for pointing this problem out. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Remove checks for NULL before calling kfree() since kfree() does theJesper Juhl2005-05-05
| | | | | | | checking itself. (Jesper Juhl) Signed-off-by: Jesper Juhl <juhl-lkml@dif.dk> Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Fix compilation when configured read-only.Anton Altaparmakov2005-05-05
| | | | | | | | | | - Add ifdef NTFS_RW around write specific code if fs/ntfs/runlist.[hc] and fs/ntfs/attrib.[hc]. - Minor bugfix to fs/ntfs/attrib.c::ntfs_attr_make_non_resident() where the runlist was not freed in all error cases. - Add fs/ntfs/runlist.[hc]::ntfs_rl_find_vcn_nolock(). Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Include linux/swap.h in fs/ntfs/attrib.c for mark_page_accessed().Anton Altaparmakov2005-05-05
| | | | Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: - Modify ->readpage and ->writepage (fs/ntfs/aops.c) so they detectAnton Altaparmakov2005-05-05
| | | | | | | | | | and handle the case where an attribute is converted from resident to non-resident by a concurrent file write. - Reorder some operations when converting an attribute from resident to non-resident (fs/ntfs/attrib.c) so it is safe wrt concurrent ->readpage and ->writepage. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Fix sign of various error return values to be negative inAnton Altaparmakov2005-05-05
| | | | | | fs/ntfs/lcnalloc.c. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Add fs/ntfs/attrib.[hc]::ntfs_attr_make_non_resident().Anton Altaparmakov2005-05-05
| | | | Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: - Fix bug in fs/ntfs/attrib.c::ntfs_find_vcn_nolock() where afterAnton Altaparmakov2005-05-05
| | | | | | | | | | dropping the read lock and taking the write lock we were not checking whether someone else did not already do the work we wanted to do. - Rename ntfs_find_vcn_nolock() to ntfs_attr_find_vcn_nolock(). - Tidy up some comments in fs/ntfs/runlist.c. - Add LCN_ENOMEM and LCN_EIO definitions to fs/ntfs/runlist.h. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Add fs/ntfs/attrib.[hc]::ntfs_attr_vcn_to_lcn_nolock() used by the newAnton Altaparmakov2005-05-05
| | | | | | write code. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Add AT_EA in addition to AT_DATA to whitelist for being allowed to beAnton Altaparmakov2005-05-05
| | | | | | non-resident in fs/ntfs/attrib.c::ntfs_attr_can_be_non_resident(). Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Correct sparse file handling. The compressed values need to beAnton Altaparmakov2005-05-05
| | | | | | | | checked and set in the ntfs inode as done for compressed files and the compressed size needs to be used for vfs inode->i_blocks instead of the allocated size, again, as done for compressed files. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Make fs/ntfs/namei.c::ntfs_get_{parent,dentry} static and move theAnton Altaparmakov2005-05-05
| | | | | | | definition of ntfs_export_ops from fs/ntfs/super.c to namei.c. Also, declare ntfs_export_ops in fs/ntfs/ntfs.h. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Fix printk format warnings on ia64. (Randy Dunlap)Randy Dunlap2005-05-05
| | | | | Signed-off-by: Randy Dunlap <rddunlap@osdl.org> Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: - Set the ntfs_inode->allocated_size to the real allocated size in theAnton Altaparmakov2005-05-05
| | | | | | | | mft record for resident attributes (fs/ntfs/inode.c). - Small readability cleanup to use "a" instead of "ctx->attr" everywhere (fs/ntfs/inode.c). Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Fix a nasty runlist merge bug when merging two holes.Anton Altaparmakov2005-05-05
| | | | Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Change time to u64 in time.h::ntfs2utc() as it otherwise generates aAnton Altaparmakov2005-05-05
| | | | | | | warning in the do_div() call on sparc32. Thanks to Meelis Roos for the report and analysis of the warning. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: - Split ntfs_map_runlist() into ntfs_map_runlist() and a non-lockingAnton Altaparmakov2005-05-05
| | | | | | | | | | | | | helper ntfs_map_runlist_nolock() which is used by ntfs_map_runlist(). This allows us to map runlist fragments with the runlist lock already held without having to drop and reacquire it around the call. Adapt all callers. - Change ntfs_find_vcn() to ntfs_find_vcn_nolock() which takes a locked runlist. This allows us to find runlist elements with the runlist lock already held without having to drop and reacquire it around the call. Adapt all callers. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Fix a bug in fs/ntfs/runlist.c::ntfs_mapping_pairs_decompress() inAnton Altaparmakov2005-05-05
| | | | | | | the creation of the unmapped runlist element for the base attribute extent. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: - Add disable_sparse mount option together with a per volume sparseAnton Altaparmakov2005-05-05
| | | | | | | | enable bit which is set appropriately and a per inode sparse disable bit which is preset on some system file inodes as appropriate. - Enforce that sparse support is disabled on NTFS volumes pre 3.0. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Optimise/reorganise some error handling code in fs/ntfs/aops.c.Anton Altaparmakov2005-05-05
| | | | Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Fixup the resident attribute resizing code inAnton Altaparmakov2005-05-05
| | | | | | | fs/ntfs/aops.c::ntfs_{prepare,commit}_write()() and re-enable it. It should be safe now. (Famous last words...) Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Fix stupid bug in fs/ntfs/mft.c introduced in last changeset.Anton Altaparmakov2005-05-05
| | | | Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Repeat a failed ntfs_truncate() in fs/ntfs/aops.c::ntfs_writepage()Anton Altaparmakov2005-05-05
| | | | | | and abort if it fails again. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Use i_size_{read,write}() in fs/ntfs/{aops.c,mft.c} and protectAnton Altaparmakov2005-05-05
| | | | | | access to the i_size and other size fields using the size_lock. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Use i_size_read() in fs/ntfs/inode.c once and then use the cached valueAnton Altaparmakov2005-05-05
| | | | | | afterwards when reading the size of the bitmap inode. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: - Use i_size_read() in fs/ntfs/super.c once and then use the cachedAnton Altaparmakov2005-05-05
| | | | | | | | value afterwards. Cache the initialized_size in the same way and protect access to the two sizes using the size_lock. - Minor optimization to fs/ntfs/super.c::ntfs_statfs() and its helpers. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: In fs/ntfs/dir.c, use i_size_read() once and then the cached valueAnton Altaparmakov2005-05-05
| | | | | | afterwards. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: - In fs/ntfs/compress.c, use i_size_read() at the start and then use theAnton Altaparmakov2005-05-05
| | | | | | | | | | cached value everywhere. Cache the initialized_size in the same way and protect the critical region where the two sizes are read using the new size_lock of the ntfs inode. - Add the new size_lock to the ntfs_inode structure (fs/ntfs/inode.h) and initialize it (fs/ntfs/inode.c). Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Use i_size_read() in fs/ntfs/file.c::ntfs_file_open().Anton Altaparmakov2005-05-04
| | | | Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Use i_size_read() once and then use the cached value inAnton Altaparmakov2005-05-04
| | | | | | fs/ntfs/lcnalloc.c::ntfs_cluster_alloc(). Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Use i_size_read() in fs/ntfs/logfile.c::ntfs_{check,empty}_logfile().Anton Altaparmakov2005-05-04
| | | | Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Use i_size_read() in fs/ntfs/attrib.c::ntfs_attr_set().Anton Altaparmakov2005-05-04
| | | | Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* Linux-2.6.12-rc2v2.6.12-rc2Linus Torvalds2005-04-16
Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!