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 ---