diff options
| -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 | } |
