.. | .. |
---|
65 | 65 | void f2fs_do_read_inline_data(struct page *page, struct page *ipage) |
---|
66 | 66 | { |
---|
67 | 67 | struct inode *inode = page->mapping->host; |
---|
68 | | - void *src_addr, *dst_addr; |
---|
69 | 68 | |
---|
70 | 69 | if (PageUptodate(page)) |
---|
71 | 70 | return; |
---|
.. | .. |
---|
75 | 74 | zero_user_segment(page, MAX_INLINE_DATA(inode), PAGE_SIZE); |
---|
76 | 75 | |
---|
77 | 76 | /* Copy the whole inline data block */ |
---|
78 | | - src_addr = inline_data_addr(inode, ipage); |
---|
79 | | - dst_addr = kmap_atomic(page); |
---|
80 | | - memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode)); |
---|
81 | | - flush_dcache_page(page); |
---|
82 | | - kunmap_atomic(dst_addr); |
---|
| 77 | + memcpy_to_page(page, 0, inline_data_addr(inode, ipage), |
---|
| 78 | + MAX_INLINE_DATA(inode)); |
---|
83 | 79 | if (!PageUptodate(page)) |
---|
84 | 80 | SetPageUptodate(page); |
---|
85 | 81 | } |
---|
.. | .. |
---|
264 | 260 | |
---|
265 | 261 | int f2fs_write_inline_data(struct inode *inode, struct page *page) |
---|
266 | 262 | { |
---|
267 | | - void *src_addr, *dst_addr; |
---|
268 | 263 | struct dnode_of_data dn; |
---|
269 | 264 | int err; |
---|
270 | 265 | |
---|
.. | .. |
---|
281 | 276 | f2fs_bug_on(F2FS_I_SB(inode), page->index); |
---|
282 | 277 | |
---|
283 | 278 | f2fs_wait_on_page_writeback(dn.inode_page, NODE, true, true); |
---|
284 | | - src_addr = kmap_atomic(page); |
---|
285 | | - dst_addr = inline_data_addr(inode, dn.inode_page); |
---|
286 | | - memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode)); |
---|
287 | | - kunmap_atomic(src_addr); |
---|
| 279 | + memcpy_from_page(inline_data_addr(inode, dn.inode_page), |
---|
| 280 | + page, 0, MAX_INLINE_DATA(inode)); |
---|
288 | 281 | set_page_dirty(dn.inode_page); |
---|
289 | 282 | |
---|
290 | 283 | f2fs_clear_page_cache_dirty_tag(page); |
---|
.. | .. |
---|
445 | 438 | |
---|
446 | 439 | dentry_blk = page_address(page); |
---|
447 | 440 | |
---|
| 441 | + /* |
---|
| 442 | + * Start by zeroing the full block, to ensure that all unused space is |
---|
| 443 | + * zeroed and no uninitialized memory is leaked to disk. |
---|
| 444 | + */ |
---|
| 445 | + memset(dentry_blk, 0, F2FS_BLKSIZE); |
---|
| 446 | + |
---|
448 | 447 | make_dentry_ptr_inline(dir, &src, inline_dentry); |
---|
449 | 448 | make_dentry_ptr_block(dir, &dst, dentry_blk); |
---|
450 | 449 | |
---|
451 | 450 | /* copy data from inline dentry block to new dentry block */ |
---|
452 | 451 | memcpy(dst.bitmap, src.bitmap, src.nr_bitmap); |
---|
453 | | - memset(dst.bitmap + src.nr_bitmap, 0, dst.nr_bitmap - src.nr_bitmap); |
---|
454 | | - /* |
---|
455 | | - * we do not need to zero out remainder part of dentry and filename |
---|
456 | | - * field, since we have used bitmap for marking the usage status of |
---|
457 | | - * them, besides, we can also ignore copying/zeroing reserved space |
---|
458 | | - * of dentry block, because them haven't been used so far. |
---|
459 | | - */ |
---|
460 | 452 | memcpy(dst.dentry, src.dentry, SIZE_OF_DIR_ENTRY * src.max); |
---|
461 | 453 | memcpy(dst.filename, src.filename, src.max * F2FS_SLOT_LEN); |
---|
462 | 454 | |
---|