diff options
Diffstat (limited to 'fs')
-rw-r--r-- | fs/ntfs/aops.c | 36 | ||||
-rw-r--r-- | fs/ntfs/file.c | 59 |
2 files changed, 26 insertions, 69 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); |
342 | handle_zblock: | 336 | handle_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)) |
diff --git a/fs/ntfs/file.c b/fs/ntfs/file.c index 621de369e6f8..39a1669506bd 100644 --- a/fs/ntfs/file.c +++ b/fs/ntfs/file.c | |||
@@ -606,11 +606,8 @@ do_next_page: | |||
606 | ntfs_submit_bh_for_read(bh); | 606 | ntfs_submit_bh_for_read(bh); |
607 | *wait_bh++ = bh; | 607 | *wait_bh++ = bh; |
608 | } else { | 608 | } else { |
609 | u8 *kaddr = kmap_atomic(page, KM_USER0); | 609 | zero_user_page(page, bh_offset(bh), |
610 | memset(kaddr + bh_offset(bh), 0, | 610 | blocksize, KM_USER0); |
611 | blocksize); | ||
612 | kunmap_atomic(kaddr, KM_USER0); | ||
613 | flush_dcache_page(page); | ||
614 | set_buffer_uptodate(bh); | 611 | set_buffer_uptodate(bh); |
615 | } | 612 | } |
616 | } | 613 | } |
@@ -685,12 +682,9 @@ map_buffer_cached: | |||
685 | ntfs_submit_bh_for_read(bh); | 682 | ntfs_submit_bh_for_read(bh); |
686 | *wait_bh++ = bh; | 683 | *wait_bh++ = bh; |
687 | } else { | 684 | } else { |
688 | u8 *kaddr = kmap_atomic(page, | 685 | zero_user_page(page, |
689 | KM_USER0); | 686 | bh_offset(bh), |
690 | memset(kaddr + bh_offset(bh), | 687 | blocksize, KM_USER0); |
691 | 0, blocksize); | ||
692 | kunmap_atomic(kaddr, KM_USER0); | ||
693 | flush_dcache_page(page); | ||
694 | set_buffer_uptodate(bh); | 688 | set_buffer_uptodate(bh); |
695 | } | 689 | } |
696 | } | 690 | } |
@@ -708,11 +702,8 @@ map_buffer_cached: | |||
708 | */ | 702 | */ |
709 | if (bh_end <= pos || bh_pos >= end) { | 703 | if (bh_end <= pos || bh_pos >= end) { |
710 | if (!buffer_uptodate(bh)) { | 704 | if (!buffer_uptodate(bh)) { |
711 | u8 *kaddr = kmap_atomic(page, KM_USER0); | 705 | zero_user_page(page, bh_offset(bh), |
712 | memset(kaddr + bh_offset(bh), 0, | 706 | blocksize, KM_USER0); |
713 | blocksize); | ||
714 | kunmap_atomic(kaddr, KM_USER0); | ||
715 | flush_dcache_page(page); | ||
716 | set_buffer_uptodate(bh); | 707 | set_buffer_uptodate(bh); |
717 | } | 708 | } |
718 | mark_buffer_dirty(bh); | 709 | mark_buffer_dirty(bh); |
@@ -751,10 +742,8 @@ map_buffer_cached: | |||
751 | if (!buffer_uptodate(bh)) | 742 | if (!buffer_uptodate(bh)) |
752 | set_buffer_uptodate(bh); | 743 | set_buffer_uptodate(bh); |
753 | } else if (!buffer_uptodate(bh)) { | 744 | } else if (!buffer_uptodate(bh)) { |
754 | u8 *kaddr = kmap_atomic(page, KM_USER0); | 745 | zero_user_page(page, bh_offset(bh), blocksize, |
755 | memset(kaddr + bh_offset(bh), 0, blocksize); | 746 | KM_USER0); |
756 | kunmap_atomic(kaddr, KM_USER0); | ||
757 | flush_dcache_page(page); | ||
758 | set_buffer_uptodate(bh); | 747 | set_buffer_uptodate(bh); |
759 | } | 748 | } |
760 | continue; | 749 | continue; |
@@ -878,11 +867,8 @@ rl_not_mapped_enoent: | |||
878 | if (!buffer_uptodate(bh)) | 867 | if (!buffer_uptodate(bh)) |
879 | set_buffer_uptodate(bh); | 868 | set_buffer_uptodate(bh); |
880 | } else if (!buffer_uptodate(bh)) { | 869 | } else if (!buffer_uptodate(bh)) { |
881 | u8 *kaddr = kmap_atomic(page, KM_USER0); | 870 | zero_user_page(page, bh_offset(bh), |
882 | memset(kaddr + bh_offset(bh), 0, | 871 | blocksize, KM_USER0); |
883 | blocksize); | ||
884 | kunmap_atomic(kaddr, KM_USER0); | ||
885 | flush_dcache_page(page); | ||
886 | set_buffer_uptodate(bh); | 872 | set_buffer_uptodate(bh); |
887 | } | 873 | } |
888 | continue; | 874 | continue; |
@@ -1137,16 +1123,12 @@ rl_not_mapped_enoent: | |||
1137 | * to zero the overflowing region. | 1123 | * to zero the overflowing region. |
1138 | */ | 1124 | */ |
1139 | if (unlikely(bh_pos + blocksize > initialized_size)) { | 1125 | if (unlikely(bh_pos + blocksize > initialized_size)) { |
1140 | u8 *kaddr; | ||
1141 | int ofs = 0; | 1126 | int ofs = 0; |
1142 | 1127 | ||
1143 | if (likely(bh_pos < initialized_size)) | 1128 | if (likely(bh_pos < initialized_size)) |
1144 | ofs = initialized_size - bh_pos; | 1129 | ofs = initialized_size - bh_pos; |
1145 | kaddr = kmap_atomic(page, KM_USER0); | 1130 | zero_user_page(page, bh_offset(bh) + ofs, |
1146 | memset(kaddr + bh_offset(bh) + ofs, 0, | 1131 | blocksize - ofs, KM_USER0); |
1147 | blocksize - ofs); | ||
1148 | kunmap_atomic(kaddr, KM_USER0); | ||
1149 | flush_dcache_page(page); | ||
1150 | } | 1132 | } |
1151 | } else /* if (unlikely(!buffer_uptodate(bh))) */ | 1133 | } else /* if (unlikely(!buffer_uptodate(bh))) */ |
1152 | err = -EIO; | 1134 | err = -EIO; |
@@ -1286,11 +1268,8 @@ rl_not_mapped_enoent: | |||
1286 | if (PageUptodate(page)) | 1268 | if (PageUptodate(page)) |
1287 | set_buffer_uptodate(bh); | 1269 | set_buffer_uptodate(bh); |
1288 | else { | 1270 | else { |
1289 | u8 *kaddr = kmap_atomic(page, KM_USER0); | 1271 | zero_user_page(page, bh_offset(bh), |
1290 | memset(kaddr + bh_offset(bh), 0, | 1272 | blocksize, KM_USER0); |
1291 | blocksize); | ||
1292 | kunmap_atomic(kaddr, KM_USER0); | ||
1293 | flush_dcache_page(page); | ||
1294 | set_buffer_uptodate(bh); | 1273 | set_buffer_uptodate(bh); |
1295 | } | 1274 | } |
1296 | } | 1275 | } |
@@ -1350,9 +1329,7 @@ err_out: | |||
1350 | len = PAGE_CACHE_SIZE; | 1329 | len = PAGE_CACHE_SIZE; |
1351 | if (len > bytes) | 1330 | if (len > bytes) |
1352 | len = bytes; | 1331 | len = bytes; |
1353 | kaddr = kmap_atomic(*pages, KM_USER0); | 1332 | zero_user_page(*pages, 0, len, KM_USER0); |
1354 | memset(kaddr, 0, len); | ||
1355 | kunmap_atomic(kaddr, KM_USER0); | ||
1356 | } | 1333 | } |
1357 | goto out; | 1334 | goto out; |
1358 | } | 1335 | } |
@@ -1473,9 +1450,7 @@ err_out: | |||
1473 | len = PAGE_CACHE_SIZE; | 1450 | len = PAGE_CACHE_SIZE; |
1474 | if (len > bytes) | 1451 | if (len > bytes) |
1475 | len = bytes; | 1452 | len = bytes; |
1476 | kaddr = kmap_atomic(*pages, KM_USER0); | 1453 | zero_user_page(*pages, 0, len, KM_USER0); |
1477 | memset(kaddr, 0, len); | ||
1478 | kunmap_atomic(kaddr, KM_USER0); | ||
1479 | } | 1454 | } |
1480 | goto out; | 1455 | goto out; |
1481 | } | 1456 | } |