dir.c (31d1b7710262fba12282b24083f20dc76e0efc93) | dir.c (bae0ee7a767ceeea6d8e170da3f228fbc7480331) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * fs/f2fs/dir.c 4 * 5 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 6 * http://www.samsung.com/ 7 */ 8#include <linux/fs.h> --- 279 unchanged lines hidden (view full) --- 288 return res; 289} 290 291void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de, 292 struct page *page, struct inode *inode) 293{ 294 enum page_type type = f2fs_has_inline_dentry(dir) ? NODE : DATA; 295 lock_page(page); | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * fs/f2fs/dir.c 4 * 5 * Copyright (c) 2012 Samsung Electronics Co., Ltd. 6 * http://www.samsung.com/ 7 */ 8#include <linux/fs.h> --- 279 unchanged lines hidden (view full) --- 288 return res; 289} 290 291void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de, 292 struct page *page, struct inode *inode) 293{ 294 enum page_type type = f2fs_has_inline_dentry(dir) ? NODE : DATA; 295 lock_page(page); |
296 f2fs_wait_on_page_writeback(page, type, true); | 296 f2fs_wait_on_page_writeback(page, type, true, true); |
297 de->ino = cpu_to_le32(inode->i_ino); 298 set_de_type(de, inode->i_mode); 299 set_page_dirty(page); 300 301 dir->i_mtime = dir->i_ctime = current_time(dir); 302 f2fs_mark_inode_dirty_sync(dir, false); 303 f2fs_put_page(page, 1); 304} 305 306static void init_dent_inode(const struct qstr *name, struct page *ipage) 307{ 308 struct f2fs_inode *ri; 309 | 297 de->ino = cpu_to_le32(inode->i_ino); 298 set_de_type(de, inode->i_mode); 299 set_page_dirty(page); 300 301 dir->i_mtime = dir->i_ctime = current_time(dir); 302 f2fs_mark_inode_dirty_sync(dir, false); 303 f2fs_put_page(page, 1); 304} 305 306static void init_dent_inode(const struct qstr *name, struct page *ipage) 307{ 308 struct f2fs_inode *ri; 309 |
310 f2fs_wait_on_page_writeback(ipage, NODE, true); | 310 f2fs_wait_on_page_writeback(ipage, NODE, true, true); |
311 312 /* copy name info. to this inode page */ 313 ri = F2FS_INODE(ipage); 314 ri->i_namelen = cpu_to_le32(name->len); 315 memcpy(ri->i_name, name->name, name->len); 316 set_page_dirty(ipage); 317} 318 --- 226 unchanged lines hidden (view full) --- 545 546 f2fs_put_page(dentry_page, 1); 547 } 548 549 /* Move to next level to find the empty slot for new dentry */ 550 ++level; 551 goto start; 552add_dentry: | 311 312 /* copy name info. to this inode page */ 313 ri = F2FS_INODE(ipage); 314 ri->i_namelen = cpu_to_le32(name->len); 315 memcpy(ri->i_name, name->name, name->len); 316 set_page_dirty(ipage); 317} 318 --- 226 unchanged lines hidden (view full) --- 545 546 f2fs_put_page(dentry_page, 1); 547 } 548 549 /* Move to next level to find the empty slot for new dentry */ 550 ++level; 551 goto start; 552add_dentry: |
553 f2fs_wait_on_page_writeback(dentry_page, DATA, true); | 553 f2fs_wait_on_page_writeback(dentry_page, DATA, true, true); |
554 555 if (inode) { 556 down_write(&F2FS_I(inode)->i_sem); 557 page = f2fs_init_inode_metadata(inode, dir, new_name, 558 orig_name, NULL); 559 if (IS_ERR(page)) { 560 err = PTR_ERR(page); 561 goto fail; --- 138 unchanged lines hidden (view full) --- 700 701 if (F2FS_OPTION(F2FS_I_SB(dir)).fsync_mode == FSYNC_MODE_STRICT) 702 f2fs_add_ino_entry(F2FS_I_SB(dir), dir->i_ino, TRANS_DIR_INO); 703 704 if (f2fs_has_inline_dentry(dir)) 705 return f2fs_delete_inline_entry(dentry, page, dir, inode); 706 707 lock_page(page); | 554 555 if (inode) { 556 down_write(&F2FS_I(inode)->i_sem); 557 page = f2fs_init_inode_metadata(inode, dir, new_name, 558 orig_name, NULL); 559 if (IS_ERR(page)) { 560 err = PTR_ERR(page); 561 goto fail; --- 138 unchanged lines hidden (view full) --- 700 701 if (F2FS_OPTION(F2FS_I_SB(dir)).fsync_mode == FSYNC_MODE_STRICT) 702 f2fs_add_ino_entry(F2FS_I_SB(dir), dir->i_ino, TRANS_DIR_INO); 703 704 if (f2fs_has_inline_dentry(dir)) 705 return f2fs_delete_inline_entry(dentry, page, dir, inode); 706 707 lock_page(page); |
708 f2fs_wait_on_page_writeback(page, DATA, true); | 708 f2fs_wait_on_page_writeback(page, DATA, true, true); |
709 710 dentry_blk = page_address(page); 711 bit_pos = dentry - dentry_blk->dentry; 712 for (i = 0; i < slots; i++) 713 __clear_bit_le(bit_pos + i, &dentry_blk->dentry_bitmap); 714 715 /* Let's check and deallocate this dentry page */ 716 bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap, --- 86 unchanged lines hidden (view full) --- 803 continue; 804 } 805 806 d_type = f2fs_get_de_type(de); 807 808 de_name.name = d->filename[bit_pos]; 809 de_name.len = le16_to_cpu(de->name_len); 810 | 709 710 dentry_blk = page_address(page); 711 bit_pos = dentry - dentry_blk->dentry; 712 for (i = 0; i < slots; i++) 713 __clear_bit_le(bit_pos + i, &dentry_blk->dentry_bitmap); 714 715 /* Let's check and deallocate this dentry page */ 716 bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap, --- 86 unchanged lines hidden (view full) --- 803 continue; 804 } 805 806 d_type = f2fs_get_de_type(de); 807 808 de_name.name = d->filename[bit_pos]; 809 de_name.len = le16_to_cpu(de->name_len); 810 |
811 /* check memory boundary before moving forward */ 812 bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len)); 813 if (unlikely(bit_pos > d->max)) { 814 f2fs_msg(sbi->sb, KERN_WARNING, 815 "%s: corrupted namelen=%d, run fsck to fix.", 816 __func__, le16_to_cpu(de->name_len)); 817 set_sbi_flag(sbi, SBI_NEED_FSCK); 818 err = -EINVAL; 819 goto out; 820 } 821 |
|
811 if (f2fs_encrypted_inode(d->inode)) { 812 int save_len = fstr->len; 813 814 err = fscrypt_fname_disk_to_usr(d->inode, 815 (u32)de->hash_code, 0, 816 &de_name, fstr); 817 if (err) 818 goto out; --- 6 unchanged lines hidden (view full) --- 825 le32_to_cpu(de->ino), d_type)) { 826 err = 1; 827 goto out; 828 } 829 830 if (readdir_ra) 831 f2fs_ra_node_page(sbi, le32_to_cpu(de->ino)); 832 | 822 if (f2fs_encrypted_inode(d->inode)) { 823 int save_len = fstr->len; 824 825 err = fscrypt_fname_disk_to_usr(d->inode, 826 (u32)de->hash_code, 0, 827 &de_name, fstr); 828 if (err) 829 goto out; --- 6 unchanged lines hidden (view full) --- 836 le32_to_cpu(de->ino), d_type)) { 837 err = 1; 838 goto out; 839 } 840 841 if (readdir_ra) 842 f2fs_ra_node_page(sbi, le32_to_cpu(de->ino)); 843 |
833 bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len)); | |
834 ctx->pos = start_pos + bit_pos; 835 } 836out: 837 if (readdir_ra) 838 blk_finish_plug(&plug); 839 return err; 840} 841 --- 91 unchanged lines hidden --- | 844 ctx->pos = start_pos + bit_pos; 845 } 846out: 847 if (readdir_ra) 848 blk_finish_plug(&plug); 849 return err; 850} 851 --- 91 unchanged lines hidden --- |