aboutsummaryrefslogtreecommitdiffstats
path: root/fs/f2fs/inline.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/f2fs/inline.c')
-rw-r--r--fs/f2fs/inline.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/fs/f2fs/inline.c b/fs/f2fs/inline.c
index ccea8735de59..34234d84a38b 100644
--- a/fs/f2fs/inline.c
+++ b/fs/f2fs/inline.c
@@ -424,7 +424,7 @@ static int f2fs_add_inline_entries(struct inode *dir,
424 ino = le32_to_cpu(de->ino); 424 ino = le32_to_cpu(de->ino);
425 fake_mode = get_de_type(de) << S_SHIFT; 425 fake_mode = get_de_type(de) << S_SHIFT;
426 426
427 err = f2fs_add_regular_entry(dir, &new_name, NULL, 427 err = f2fs_add_regular_entry(dir, &new_name, NULL, NULL,
428 ino, fake_mode); 428 ino, fake_mode);
429 if (err) 429 if (err)
430 goto punch_dentry_pages; 430 goto punch_dentry_pages;
@@ -445,8 +445,8 @@ static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage,
445 struct f2fs_inline_dentry *backup_dentry; 445 struct f2fs_inline_dentry *backup_dentry;
446 int err; 446 int err;
447 447
448 backup_dentry = f2fs_kmalloc(sizeof(struct f2fs_inline_dentry), 448 backup_dentry = f2fs_kmalloc(F2FS_I_SB(dir),
449 GFP_F2FS_ZERO); 449 sizeof(struct f2fs_inline_dentry), GFP_F2FS_ZERO);
450 if (!backup_dentry) { 450 if (!backup_dentry) {
451 f2fs_put_page(ipage, 1); 451 f2fs_put_page(ipage, 1);
452 return -ENOMEM; 452 return -ENOMEM;
@@ -488,17 +488,17 @@ static int f2fs_convert_inline_dir(struct inode *dir, struct page *ipage,
488 return f2fs_move_rehashed_dirents(dir, ipage, inline_dentry); 488 return f2fs_move_rehashed_dirents(dir, ipage, inline_dentry);
489} 489}
490 490
491int f2fs_add_inline_entry(struct inode *dir, const struct qstr *name, 491int f2fs_add_inline_entry(struct inode *dir, const struct qstr *new_name,
492 struct inode *inode, nid_t ino, umode_t mode) 492 const struct qstr *orig_name,
493 struct inode *inode, nid_t ino, umode_t mode)
493{ 494{
494 struct f2fs_sb_info *sbi = F2FS_I_SB(dir); 495 struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
495 struct page *ipage; 496 struct page *ipage;
496 unsigned int bit_pos; 497 unsigned int bit_pos;
497 f2fs_hash_t name_hash; 498 f2fs_hash_t name_hash;
498 size_t namelen = name->len;
499 struct f2fs_inline_dentry *dentry_blk = NULL; 499 struct f2fs_inline_dentry *dentry_blk = NULL;
500 struct f2fs_dentry_ptr d; 500 struct f2fs_dentry_ptr d;
501 int slots = GET_DENTRY_SLOTS(namelen); 501 int slots = GET_DENTRY_SLOTS(new_name->len);
502 struct page *page = NULL; 502 struct page *page = NULL;
503 int err = 0; 503 int err = 0;
504 504
@@ -519,18 +519,21 @@ int f2fs_add_inline_entry(struct inode *dir, const struct qstr *name,
519 519
520 if (inode) { 520 if (inode) {
521 down_write(&F2FS_I(inode)->i_sem); 521 down_write(&F2FS_I(inode)->i_sem);
522 page = init_inode_metadata(inode, dir, name, ipage); 522 page = init_inode_metadata(inode, dir, new_name,
523 orig_name, ipage);
523 if (IS_ERR(page)) { 524 if (IS_ERR(page)) {
524 err = PTR_ERR(page); 525 err = PTR_ERR(page);
525 goto fail; 526 goto fail;
526 } 527 }
528 if (f2fs_encrypted_inode(dir))
529 file_set_enc_name(inode);
527 } 530 }
528 531
529 f2fs_wait_on_page_writeback(ipage, NODE, true); 532 f2fs_wait_on_page_writeback(ipage, NODE, true);
530 533
531 name_hash = f2fs_dentry_hash(name); 534 name_hash = f2fs_dentry_hash(new_name);
532 make_dentry_ptr(NULL, &d, (void *)dentry_blk, 2); 535 make_dentry_ptr(NULL, &d, (void *)dentry_blk, 2);
533 f2fs_update_dentry(ino, mode, &d, name, name_hash, bit_pos); 536 f2fs_update_dentry(ino, mode, &d, new_name, name_hash, bit_pos);
534 537
535 set_page_dirty(ipage); 538 set_page_dirty(ipage);
536 539
@@ -563,7 +566,7 @@ void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry, struct page *page,
563 inline_dentry = inline_data_addr(page); 566 inline_dentry = inline_data_addr(page);
564 bit_pos = dentry - inline_dentry->dentry; 567 bit_pos = dentry - inline_dentry->dentry;
565 for (i = 0; i < slots; i++) 568 for (i = 0; i < slots; i++)
566 test_and_clear_bit_le(bit_pos + i, 569 __clear_bit_le(bit_pos + i,
567 &inline_dentry->dentry_bitmap); 570 &inline_dentry->dentry_bitmap);
568 571
569 set_page_dirty(page); 572 set_page_dirty(page);