data.c (1c52283265a462a100ae63ddf58b4e5884acde86) data.c (e4544b63a7ee49e7fbebf35ece0a6acd3b9617ae)
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>

--- 576 unchanged lines hidden (view full) ---

585}
586
587static void __f2fs_submit_merged_write(struct f2fs_sb_info *sbi,
588 enum page_type type, enum temp_type temp)
589{
590 enum page_type btype = PAGE_TYPE_OF_BIO(type);
591 struct f2fs_bio_info *io = sbi->write_io[btype] + temp;
592
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>

--- 576 unchanged lines hidden (view full) ---

585}
586
587static void __f2fs_submit_merged_write(struct f2fs_sb_info *sbi,
588 enum page_type type, enum temp_type temp)
589{
590 enum page_type btype = PAGE_TYPE_OF_BIO(type);
591 struct f2fs_bio_info *io = sbi->write_io[btype] + temp;
592
593 down_write(&io->io_rwsem);
593 f2fs_down_write(&io->io_rwsem);
594
595 /* change META to META_FLUSH in the checkpoint procedure */
596 if (type >= META_FLUSH) {
597 io->fio.type = META_FLUSH;
598 io->fio.op = REQ_OP_WRITE;
599 io->fio.op_flags = REQ_META | REQ_PRIO | REQ_SYNC;
600 if (!test_opt(sbi, NOBARRIER))
601 io->fio.op_flags |= REQ_PREFLUSH | REQ_FUA;
602 }
603 __submit_merged_bio(io);
594
595 /* change META to META_FLUSH in the checkpoint procedure */
596 if (type >= META_FLUSH) {
597 io->fio.type = META_FLUSH;
598 io->fio.op = REQ_OP_WRITE;
599 io->fio.op_flags = REQ_META | REQ_PRIO | REQ_SYNC;
600 if (!test_opt(sbi, NOBARRIER))
601 io->fio.op_flags |= REQ_PREFLUSH | REQ_FUA;
602 }
603 __submit_merged_bio(io);
604 up_write(&io->io_rwsem);
604 f2fs_up_write(&io->io_rwsem);
605}
606
607static void __submit_merged_write_cond(struct f2fs_sb_info *sbi,
608 struct inode *inode, struct page *page,
609 nid_t ino, enum page_type type, bool force)
610{
611 enum temp_type temp;
612 bool ret = true;
613
614 for (temp = HOT; temp < NR_TEMP_TYPE; temp++) {
615 if (!force) {
616 enum page_type btype = PAGE_TYPE_OF_BIO(type);
617 struct f2fs_bio_info *io = sbi->write_io[btype] + temp;
618
605}
606
607static void __submit_merged_write_cond(struct f2fs_sb_info *sbi,
608 struct inode *inode, struct page *page,
609 nid_t ino, enum page_type type, bool force)
610{
611 enum temp_type temp;
612 bool ret = true;
613
614 for (temp = HOT; temp < NR_TEMP_TYPE; temp++) {
615 if (!force) {
616 enum page_type btype = PAGE_TYPE_OF_BIO(type);
617 struct f2fs_bio_info *io = sbi->write_io[btype] + temp;
618
619 down_read(&io->io_rwsem);
619 f2fs_down_read(&io->io_rwsem);
620 ret = __has_merged_page(io->bio, inode, page, ino);
620 ret = __has_merged_page(io->bio, inode, page, ino);
621 up_read(&io->io_rwsem);
621 f2fs_up_read(&io->io_rwsem);
622 }
623 if (ret)
624 __f2fs_submit_merged_write(sbi, type, temp);
625
626 /* TODO: use HOT temp only for meta pages now. */
627 if (type >= META)
628 break;
629 }

--- 107 unchanged lines hidden (view full) ---

737
738 be = f2fs_kmem_cache_alloc(bio_entry_slab, GFP_NOFS, true, NULL);
739 be->bio = bio;
740 bio_get(bio);
741
742 if (bio_add_page(bio, page, PAGE_SIZE, 0) != PAGE_SIZE)
743 f2fs_bug_on(sbi, 1);
744
622 }
623 if (ret)
624 __f2fs_submit_merged_write(sbi, type, temp);
625
626 /* TODO: use HOT temp only for meta pages now. */
627 if (type >= META)
628 break;
629 }

--- 107 unchanged lines hidden (view full) ---

737
738 be = f2fs_kmem_cache_alloc(bio_entry_slab, GFP_NOFS, true, NULL);
739 be->bio = bio;
740 bio_get(bio);
741
742 if (bio_add_page(bio, page, PAGE_SIZE, 0) != PAGE_SIZE)
743 f2fs_bug_on(sbi, 1);
744
745 down_write(&io->bio_list_lock);
745 f2fs_down_write(&io->bio_list_lock);
746 list_add_tail(&be->list, &io->bio_list);
746 list_add_tail(&be->list, &io->bio_list);
747 up_write(&io->bio_list_lock);
747 f2fs_up_write(&io->bio_list_lock);
748}
749
750static void del_bio_entry(struct bio_entry *be)
751{
752 list_del(&be->list);
753 kmem_cache_free(bio_entry_slab, be);
754}
755

