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