data.c (5222595d093ebe80329d38d255d14316257afb3e) | data.c (bae0ee7a767ceeea6d8e170da3f228fbc7480331) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * fs/f2fs/data.c 4 * 5 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 6 * http://www.samsung.com/ 7 */ 8#include <linux/fs.h> --- 612 unchanged lines hidden (view full) --- 621/* 622 * Lock ordering for the change of data block address: 623 * ->data_page 624 * ->node_page 625 * update block addresses in the node page 626 */ 627void f2fs_set_data_blkaddr(struct dnode_of_data *dn) 628{ | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * fs/f2fs/data.c 4 * 5 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 6 * http://www.samsung.com/ 7 */ 8#include <linux/fs.h> --- 612 unchanged lines hidden (view full) --- 621/* 622 * Lock ordering for the change of data block address: 623 * ->data_page 624 * ->node_page 625 * update block addresses in the node page 626 */ 627void f2fs_set_data_blkaddr(struct dnode_of_data *dn) 628{ |
629 f2fs_wait_on_page_writeback(dn->node_page, NODE, true); | 629 f2fs_wait_on_page_writeback(dn->node_page, NODE, true, true); |
630 __set_data_blkaddr(dn); 631 if (set_page_dirty(dn->node_page)) 632 dn->node_changed = true; 633} 634 635void f2fs_update_data_blkaddr(struct dnode_of_data *dn, block_t blkaddr) 636{ 637 dn->data_blkaddr = blkaddr; --- 13 unchanged lines hidden (view full) --- 651 if (unlikely(is_inode_flag_set(dn->inode, FI_NO_ALLOC))) 652 return -EPERM; 653 if (unlikely((err = inc_valid_block_count(sbi, dn->inode, &count)))) 654 return err; 655 656 trace_f2fs_reserve_new_blocks(dn->inode, dn->nid, 657 dn->ofs_in_node, count); 658 | 630 __set_data_blkaddr(dn); 631 if (set_page_dirty(dn->node_page)) 632 dn->node_changed = true; 633} 634 635void f2fs_update_data_blkaddr(struct dnode_of_data *dn, block_t blkaddr) 636{ 637 dn->data_blkaddr = blkaddr; --- 13 unchanged lines hidden (view full) --- 651 if (unlikely(is_inode_flag_set(dn->inode, FI_NO_ALLOC))) 652 return -EPERM; 653 if (unlikely((err = inc_valid_block_count(sbi, dn->inode, &count)))) 654 return err; 655 656 trace_f2fs_reserve_new_blocks(dn->inode, dn->nid, 657 dn->ofs_in_node, count); 658 |
659 f2fs_wait_on_page_writeback(dn->node_page, NODE, true); | 659 f2fs_wait_on_page_writeback(dn->node_page, NODE, true, true); |
660 661 for (; count > 0; dn->ofs_in_node++) { 662 block_t blkaddr = datablock_addr(dn->inode, 663 dn->node_page, dn->ofs_in_node); 664 if (blkaddr == NULL_ADDR) { 665 dn->data_blkaddr = NEW_ADDR; 666 __set_data_blkaddr(dn); 667 count--; --- 1476 unchanged lines hidden (view full) --- 2144 if (!PageDirty(page)) { 2145 /* someone wrote it for us */ 2146 goto continue_unlock; 2147 } 2148 2149 if (PageWriteback(page)) { 2150 if (wbc->sync_mode != WB_SYNC_NONE) 2151 f2fs_wait_on_page_writeback(page, | 660 661 for (; count > 0; dn->ofs_in_node++) { 662 block_t blkaddr = datablock_addr(dn->inode, 663 dn->node_page, dn->ofs_in_node); 664 if (blkaddr == NULL_ADDR) { 665 dn->data_blkaddr = NEW_ADDR; 666 __set_data_blkaddr(dn); 667 count--; --- 1476 unchanged lines hidden (view full) --- 2144 if (!PageDirty(page)) { 2145 /* someone wrote it for us */ 2146 goto continue_unlock; 2147 } 2148 2149 if (PageWriteback(page)) { 2150 if (wbc->sync_mode != WB_SYNC_NONE) 2151 f2fs_wait_on_page_writeback(page, |
2152 DATA, true); | 2152 DATA, true, true); |
2153 else 2154 goto continue_unlock; 2155 } 2156 | 2153 else 2154 goto continue_unlock; 2155 } 2156 |
2157 BUG_ON(PageWriteback(page)); | |
2158 if (!clear_page_dirty_for_io(page)) 2159 goto continue_unlock; 2160 2161 ret = __write_data_page(page, &submitted, wbc, io_type); 2162 if (unlikely(ret)) { 2163 /* 2164 * keep nr_to_write, since vfs uses this to 2165 * get # of written pages. --- 301 unchanged lines hidden (view full) --- 2467 lock_page(page); 2468 if (page->mapping != mapping) { 2469 /* The page got truncated from under us */ 2470 f2fs_put_page(page, 1); 2471 goto repeat; 2472 } 2473 } 2474 | 2157 if (!clear_page_dirty_for_io(page)) 2158 goto continue_unlock; 2159 2160 ret = __write_data_page(page, &submitted, wbc, io_type); 2161 if (unlikely(ret)) { 2162 /* 2163 * keep nr_to_write, since vfs uses this to 2164 * get # of written pages. --- 301 unchanged lines hidden (view full) --- 2466 lock_page(page); 2467 if (page->mapping != mapping) { 2468 /* The page got truncated from under us */ 2469 f2fs_put_page(page, 1); 2470 goto repeat; 2471 } 2472 } 2473 |
2475 f2fs_wait_on_page_writeback(page, DATA, false); | 2474 f2fs_wait_on_page_writeback(page, DATA, false, true); |
2476 2477 if (len == PAGE_SIZE || PageUptodate(page)) 2478 return 0; 2479 2480 if (!(pos & (PAGE_SIZE - 1)) && (pos + len) >= i_size_read(inode)) { 2481 zero_user_segment(page, len, PAGE_SIZE); 2482 return 0; 2483 } --- 405 unchanged lines hidden --- | 2475 2476 if (len == PAGE_SIZE || PageUptodate(page)) 2477 return 0; 2478 2479 if (!(pos & (PAGE_SIZE - 1)) && (pos + len) >= i_size_read(inode)) { 2480 zero_user_segment(page, len, PAGE_SIZE); 2481 return 0; 2482 } --- 405 unchanged lines hidden --- |