--- 5 unchanged lines hidden (view full) ---

761 bool found = false;
762 int ret = -EAGAIN;
763
764 for (temp = HOT; temp < NR_TEMP_TYPE && !found; temp++) {
765 struct f2fs_bio_info *io = sbi->write_io[DATA] + temp;
766 struct list_head *head = &io->bio_list;
767 struct bio_entry *be;
768
748}
749
750static void del_bio_entry(struct bio_entry *be)
751{
752 list_del(&be->list);
753 kmem_cache_free(bio_entry_slab, be);
754}
755

--- 5 unchanged lines hidden (view full) ---

761 bool found = false;
762 int ret = -EAGAIN;
763
764 for (temp = HOT; temp < NR_TEMP_TYPE && !found; temp++) {
765 struct f2fs_bio_info *io = sbi->write_io[DATA] + temp;
766 struct list_head *head = &io->bio_list;
767 struct bio_entry *be;
768
769 down_write(&io->bio_list_lock);
769 f2fs_down_write(&io->bio_list_lock);
770 list_for_each_entry(be, head, list) {
771 if (be->bio != *bio)
772 continue;
773
774 found = true;
775
776 f2fs_bug_on(sbi, !page_is_mergeable(sbi, *bio,
777 *fio->last_block,

--- 7 unchanged lines hidden (view full) ---

785 break;
786 }
787
788 /* page can't be merged into bio; submit the bio */
789 del_bio_entry(be);
790 __submit_bio(sbi, *bio, DATA);
791 break;
792 }
770 list_for_each_entry(be, head, list) {
771 if (be->bio != *bio)
772 continue;
773
774 found = true;
775
776 f2fs_bug_on(sbi, !page_is_mergeable(sbi, *bio,
777 *fio->last_block,

--- 7 unchanged lines hidden (view full) ---

785 break;
786 }
787
788 /* page can't be merged into bio; submit the bio */
789 del_bio_entry(be);
790 __submit_bio(sbi, *bio, DATA);
791 break;
792 }
793 up_write(&io->bio_list_lock);
793 f2fs_up_write(&io->bio_list_lock);
794 }
795
796 if (ret) {
797 bio_put(*bio);
798 *bio = NULL;
799 }
800
801 return ret;

--- 9 unchanged lines hidden (view full) ---

811 for (temp = HOT; temp < NR_TEMP_TYPE && !found; temp++) {
812 struct f2fs_bio_info *io = sbi->write_io[DATA] + temp;
813 struct list_head *head = &io->bio_list;
814 struct bio_entry *be;
815
816 if (list_empty(head))
817 continue;
818
794 }
795
796 if (ret) {
797 bio_put(*bio);
798 *bio = NULL;
799 }
800
801 return ret;

--- 9 unchanged lines hidden (view full) ---

811 for (temp = HOT; temp < NR_TEMP_TYPE && !found; temp++) {
812 struct f2fs_bio_info *io = sbi->write_io[DATA] + temp;
813 struct list_head *head = &io->bio_list;
814 struct bio_entry *be;
815
816 if (list_empty(head))
817 continue;
818
819 down_read(&io->bio_list_lock);
819 f2fs_down_read(&io->bio_list_lock);
820 list_for_each_entry(be, head, list) {
821 if (target)
822 found = (target == be->bio);
823 else
824 found = __has_merged_page(be->bio, NULL,
825 page, 0);
826 if (found)
827 break;
828 }
820 list_for_each_entry(be, head, list) {
821 if (target)
822 found = (target == be->bio);
823 else
824 found = __has_merged_page(be->bio, NULL,
825 page, 0);
826 if (found)
827 break;
828 }
829 up_read(&io->bio_list_lock);
829 f2fs_up_read(&io->bio_list_lock);
830
831 if (!found)
832 continue;
833
834 found = false;
835
830
831 if (!found)
832 continue;
833
834 found = false;
835
836 down_write(&io->bio_list_lock);
836 f2fs_down_write(&io->bio_list_lock);
837 list_for_each_entry(be, head, list) {
838 if (target)
839 found = (target == be->bio);
840 else
841 found = __has_merged_page(be->bio, NULL,
842 page, 0);
843 if (found) {
844 target = be->bio;
845 del_bio_entry(be);
846 break;
847 }
848 }
837 list_for_each_entry(be, head, list) {
838 if (target)
839 found = (target == be->bio);
840 else
841 found = __has_merged_page(be->bio, NULL,
842 page, 0);
843 if (found) {
844 target = be->bio;
845 del_bio_entry(be);
846 break;
847 }
848 }
849 up_write(&io->bio_list_lock);
849 f2fs_up_write(&io->bio_list_lock);
850 }
851
852 if (found)
853 __submit_bio(sbi, target, DATA);
854 if (bio && *bio) {
855 bio_put(*bio);
856 *bio = NULL;
857 }

--- 43 unchanged lines hidden (view full) ---

901{
902 struct f2fs_sb_info *sbi = fio->sbi;
903 enum page_type btype = PAGE_TYPE_OF_BIO(fio->type);
904 struct f2fs_bio_info *io = sbi->write_io[btype] + fio->temp;
905 struct page *bio_page;
906
907 f2fs_bug_on(sbi, is_read_io(fio->op));
908
850 }
851
852 if (found)
853 __submit_bio(sbi, target, DATA);
854 if (bio && *bio) {
855 bio_put(*bio);
856 *bio = NULL;
857 }

--- 43 unchanged lines hidden (view full) ---

901{
902 struct f2fs_sb_info *sbi = fio->sbi;
903 enum page_type btype = PAGE_TYPE_OF_BIO(fio->type);
904 struct f2fs_bio_info *io = sbi->write_io[btype] + fio->temp;
905 struct page *bio_page;
906
907 f2fs_bug_on(sbi, is_read_io(fio->op));
908
909 down_write(&io->io_rwsem);
909 f2fs_down_write(&io->io_rwsem);
910next:
911 if (fio->in_list) {
912 spin_lock(&io->io_lock);
913 if (list_empty(&io->io_list)) {
914 spin_unlock(&io->io_lock);
915 goto out;
916 }
917 fio = list_first_entry(&io->io_list,

--- 50 unchanged lines hidden (view full) ---

968 trace_f2fs_submit_page_write(fio->page, fio);
969skip:
970 if (fio->in_list)
971 goto next;
972out:
973 if (is_sbi_flag_set(sbi, SBI_IS_SHUTDOWN) ||
974 !f2fs_is_checkpoint_ready(sbi))
975 __submit_merged_bio(io);
910next:
911 if (fio->in_list) {
912 spin_lock(&io->io_lock);
913 if (list_empty(&io->io_list)) {
914 spin_unlock(&io->io_lock);
915 goto out;
916 }
917 fio = list_first_entry(&io->io_list,

--- 50 unchanged lines hidden (view full) ---

968 trace_f2fs_submit_page_write(fio->page, fio);
969skip:
970 if (fio->in_list)
971 goto next;
972out:
973 if (is_sbi_flag_set(sbi, SBI_IS_SHUTDOWN) ||
974 !f2fs_is_checkpoint_ready(sbi))
975 __submit_merged_bio(io);
976 up_write(&io->io_rwsem);
976 f2fs_up_write(&io->io_rwsem);
977}
978
979static struct bio *f2fs_grab_read_bio(struct inode *inode, block_t blkaddr,
980 unsigned nr_pages, unsigned op_flag,
981 pgoff_t first_idx, bool for_write)
982{
983 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
984 struct bio *bio;

--- 393 unchanged lines hidden (view full) ---

1378 f2fs_update_data_blkaddr(dn, dn->data_blkaddr);
1379 return 0;
1380}
1381
1382void f2fs_do_map_lock(struct f2fs_sb_info *sbi, int flag, bool lock)
1383{
1384 if (flag == F2FS_GET_BLOCK_PRE_AIO) {
1385 if (lock)
977}
978
979static struct bio *f2fs_grab_read_bio(struct inode *inode, block_t blkaddr,
980 unsigned nr_pages, unsigned op_flag,
981 pgoff_t first_idx, bool for_write)
982{
983 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
984 struct bio *bio;

--- 393 unchanged lines hidden (view full) ---

1378 f2fs_update_data_blkaddr(dn, dn->data_blkaddr);
1379 return 0;
1380}
1381
1382void f2fs_do_map_lock(struct f2fs_sb_info *sbi, int flag, bool lock)
1383{
1384 if (flag == F2FS_GET_BLOCK_PRE_AIO) {
1385 if (lock)
1386 down_read(&sbi->node_change);
1386 f2fs_down_read(&sbi->node_change);
1387 else
1387 else
1388 up_read(&sbi->node_change);
1388 f2fs_up_read(&sbi->node_change);
1389 } else {
1390 if (lock)
1391 f2fs_lock_op(sbi);
1392 else
1393 f2fs_unlock_op(sbi);
1394 }
1395}
1396

--- 1347 unchanged lines hidden (view full) ---

2744 /* Dentry/quota blocks are controlled by checkpoint */
2745 if (S_ISDIR(inode->i_mode) || IS_NOQUOTA(inode)) {
2746 /*
2747 * We need to wait for node_write to avoid block allocation during
2748 * checkpoint. This can only happen to quota writes which can cause
2749 * the below discard race condition.
2750 */
2751 if (IS_NOQUOTA(inode))
1389 } else {
1390 if (lock)
1391 f2fs_lock_op(sbi);
1392 else
1393 f2fs_unlock_op(sbi);
1394 }
1395}
1396

--- 1347 unchanged lines hidden (view full) ---

2744 /* Dentry/quota blocks are controlled by checkpoint */
2745 if (S_ISDIR(inode->i_mode) || IS_NOQUOTA(inode)) {
2746 /*
2747 * We need to wait for node_write to avoid block allocation during
2748 * checkpoint. This can only happen to quota writes which can cause
2749 * the below discard race condition.
2750 */
2751 if (IS_NOQUOTA(inode))
2752 down_read(&sbi->node_write);
2752 f2fs_down_read(&sbi->node_write);
2753
2754 fio.need_lock = LOCK_DONE;
2755 err = f2fs_do_write_data_page(&fio);
2756
2757 if (IS_NOQUOTA(inode))
2753
2754 fio.need_lock = LOCK_DONE;
2755 err = f2fs_do_write_data_page(&fio);
2756
2757 if (IS_NOQUOTA(inode))
2758 up_read(&sbi->node_write);
2758 f2fs_up_read(&sbi->node_write);
2759
2760 goto done;
2761 }
2762
2763 if (!wbc->for_reclaim)
2764 need_balance_fs = true;
2765 else if (has_not_enough_free_secs(sbi, 0, 0))
2766 goto redirty_out;

--- 441 unchanged lines hidden (view full) ---

3208{
3209 loff_t i_size = i_size_read(inode);
3210
3211 if (IS_NOQUOTA(inode))
3212 return;
3213
3214 /* In the fs-verity case, f2fs_end_enable_verity() does the truncate */
3215 if (to > i_size && !f2fs_verity_in_progress(inode)) {
2759
2760 goto done;
2761 }
2762
2763 if (!wbc->for_reclaim)
2764 need_balance_fs = true;
2765 else if (has_not_enough_free_secs(sbi, 0, 0))
2766 goto redirty_out;

--- 441 unchanged lines hidden (view full) ---

3208{
3209 loff_t i_size = i_size_read(inode);
3210
3211 if (IS_NOQUOTA(inode))
3212 return;
3213
3214 /* In the fs-verity case, f2fs_end_enable_verity() does the truncate */
3215 if (to > i_size && !f2fs_verity_in_progress(inode)) {
3216 down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
3216 f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
3217 filemap_invalidate_lock(inode->i_mapping);
3218
3219 truncate_pagecache(inode, i_size);
3220 f2fs_truncate_blocks(inode, i_size, true);
3221
3222 filemap_invalidate_unlock(inode->i_mapping);
3217 filemap_invalidate_lock(inode->i_mapping);
3218
3219 truncate_pagecache(inode, i_size);
3220 f2fs_truncate_blocks(inode, i_size, true);
3221
3222 filemap_invalidate_unlock(inode->i_mapping);
3223 up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
3223 f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
3224 }
3225}
3226
3227static int prepare_write_begin(struct f2fs_sb_info *sbi,
3228 struct page *page, loff_t pos, unsigned len,
3229 block_t *blk_addr, bool *node_changed)
3230{
3231 struct inode *inode = page->mapping->host;

--- 484 unchanged lines hidden (view full) ---

3716{
3717 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
3718 unsigned int blkofs;
3719 unsigned int blk_per_sec = BLKS_PER_SEC(sbi);
3720 unsigned int secidx = start_blk / blk_per_sec;
3721 unsigned int end_sec = secidx + blkcnt / blk_per_sec;
3722 int ret = 0;
3723
3224 }
3225}
3226
3227static int prepare_write_begin(struct f2fs_sb_info *sbi,
3228 struct page *page, loff_t pos, unsigned len,
3229 block_t *blk_addr, bool *node_changed)
3230{
3231 struct inode *inode = page->mapping->host;

--- 484 unchanged lines hidden (view full) ---

3716{
3717 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
3718 unsigned int blkofs;
3719 unsigned int blk_per_sec = BLKS_PER_SEC(sbi);
3720 unsigned int secidx = start_blk / blk_per_sec;
3721 unsigned int end_sec = secidx + blkcnt / blk_per_sec;
3722 int ret = 0;
3723
3724 down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
3724 f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
3725 filemap_invalidate_lock(inode->i_mapping);
3726
3727 set_inode_flag(inode, FI_ALIGNED_WRITE);
3728
3729 for (; secidx < end_sec; secidx++) {
3725 filemap_invalidate_lock(inode->i_mapping);
3726
3727 set_inode_flag(inode, FI_ALIGNED_WRITE);
3728
3729 for (; secidx < end_sec; secidx++) {
3730 down_write(&sbi->pin_sem);
3730 f2fs_down_write(&sbi->pin_sem);
3731
3732 f2fs_lock_op(sbi);
3733 f2fs_allocate_new_section(sbi, CURSEG_COLD_DATA_PINNED, false);
3734 f2fs_unlock_op(sbi);
3735
3736 set_inode_flag(inode, FI_DO_DEFRAG);
3737
3738 for (blkofs = 0; blkofs < blk_per_sec; blkofs++) {
3739 struct page *page;
3740 unsigned int blkidx = secidx * blk_per_sec + blkofs;
3741
3742 page = f2fs_get_lock_data_page(inode, blkidx, true);
3743 if (IS_ERR(page)) {
3731
3732 f2fs_lock_op(sbi);
3733 f2fs_allocate_new_section(sbi, CURSEG_COLD_DATA_PINNED, false);
3734 f2fs_unlock_op(sbi);
3735
3736 set_inode_flag(inode, FI_DO_DEFRAG);
3737
3738 for (blkofs = 0; blkofs < blk_per_sec; blkofs++) {
3739 struct page *page;
3740 unsigned int blkidx = secidx * blk_per_sec + blkofs;
3741
3742 page = f2fs_get_lock_data_page(inode, blkidx, true);
3743 if (IS_ERR(page)) {
3744 up_write(&sbi->pin_sem);
3744 f2fs_up_write(&sbi->pin_sem);
3745 ret = PTR_ERR(page);
3746 goto done;
3747 }
3748
3749 set_page_dirty(page);
3750 f2fs_put_page(page, 1);
3751 }
3752
3753 clear_inode_flag(inode, FI_DO_DEFRAG);
3754
3755 ret = filemap_fdatawrite(inode->i_mapping);
3756
3745 ret = PTR_ERR(page);
3746 goto done;
3747 }
3748
3749 set_page_dirty(page);
3750 f2fs_put_page(page, 1);
3751 }
3752
3753 clear_inode_flag(inode, FI_DO_DEFRAG);
3754
3755 ret = filemap_fdatawrite(inode->i_mapping);
3756
3757 up_write(&sbi->pin_sem);
3757 f2fs_up_write(&sbi->pin_sem);
3758
3759 if (ret)
3760 break;
3761 }
3762
3763done:
3764 clear_inode_flag(inode, FI_DO_DEFRAG);
3765 clear_inode_flag(inode, FI_ALIGNED_WRITE);
3766
3767 filemap_invalidate_unlock(inode->i_mapping);
3758
3759 if (ret)
3760 break;
3761 }
3762
3763done:
3764 clear_inode_flag(inode, FI_DO_DEFRAG);
3765 clear_inode_flag(inode, FI_ALIGNED_WRITE);
3766
3767 filemap_invalidate_unlock(inode->i_mapping);
3768 up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
3768 f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]);
3769
3770 return ret;
3771}
3772
3773static int check_swap_activate(struct swap_info_struct *sis,
3774 struct file *swap_file, sector_t *span)
3775{
3776 struct address_space *mapping = swap_file->f_mapping;

--- 302 unchanged lines hidden ---
3769
3770 return ret;
3771}
3772
3773static int check_swap_activate(struct swap_info_struct *sis,
3774 struct file *swap_file, sector_t *span)
3775{
3776 struct address_space *mapping = swap_file->f_mapping;

--- 302 unchanged lines hidden ---