aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ntfs/aops.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/ntfs/aops.c')
-rw-r--r--fs/ntfs/aops.c36
1 files changed, 9 insertions, 27 deletions
diff --git a/fs/ntfs/aops.c b/fs/ntfs/aops.c
index 629e7abdd840..6e5c2534f4bc 100644
--- a/fs/ntfs/aops.c
+++ b/fs/ntfs/aops.c
@@ -86,19 +86,15 @@ static void ntfs_end_buffer_async_read(struct buffer_head *bh, int uptodate)
86 } 86 }
87 /* Check for the current buffer head overflowing. */ 87 /* Check for the current buffer head overflowing. */
88 if (unlikely(file_ofs + bh->b_size > init_size)) { 88 if (unlikely(file_ofs + bh->b_size > init_size)) {
89 u8 *kaddr;
90 int ofs; 89 int ofs;
91 90
92 ofs = 0; 91 ofs = 0;
93 if (file_ofs < init_size) 92 if (file_ofs < init_size)
94 ofs = init_size - file_ofs; 93 ofs = init_size - file_ofs;
95 local_irq_save(flags); 94 local_irq_save(flags);
96 kaddr = kmap_atomic(page, KM_BIO_SRC_IRQ); 95 zero_user_page(page, bh_offset(bh) + ofs,
97 memset(kaddr + bh_offset(bh) + ofs, 0, 96 bh->b_size - ofs, KM_BIO_SRC_IRQ);
98 bh->b_size - ofs);
99 kunmap_atomic(kaddr, KM_BIO_SRC_IRQ);
100 local_irq_restore(flags); 97 local_irq_restore(flags);
101 flush_dcache_page(page);
102 } 98 }
103 } else { 99 } else {
104 clear_buffer_uptodate(bh); 100 clear_buffer_uptodate(bh);
@@ -245,8 +241,7 @@ static int ntfs_read_block(struct page *page)
245 rl = NULL; 241 rl = NULL;
246 nr = i = 0; 242 nr = i = 0;
247 do { 243 do {
248 u8 *kaddr; 244 int err = 0;
249 int err;
250 245
251 if (unlikely(buffer_uptodate(bh))) 246 if (unlikely(buffer_uptodate(bh)))
252 continue; 247 continue;
@@ -254,7 +249,6 @@ static int ntfs_read_block(struct page *page)
254 arr[nr++] = bh; 249 arr[nr++] = bh;
255 continue; 250 continue;
256 } 251 }
257 err = 0;
258 bh->b_bdev = vol->sb->s_bdev; 252 bh->b_bdev = vol->sb->s_bdev;
259 /* Is the block within the allowed limits? */ 253 /* Is the block within the allowed limits? */
260 if (iblock < lblock) { 254 if (iblock < lblock) {
@@ -340,10 +334,7 @@ handle_hole:
340 bh->b_blocknr = -1UL; 334 bh->b_blocknr = -1UL;
341 clear_buffer_mapped(bh); 335 clear_buffer_mapped(bh);
342handle_zblock: 336handle_zblock:
343 kaddr = kmap_atomic(page, KM_USER0); 337 zero_user_page(page, i * blocksize, blocksize, KM_USER0);
344 memset(kaddr + i * blocksize, 0, blocksize);
345 kunmap_atomic(kaddr, KM_USER0);
346 flush_dcache_page(page);
347 if (likely(!err)) 338 if (likely(!err))
348 set_buffer_uptodate(bh); 339 set_buffer_uptodate(bh);
349 } while (i++, iblock++, (bh = bh->b_this_page) != head); 340 } while (i++, iblock++, (bh = bh->b_this_page) != head);
@@ -460,10 +451,7 @@ retry_readpage:
460 * ok to ignore the compressed flag here. 451 * ok to ignore the compressed flag here.
461 */ 452 */
462 if (unlikely(page->index > 0)) { 453 if (unlikely(page->index > 0)) {
463 kaddr = kmap_atomic(page, KM_USER0); 454 zero_user_page(page, 0, PAGE_CACHE_SIZE, KM_USER0);
464 memset(kaddr, 0, PAGE_CACHE_SIZE);
465 flush_dcache_page(page);
466 kunmap_atomic(kaddr, KM_USER0);
467 goto done; 455 goto done;
468 } 456 }
469 if (!NInoAttr(ni)) 457 if (!NInoAttr(ni))
@@ -790,14 +778,10 @@ lock_retry_remap:
790 * uptodate so it can get discarded by the VM. 778 * uptodate so it can get discarded by the VM.
791 */ 779 */
792 if (err == -ENOENT || lcn == LCN_ENOENT) { 780 if (err == -ENOENT || lcn == LCN_ENOENT) {
793 u8 *kaddr;
794
795 bh->b_blocknr = -1; 781 bh->b_blocknr = -1;
796 clear_buffer_dirty(bh); 782 clear_buffer_dirty(bh);
797 kaddr = kmap_atomic(page, KM_USER0); 783 zero_user_page(page, bh_offset(bh), blocksize,
798 memset(kaddr + bh_offset(bh), 0, blocksize); 784 KM_USER0);
799 kunmap_atomic(kaddr, KM_USER0);
800 flush_dcache_page(page);
801 set_buffer_uptodate(bh); 785 set_buffer_uptodate(bh);
802 err = 0; 786 err = 0;
803 continue; 787 continue;
@@ -1422,10 +1406,8 @@ retry_writepage:
1422 if (page->index >= (i_size >> PAGE_CACHE_SHIFT)) { 1406 if (page->index >= (i_size >> PAGE_CACHE_SHIFT)) {
1423 /* The page straddles i_size. */ 1407 /* The page straddles i_size. */
1424 unsigned int ofs = i_size & ~PAGE_CACHE_MASK; 1408 unsigned int ofs = i_size & ~PAGE_CACHE_MASK;
1425 kaddr = kmap_atomic(page, KM_USER0); 1409 zero_user_page(page, ofs, PAGE_CACHE_SIZE - ofs,
1426 memset(kaddr + ofs, 0, PAGE_CACHE_SIZE - ofs); 1410 KM_USER0);
1427 kunmap_atomic(kaddr, KM_USER0);
1428 flush_dcache_page(page);
1429 } 1411 }
1430 /* Handle mst protected attributes. */ 1412 /* Handle mst protected attributes. */
1431 if (NInoMstProtected(ni)) 1413 if (NInoMstProtected(ni))