summaryrefslogtreecommitdiffstats
path: root/fs/ntfs/aops.c
Commit message (Collapse)AuthorAgeFilesLines
* NTFS: Add bmap address space operation needed for FIBMAP ioctl.Anton Altaparmakov2014-10-161-0/+124
| | | | Signed-off-by: Anton Altaparmakov <anton@tuxera.com>
* NTFS: Split ntfs_aops into ntfs_normal_aops and ntfs_compressed_aopsAnton Altaparmakov2014-10-161-12/+27
| | | | | | in preparation for them diverging. Signed-off-by: Anton Altaparmakov <anton@tuxera.com>
* mm: change invalidatepage prototype to accept lengthLukas Czerner2013-05-211-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Currently there is no way to truncate partial page where the end truncate point is not at the end of the page. This is because it was not needed and the functionality was enough for file system truncate operation to work properly. However more file systems now support punch hole feature and it can benefit from mm supporting truncating page just up to the certain point. Specifically, with this functionality truncate_inode_pages_range() can be changed so it supports truncating partial page at the end of the range (currently it will BUG_ON() if 'end' is not at the end of the page). This commit changes the invalidatepage() address space operation prototype to accept range to be invalidated and update all the instances for it. We also change the block_invalidatepage() in the same way and actually make a use of the new length argument implementing range invalidation. Actual file system implementations will follow except the file systems where the changes are really simple and should not change the behaviour in any way .Implementation for truncate_page_range() which will be able to accept page unaligned ranges will follow as well. Signed-off-by: Lukas Czerner <lczerner@redhat.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Hugh Dickins <hughd@google.com>
* ntfs: remove the second argument of k[un]map_atomic()Cong Wang2012-03-201-10/+10
| | | | Signed-off-by: Cong Wang <amwang@redhat.com>
* block: remove per-queue pluggingJens Axboe2011-03-101-4/+0
| | | | | | | | Code has been converted over to the new explicit on-stack plugging, and delay users have been converted to use the new API for that. So lets kill off the old plugging along with aops->sync_page(). Signed-off-by: Jens Axboe <jaxboe@fusionio.com>
* include cleanup: Update gfp.h and slab.h includes to prepare for breaking ↵Tejun Heo2010-03-301-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | implicit slab.h inclusion from percpu.h percpu.h is included by sched.h and module.h and thus ends up being included when building most .c files. percpu.h includes slab.h which in turn includes gfp.h making everything defined by the two files universally available and complicating inclusion dependencies. percpu.h -> slab.h dependency is about to be removed. Prepare for this change by updating users of gfp and slab facilities include those headers directly instead of assuming availability. As this conversion needs to touch large number of source files, the following script is used as the basis of conversion. http://userweb.kernel.org/~tj/misc/slabh-sweep.py The script does the followings. * Scan files for gfp and slab usages and update includes such that only the necessary includes are there. ie. if only gfp is used, gfp.h, if slab is used, slab.h. * When the script inserts a new include, it looks at the include blocks and try to put the new include such that its order conforms to its surrounding. It's put in the include block which contains core kernel includes, in the same order that the rest are ordered - alphabetical, Christmas tree, rev-Xmas-tree or at the end if there doesn't seem to be any matching order. * If the script can't find a place to put a new include (mostly because the file doesn't have fitting include block), it prints out an error message indicating which .h file needs to be added to the file. The conversion was done in the following steps. 1. The initial automatic conversion of all .c files updated slightly over 4000 files, deleting around 700 includes and adding ~480 gfp.h and ~3000 slab.h inclusions. The script emitted errors for ~400 files. 2. Each error was manually checked. Some didn't need the inclusion, some needed manual addition while adding it to implementation .h or embedding .c file was more appropriate for others. This step added inclusions to around 150 files. 3. The script was run again and the output was compared to the edits from #2 to make sure no file was left behind. 4. Several build tests were done and a couple of problems were fixed. e.g. lib/decompress_*.c used malloc/free() wrappers around slab APIs requiring slab.h to be added manually. 5. The script was run on all .h files but without automatically editing them as sprinkling gfp.h and slab.h inclusions around .h files could easily lead to inclusion dependency hell. Most gfp.h inclusion directives were ignored as stuff from gfp.h was usually wildly available and often used in preprocessor macros. Each slab.h inclusion directive was examined and added manually as necessary. 6. percpu.h was updated not to include slab.h. 7. Build test were done on the following configurations and failures were fixed. CONFIG_GCOV_KERNEL was turned off for all tests (as my distributed build env didn't work with gcov compiles) and a few more options had to be turned off depending on archs to make things build (like ipr on powerpc/64 which failed due to missing writeq). * x86 and x86_64 UP and SMP allmodconfig and a custom test config. * powerpc and powerpc64 SMP allmodconfig * sparc and sparc64 SMP allmodconfig * ia64 SMP allmodconfig * s390 SMP allmodconfig * alpha SMP allmodconfig * um on x86_64 SMP allmodconfig 8. percpu.h modifications were reverted so that it could be applied as a separate patch and serve as bisection point. Given the fact that I had only a couple of failures from tests on step 6, I'm fairly confident about the coverage of this conversion patch. If there is a breakage, it's likely to be something in one of the arch headers which should be easily discoverable easily on most builds of the specific arch. Signed-off-by: Tejun Heo <tj@kernel.org> Guess-its-ok-by: Christoph Lameter <cl@linux-foundation.org> Cc: Ingo Molnar <mingo@redhat.com> Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
* HWPOISON: Enable .remove_error_page for migration aware file systemsAndi Kleen2009-09-161-0/+2
| | | | | | | | | | | | | | | | | | | | | | Enable removing of corrupted pages through truncation for a bunch of file systems: ext*, xfs, gfs2, ocfs2, ntfs These should cover most server needs. I chose the set of migration aware file systems for this for now, assuming they have been especially audited. But in general it should be safe for all file systems on the data area that support read/write and truncate. Caveat: the hardware error handler does not take i_mutex for now before calling the truncate function. Is that ok? Cc: tytso@mit.edu Cc: hch@infradead.org Cc: mfasheh@suse.com Cc: aia21@cantab.net Cc: hugh.dickins@tiscali.co.uk Cc: swhiteho@redhat.com Signed-off-by: Andi Kleen <ak@linux.intel.com>
* fs: rename buffer trylockNick Piggin2008-08-041-1/+1
| | | | | | | | Like the page lock change, this also requires name change, so convert the raw test_and_set bitop to a trylock. Signed-off-by: Nick Piggin <npiggin@suse.de> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* Pagecache zeroing: zero_user_segment, zero_user_segments and zero_userChristoph Lameter2008-02-051-9/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Simplify page cache zeroing of segments of pages through 3 functions zero_user_segments(page, start1, end1, start2, end2) Zeros two segments of the page. It takes the position where to start and end the zeroing which avoids length calculations and makes code clearer. zero_user_segment(page, start, end) Same for a single segment. zero_user(page, start, length) Length variant for the case where we know the length. We remove the zero_user_page macro. Issues: 1. Its a macro. Inline functions are preferable. 2. The KM_USER0 macro is only defined for HIGHMEM. Having to treat this special case everywhere makes the code needlessly complex. The parameter for zeroing is always KM_USER0 except in one single case that we open code. Avoiding KM_USER0 makes a lot of code not having to be dealing with the special casing for HIGHMEM anymore. Dealing with kmap is only necessary for HIGHMEM configurations. In those configurations we use KM_USER0 like we do for a series of other functions defined in highmem.h. Since KM_USER0 is depends on HIGHMEM the existing zero_user_page function could not be a macro. zero_user_* functions introduced here can be be inline because that constant is not used when these functions are called. Also extract the flushing of the caches to be outside of the kmap. [akpm@linux-foundation.org: fix nfs and ntfs build] [akpm@linux-foundation.org: fix ntfs build some more] Signed-off-by: Christoph Lameter <clameter@sgi.com> Cc: Steven French <sfrench@us.ibm.com> Cc: Michael Halcrow <mhalcrow@us.ibm.com> Cc: <linux-ext4@vger.kernel.org> Cc: Steven Whitehouse <swhiteho@redhat.com> Cc: Trond Myklebust <trond.myklebust@fys.uio.no> Cc: "J. Bruce Fields" <bfields@fieldses.org> Cc: Anton Altaparmakov <aia21@cantab.net> Cc: Mark Fasheh <mark.fasheh@oracle.com> Cc: David Chinner <dgc@sgi.com> Cc: Michael Halcrow <mhalcrow@us.ibm.com> Cc: Steven French <sfrench@us.ibm.com> Cc: Steven Whitehouse <swhiteho@redhat.com> Cc: Trond Myklebust <trond.myklebust@fys.uio.no> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* NTFS: Fix read regression.Anton Altaparmakov2007-11-031-1/+9
| | | | | | | | | | | | | | | | | The regression was caused by: commit[a32ea1e1f925399e0d81ca3f7394a44a6dafa12c] Fix read/truncate race This causes ntfs_readpage() to be called for a zero i_size inode, which failed when the file was compressed and non-resident. Thanks a lot to Mike Galbraith for reporting the issue and tracking down the commit that caused the regression. Looking into it I found three bugs which the patch fixes. Signed-off-by: Anton Altaparmakov <aia21@cantab.net> Tested-by: Mike Galbraith <efault@gmx.de> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* NTFS: Fix a mount time deadlock.Anton Altaparmakov2007-10-121-11/+11
| | | | | | | | | | | | | | | | | | | | | | Big thanks go to Mathias Kolehmainen for reporting the bug, providing debug output and testing the patches I sent him to get it working. The fix was to stop calling ntfs_attr_set() at mount time as that causes balance_dirty_pages_ratelimited() to be called which on systems with little memory actually tries to go and balance the dirty pages which tries to take the s_umount semaphore but because we are still in fill_super() across which the VFS holds s_umount for writing this results in a deadlock. We now do the dirty work by hand by submitting individual buffers. This has the annoying "feature" that mounting can take a few seconds if the journal is large as we have clear it all. One day someone should improve on this by deferring the journal clearing to a helper kernel thread so it can be done in the background but I don't have time for this at the moment and the current solution works fine so I am leaving it like this for now. Signed-off-by: Anton Altaparmakov <aia21@cantab.net> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* ntfs: use zero_user_pageNate Diller2007-05-121-27/+9
| | | | | | | | | | Use zero_user_page() instead of open-coding it. [akpm@linux-foundation.org: kmap-type fixes] Signed-off-by: Nate Diller <nate.diller@gmail.com> Acked-by: Anton Altaparmakov <aia21@cantab.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* [PATCH] ntfs: kmap_atomic() atomicity fixAndrew Morton2007-01-301-0/+4
| | | | | | | | The KM_BIO_SRC_IRQ kmap slot requires local irq protection. Acked-by: Anton Altaparmakov <aia21@cantab.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
* [PATCH] fs/ntfs: Conversion to generic booleanRichard Knutsson2006-10-011-15/+15
| | | | | | | | | Conversion of booleans to: generic-boolean.patch (2006-08-23) Signed-off-by: Richard Knutsson <ricknu-0@student.ltu.se> Signed-off-by: Anton Altaparmakov <aia21@cantab.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
* [PATCH] mark address_space_operations constChristoph Hellwig2006-06-281-2/+2
| | | | | | | | | | Same as with already do with the file operations: keep them in .rodata and prevents people from doing runtime patching. Signed-off-by: Christoph Hellwig <hch@lst.de> Cc: Steven French <sfrench@us.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
* NTFS: Semaphore to mutex conversion.Ingo Molnar2006-03-231-3/+3
| | | | | | | | | The conversion was generated via scripts, and the result was validated automatically via a script as well. Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Remove all the make_bad_inode() calls. This should only be calledAnton Altaparmakov2006-03-231-1/+0
| | | | | | from read inode and new inode code paths. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Use buffer_migrate_page() for the ->migratepage function of all ntfsAnton Altaparmakov2006-03-231-0/+7
| | | | | | address space operations. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Implement support for sector sizes above 512 bytes (up to the maximumAnton Altaparmakov2006-02-241-10/+8
| | | | supported by NTFS which is 4096 bytes).
* NTFS: $EA attributes can be both resident non-resident.Anton Altaparmakov2005-10-191-3/+2
| | | | | | Minor tidying. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Remove address space operations ->prepare_write and ->commit_write inAnton Altaparmakov2005-10-111-827/+0
| | | | | | preparation for the big rewrite of write(2) support in ntfs. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Fix ntfs_{read,write}page() to cope with concurrent truncates better.Anton Altaparmakov2005-09-191-36/+74
| | | | Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Fix handling of compressed directories that I broke in earlier changeset.Anton Altaparmakov2005-09-191-4/+8
| | | | Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* [PATCH] ntfs build fixAndrew Morton2005-09-101-0/+1
| | | | | | | | | *** Warning: "bit_spin_lock" [fs/ntfs/ntfs.ko] undefined! *** Warning: "bit_spin_unlock" [fs/ntfs/ntfs.ko] undefined! Cc: Anton Altaparmakov <aia21@cantab.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
* NTFS: 2.1.24 release and some minor final fixes.Anton Altaparmakov2005-09-081-6/+4
| | | | Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Improve scalability by changing the driver global spin lock inAnton Altaparmakov2005-09-081-6/+9
| | | | | | | fs/ntfs/aops.c::ntfs_end_buffer_async_read() to a bit spin lock in the first buffer head of a page. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Fix page_has_buffers()/page_buffers() handling in fs/ntfs/aops.c.Anton Altaparmakov2005-09-081-17/+21
| | | | Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Fixup handling of sparse, compressed, and encrypted attributes inAnton Altaparmakov2005-09-081-17/+24
| | | | | | fs/ntfs/aops.c::ntfs_readpage(). Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Fix fs/ntfs/aops.c::ntfs_{read,write}_block() to handle the caseAnton Altaparmakov2005-09-081-11/+40
| | | | | | where a concurrent truncate has truncated the runlist under our feet. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Optimize fs/ntfs/aops.c::ntfs_write_block() by extending the pageAnton Altaparmakov2005-09-081-10/+3
| | | | | | | lock protection over the buffer submission for i/o which allows the removal of the get_bh()/put_bh() pairs for each buffer. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Fixup handling of sparse, compressed, and encrypted attributes inAnton Altaparmakov2005-09-081-57/+47
| | | | | | fs/ntfs/aops.c::ntfs_writepage(). Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Make ntfs_write_block() not instantiate sparse blocks if they are zero.Anton Altaparmakov2005-09-081-0/+21
| | | | Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Complete the previous fix for the unset device when mapping buffersAnton Altaparmakov2005-08-161-0/+1
| | | | | | | 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 a bug in address space operations error recovery code paths whereAnton Altaparmakov2005-06-251-4/+12
| | | | | | | | 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: Use MAX_BUF_PER_PAGE instead of variable sized array allocation forAnton Altaparmakov2005-05-051-6/+8
| | | | | | better code generation and one less sparse warning in fs/ntfs/aops.c. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: - Modify ->readpage and ->writepage (fs/ntfs/aops.c) so they detectAnton Altaparmakov2005-05-051-0/+18
| | | | | | | | | | 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 printk format warnings on ia64. (Randy Dunlap)Randy Dunlap2005-05-051-1/+2
| | | | | Signed-off-by: Randy Dunlap <rddunlap@osdl.org> Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: - Split ntfs_map_runlist() into ntfs_map_runlist() and a non-lockingAnton Altaparmakov2005-05-051-24/+10
| | | | | | | | | | | | | 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: Optimise/reorganise some error handling code in fs/ntfs/aops.c.Anton Altaparmakov2005-05-051-11/+6
| | | | Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* NTFS: Fixup the resident attribute resizing code inAnton Altaparmakov2005-05-051-7/+14
| | | | | | | 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: Repeat a failed ntfs_truncate() in fs/ntfs/aops.c::ntfs_writepage()Anton Altaparmakov2005-05-051-10/+21
| | | | | | 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-051-15/+41
| | | | | | access to the i_size and other size fields using the size_lock. Signed-off-by: Anton Altaparmakov <aia21@cantab.net>
* Linux-2.6.12-rc2v2.6.12-rc2Linus Torvalds2005-04-161-0/+2324
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!