0001
0002
0003
0004
0005
0006
0007
0008
0009 #include <linux/fs.h>
0010 #include <linux/f2fs_fs.h>
0011 #include <linux/fiemap.h>
0012
0013 #include "f2fs.h"
0014 #include "node.h"
0015 #include <trace/events/f2fs.h>
0016
0017 static bool support_inline_data(struct inode *inode)
0018 {
0019 if (f2fs_is_atomic_file(inode))
0020 return false;
0021 if (!S_ISREG(inode->i_mode) && !S_ISLNK(inode->i_mode))
0022 return false;
0023 if (i_size_read(inode) > MAX_INLINE_DATA(inode))
0024 return false;
0025 return true;
0026 }
0027
0028 bool f2fs_may_inline_data(struct inode *inode)
0029 {
0030 if (!support_inline_data(inode))
0031 return false;
0032
0033 return !f2fs_post_read_required(inode);
0034 }
0035
0036 bool f2fs_sanity_check_inline_data(struct inode *inode)
0037 {
0038 if (!f2fs_has_inline_data(inode))
0039 return false;
0040
0041 if (!support_inline_data(inode))
0042 return true;
0043
0044
0045
0046
0047
0048 return (S_ISREG(inode->i_mode) &&
0049 (file_is_encrypt(inode) || file_is_verity(inode) ||
0050 (F2FS_I(inode)->i_flags & F2FS_COMPR_FL)));
0051 }
0052
0053 bool f2fs_may_inline_dentry(struct inode *inode)
0054 {
0055 if (!test_opt(F2FS_I_SB(inode), INLINE_DENTRY))
0056 return false;
0057
0058 if (!S_ISDIR(inode->i_mode))
0059 return false;
0060
0061 return true;
0062 }
0063
0064 void f2fs_do_read_inline_data(struct page *page, struct page *ipage)
0065 {
0066 struct inode *inode = page->mapping->host;
0067 void *src_addr, *dst_addr;
0068
0069 if (PageUptodate(page))
0070 return;
0071
0072 f2fs_bug_on(F2FS_P_SB(page), page->index);
0073
0074 zero_user_segment(page, MAX_INLINE_DATA(inode), PAGE_SIZE);
0075
0076
0077 src_addr = inline_data_addr(inode, ipage);
0078 dst_addr = kmap_atomic(page);
0079 memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode));
0080 flush_dcache_page(page);
0081 kunmap_atomic(dst_addr);
0082 if (!PageUptodate(page))
0083 SetPageUptodate(page);
0084 }
0085
0086 void f2fs_truncate_inline_inode(struct inode *inode,
0087 struct page *ipage, u64 from)
0088 {
0089 void *addr;
0090
0091 if (from >= MAX_INLINE_DATA(inode))
0092 return;
0093
0094 addr = inline_data_addr(inode, ipage);
0095
0096 f2fs_wait_on_page_writeback(ipage, NODE, true, true);
0097 memset(addr + from, 0, MAX_INLINE_DATA(inode) - from);
0098 set_page_dirty(ipage);
0099
0100 if (from == 0)
0101 clear_inode_flag(inode, FI_DATA_EXIST);
0102 }
0103
0104 int f2fs_read_inline_data(struct inode *inode, struct page *page)
0105 {
0106 struct page *ipage;
0107
0108 ipage = f2fs_get_node_page(F2FS_I_SB(inode), inode->i_ino);
0109 if (IS_ERR(ipage)) {
0110 unlock_page(page);
0111 return PTR_ERR(ipage);
0112 }
0113
0114 if (!f2fs_has_inline_data(inode)) {
0115 f2fs_put_page(ipage, 1);
0116 return -EAGAIN;
0117 }
0118
0119 if (page->index)
0120 zero_user_segment(page, 0, PAGE_SIZE);
0121 else
0122 f2fs_do_read_inline_data(page, ipage);
0123
0124 if (!PageUptodate(page))
0125 SetPageUptodate(page);
0126 f2fs_put_page(ipage, 1);
0127 unlock_page(page);
0128 return 0;
0129 }
0130
0131 int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page)
0132 {
0133 struct f2fs_io_info fio = {
0134 .sbi = F2FS_I_SB(dn->inode),
0135 .ino = dn->inode->i_ino,
0136 .type = DATA,
0137 .op = REQ_OP_WRITE,
0138 .op_flags = REQ_SYNC | REQ_PRIO,
0139 .page = page,
0140 .encrypted_page = NULL,
0141 .io_type = FS_DATA_IO,
0142 };
0143 struct node_info ni;
0144 int dirty, err;
0145
0146 if (!f2fs_exist_data(dn->inode))
0147 goto clear_out;
0148
0149 err = f2fs_reserve_block(dn, 0);
0150 if (err)
0151 return err;
0152
0153 err = f2fs_get_node_info(fio.sbi, dn->nid, &ni, false);
0154 if (err) {
0155 f2fs_truncate_data_blocks_range(dn, 1);
0156 f2fs_put_dnode(dn);
0157 return err;
0158 }
0159
0160 fio.version = ni.version;
0161
0162 if (unlikely(dn->data_blkaddr != NEW_ADDR)) {
0163 f2fs_put_dnode(dn);
0164 set_sbi_flag(fio.sbi, SBI_NEED_FSCK);
0165 f2fs_warn(fio.sbi, "%s: corrupted inline inode ino=%lx, i_addr[0]:0x%x, run fsck to fix.",
0166 __func__, dn->inode->i_ino, dn->data_blkaddr);
0167 return -EFSCORRUPTED;
0168 }
0169
0170 f2fs_bug_on(F2FS_P_SB(page), PageWriteback(page));
0171
0172 f2fs_do_read_inline_data(page, dn->inode_page);
0173 set_page_dirty(page);
0174
0175
0176 dirty = clear_page_dirty_for_io(page);
0177
0178
0179 set_page_writeback(page);
0180 ClearPageError(page);
0181 fio.old_blkaddr = dn->data_blkaddr;
0182 set_inode_flag(dn->inode, FI_HOT_DATA);
0183 f2fs_outplace_write_data(dn, &fio);
0184 f2fs_wait_on_page_writeback(page, DATA, true, true);
0185 if (dirty) {
0186 inode_dec_dirty_pages(dn->inode);
0187 f2fs_remove_dirty_inode(dn->inode);
0188 }
0189
0190
0191 set_inode_flag(dn->inode, FI_APPEND_WRITE);
0192
0193
0194 f2fs_truncate_inline_inode(dn->inode, dn->inode_page, 0);
0195 clear_page_private_inline(dn->inode_page);
0196 clear_out:
0197 stat_dec_inline_inode(dn->inode);
0198 clear_inode_flag(dn->inode, FI_INLINE_DATA);
0199 f2fs_put_dnode(dn);
0200 return 0;
0201 }
0202
0203 int f2fs_convert_inline_inode(struct inode *inode)
0204 {
0205 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
0206 struct dnode_of_data dn;
0207 struct page *ipage, *page;
0208 int err = 0;
0209
0210 if (!f2fs_has_inline_data(inode) ||
0211 f2fs_hw_is_readonly(sbi) || f2fs_readonly(sbi->sb))
0212 return 0;
0213
0214 err = f2fs_dquot_initialize(inode);
0215 if (err)
0216 return err;
0217
0218 page = f2fs_grab_cache_page(inode->i_mapping, 0, false);
0219 if (!page)
0220 return -ENOMEM;
0221
0222 f2fs_lock_op(sbi);
0223
0224 ipage = f2fs_get_node_page(sbi, inode->i_ino);
0225 if (IS_ERR(ipage)) {
0226 err = PTR_ERR(ipage);
0227 goto out;
0228 }
0229
0230 set_new_dnode(&dn, inode, ipage, ipage, 0);
0231
0232 if (f2fs_has_inline_data(inode))
0233 err = f2fs_convert_inline_page(&dn, page);
0234
0235 f2fs_put_dnode(&dn);
0236 out:
0237 f2fs_unlock_op(sbi);
0238
0239 f2fs_put_page(page, 1);
0240
0241 if (!err)
0242 f2fs_balance_fs(sbi, dn.node_changed);
0243
0244 return err;
0245 }
0246
0247 int f2fs_write_inline_data(struct inode *inode, struct page *page)
0248 {
0249 void *src_addr, *dst_addr;
0250 struct dnode_of_data dn;
0251 int err;
0252
0253 set_new_dnode(&dn, inode, NULL, NULL, 0);
0254 err = f2fs_get_dnode_of_data(&dn, 0, LOOKUP_NODE);
0255 if (err)
0256 return err;
0257
0258 if (!f2fs_has_inline_data(inode)) {
0259 f2fs_put_dnode(&dn);
0260 return -EAGAIN;
0261 }
0262
0263 f2fs_bug_on(F2FS_I_SB(inode), page->index);
0264
0265 f2fs_wait_on_page_writeback(dn.inode_page, NODE, true, true);
0266 src_addr = kmap_atomic(page);
0267 dst_addr = inline_data_addr(inode, dn.inode_page);
0268 memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode));
0269 kunmap_atomic(src_addr);
0270 set_page_dirty(dn.inode_page);
0271
0272 f2fs_clear_page_cache_dirty_tag(page);
0273
0274 set_inode_flag(inode, FI_APPEND_WRITE);
0275 set_inode_flag(inode, FI_DATA_EXIST);
0276
0277 clear_page_private_inline(dn.inode_page);
0278 f2fs_put_dnode(&dn);
0279 return 0;
0280 }
0281
0282 int f2fs_recover_inline_data(struct inode *inode, struct page *npage)
0283 {
0284 struct f2fs_sb_info *sbi = F2FS_I_SB(inode);
0285 struct f2fs_inode *ri = NULL;
0286 void *src_addr, *dst_addr;
0287 struct page *ipage;
0288
0289
0290
0291
0292
0293
0294
0295
0296
0297 if (IS_INODE(npage))
0298 ri = F2FS_INODE(npage);
0299
0300 if (f2fs_has_inline_data(inode) &&
0301 ri && (ri->i_inline & F2FS_INLINE_DATA)) {
0302 process_inline:
0303 ipage = f2fs_get_node_page(sbi, inode->i_ino);
0304 if (IS_ERR(ipage))
0305 return PTR_ERR(ipage);
0306
0307 f2fs_wait_on_page_writeback(ipage, NODE, true, true);
0308
0309 src_addr = inline_data_addr(inode, npage);
0310 dst_addr = inline_data_addr(inode, ipage);
0311 memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode));
0312
0313 set_inode_flag(inode, FI_INLINE_DATA);
0314 set_inode_flag(inode, FI_DATA_EXIST);
0315
0316 set_page_dirty(ipage);
0317 f2fs_put_page(ipage, 1);
0318 return 1;
0319 }
0320
0321 if (f2fs_has_inline_data(inode)) {
0322 ipage = f2fs_get_node_page(sbi, inode->i_ino);
0323 if (IS_ERR(ipage))
0324 return PTR_ERR(ipage);
0325 f2fs_truncate_inline_inode(inode, ipage, 0);
0326 stat_dec_inline_inode(inode);
0327 clear_inode_flag(inode, FI_INLINE_DATA);
0328 f2fs_put_page(ipage, 1);
0329 } else if (ri && (ri->i_inline & F2FS_INLINE_DATA)) {
0330 int ret;
0331
0332 ret = f2fs_truncate_blocks(inode, 0, false);
0333 if (ret)
0334 return ret;
0335 stat_inc_inline_inode(inode);
0336 goto process_inline;
0337 }
0338 return 0;
0339 }
0340
0341 struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir,
0342 const struct f2fs_filename *fname,
0343 struct page **res_page)
0344 {
0345 struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb);
0346 struct f2fs_dir_entry *de;
0347 struct f2fs_dentry_ptr d;
0348 struct page *ipage;
0349 void *inline_dentry;
0350
0351 ipage = f2fs_get_node_page(sbi, dir->i_ino);
0352 if (IS_ERR(ipage)) {
0353 *res_page = ipage;
0354 return NULL;
0355 }
0356
0357 inline_dentry = inline_data_addr(dir, ipage);
0358
0359 make_dentry_ptr_inline(dir, &d, inline_dentry);
0360 de = f2fs_find_target_dentry(&d, fname, NULL);
0361 unlock_page(ipage);
0362 if (IS_ERR(de)) {
0363 *res_page = ERR_CAST(de);
0364 de = NULL;
0365 }
0366 if (de)
0367 *res_page = ipage;
0368 else
0369 f2fs_put_page(ipage, 0);
0370
0371 return de;
0372 }
0373
0374 int f2fs_make_empty_inline_dir(struct inode *inode, struct inode *parent,
0375 struct page *ipage)
0376 {
0377 struct f2fs_dentry_ptr d;
0378 void *inline_dentry;
0379
0380 inline_dentry = inline_data_addr(inode, ipage);
0381
0382 make_dentry_ptr_inline(inode, &d, inline_dentry);
0383 f2fs_do_make_empty_dir(inode, parent, &d);
0384
0385 set_page_dirty(ipage);
0386
0387
0388 if (i_size_read(inode) < MAX_INLINE_DATA(inode))
0389 f2fs_i_size_write(inode, MAX_INLINE_DATA(inode));
0390 return 0;
0391 }
0392
0393
0394
0395
0396
0397 static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage,
0398 void *inline_dentry)
0399 {
0400 struct page *page;
0401 struct dnode_of_data dn;
0402 struct f2fs_dentry_block *dentry_blk;
0403 struct f2fs_dentry_ptr src, dst;
0404 int err;
0405
0406 page = f2fs_grab_cache_page(dir->i_mapping, 0, true);
0407 if (!page) {
0408 f2fs_put_page(ipage, 1);
0409 return -ENOMEM;
0410 }
0411
0412 set_new_dnode(&dn, dir, ipage, NULL, 0);
0413 err = f2fs_reserve_block(&dn, 0);
0414 if (err)
0415 goto out;
0416
0417 if (unlikely(dn.data_blkaddr != NEW_ADDR)) {
0418 f2fs_put_dnode(&dn);
0419 set_sbi_flag(F2FS_P_SB(page), SBI_NEED_FSCK);
0420 f2fs_warn(F2FS_P_SB(page), "%s: corrupted inline inode ino=%lx, i_addr[0]:0x%x, run fsck to fix.",
0421 __func__, dir->i_ino, dn.data_blkaddr);
0422 err = -EFSCORRUPTED;
0423 goto out;
0424 }
0425
0426 f2fs_wait_on_page_writeback(page, DATA, true, true);
0427
0428 dentry_blk = page_address(page);
0429
0430 make_dentry_ptr_inline(dir, &src, inline_dentry);
0431 make_dentry_ptr_block(dir, &dst, dentry_blk);
0432
0433
0434 memcpy(dst.bitmap, src.bitmap, src.nr_bitmap);
0435 memset(dst.bitmap + src.nr_bitmap, 0, dst.nr_bitmap - src.nr_bitmap);
0436
0437
0438
0439
0440
0441
0442 memcpy(dst.dentry, src.dentry, SIZE_OF_DIR_ENTRY * src.max);
0443 memcpy(dst.filename, src.filename, src.max * F2FS_SLOT_LEN);
0444
0445 if (!PageUptodate(page))
0446 SetPageUptodate(page);
0447 set_page_dirty(page);
0448
0449
0450 f2fs_truncate_inline_inode(dir, ipage, 0);
0451
0452 stat_dec_inline_dir(dir);
0453 clear_inode_flag(dir, FI_INLINE_DENTRY);
0454
0455
0456
0457
0458
0459 if (!f2fs_sb_has_flexible_inline_xattr(F2FS_I_SB(dir)) &&
0460 !f2fs_has_inline_xattr(dir))
0461 F2FS_I(dir)->i_inline_xattr_size = 0;
0462
0463 f2fs_i_depth_write(dir, 1);
0464 if (i_size_read(dir) < PAGE_SIZE)
0465 f2fs_i_size_write(dir, PAGE_SIZE);
0466 out:
0467 f2fs_put_page(page, 1);
0468 return err;
0469 }
0470
0471 static int f2fs_add_inline_entries(struct inode *dir, void *inline_dentry)
0472 {
0473 struct f2fs_dentry_ptr d;
0474 unsigned long bit_pos = 0;
0475 int err = 0;
0476
0477 make_dentry_ptr_inline(dir, &d, inline_dentry);
0478
0479 while (bit_pos < d.max) {
0480 struct f2fs_dir_entry *de;
0481 struct f2fs_filename fname;
0482 nid_t ino;
0483 umode_t fake_mode;
0484
0485 if (!test_bit_le(bit_pos, d.bitmap)) {
0486 bit_pos++;
0487 continue;
0488 }
0489
0490 de = &d.dentry[bit_pos];
0491
0492 if (unlikely(!de->name_len)) {
0493 bit_pos++;
0494 continue;
0495 }
0496
0497
0498
0499
0500
0501 memset(&fname, 0, sizeof(fname));
0502 fname.disk_name.name = d.filename[bit_pos];
0503 fname.disk_name.len = le16_to_cpu(de->name_len);
0504 fname.hash = de->hash_code;
0505
0506 ino = le32_to_cpu(de->ino);
0507 fake_mode = f2fs_get_de_type(de) << S_SHIFT;
0508
0509 err = f2fs_add_regular_entry(dir, &fname, NULL, ino, fake_mode);
0510 if (err)
0511 goto punch_dentry_pages;
0512
0513 bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len));
0514 }
0515 return 0;
0516 punch_dentry_pages:
0517 truncate_inode_pages(&dir->i_data, 0);
0518 f2fs_truncate_blocks(dir, 0, false);
0519 f2fs_remove_dirty_inode(dir);
0520 return err;
0521 }
0522
0523 static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage,
0524 void *inline_dentry)
0525 {
0526 void *backup_dentry;
0527 int err;
0528
0529 backup_dentry = f2fs_kmalloc(F2FS_I_SB(dir),
0530 MAX_INLINE_DATA(dir), GFP_F2FS_ZERO);
0531 if (!backup_dentry) {
0532 f2fs_put_page(ipage, 1);
0533 return -ENOMEM;
0534 }
0535
0536 memcpy(backup_dentry, inline_dentry, MAX_INLINE_DATA(dir));
0537 f2fs_truncate_inline_inode(dir, ipage, 0);
0538
0539 unlock_page(ipage);
0540
0541 err = f2fs_add_inline_entries(dir, backup_dentry);
0542 if (err)
0543 goto recover;
0544
0545 lock_page(ipage);
0546
0547 stat_dec_inline_dir(dir);
0548 clear_inode_flag(dir, FI_INLINE_DENTRY);
0549
0550
0551
0552
0553
0554 if (!f2fs_sb_has_flexible_inline_xattr(F2FS_I_SB(dir)) &&
0555 !f2fs_has_inline_xattr(dir))
0556 F2FS_I(dir)->i_inline_xattr_size = 0;
0557
0558 kfree(backup_dentry);
0559 return 0;
0560 recover:
0561 lock_page(ipage);
0562 f2fs_wait_on_page_writeback(ipage, NODE, true, true);
0563 memcpy(inline_dentry, backup_dentry, MAX_INLINE_DATA(dir));
0564 f2fs_i_depth_write(dir, 0);
0565 f2fs_i_size_write(dir, MAX_INLINE_DATA(dir));
0566 set_page_dirty(ipage);
0567 f2fs_put_page(ipage, 1);
0568
0569 kfree(backup_dentry);
0570 return err;
0571 }
0572
0573 static int do_convert_inline_dir(struct inode *dir, struct page *ipage,
0574 void *inline_dentry)
0575 {
0576 if (!F2FS_I(dir)->i_dir_level)
0577 return f2fs_move_inline_dirents(dir, ipage, inline_dentry);
0578 else
0579 return f2fs_move_rehashed_dirents(dir, ipage, inline_dentry);
0580 }
0581
0582 int f2fs_try_convert_inline_dir(struct inode *dir, struct dentry *dentry)
0583 {
0584 struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
0585 struct page *ipage;
0586 struct f2fs_filename fname;
0587 void *inline_dentry = NULL;
0588 int err = 0;
0589
0590 if (!f2fs_has_inline_dentry(dir))
0591 return 0;
0592
0593 f2fs_lock_op(sbi);
0594
0595 err = f2fs_setup_filename(dir, &dentry->d_name, 0, &fname);
0596 if (err)
0597 goto out;
0598
0599 ipage = f2fs_get_node_page(sbi, dir->i_ino);
0600 if (IS_ERR(ipage)) {
0601 err = PTR_ERR(ipage);
0602 goto out_fname;
0603 }
0604
0605 if (f2fs_has_enough_room(dir, ipage, &fname)) {
0606 f2fs_put_page(ipage, 1);
0607 goto out_fname;
0608 }
0609
0610 inline_dentry = inline_data_addr(dir, ipage);
0611
0612 err = do_convert_inline_dir(dir, ipage, inline_dentry);
0613 if (!err)
0614 f2fs_put_page(ipage, 1);
0615 out_fname:
0616 f2fs_free_filename(&fname);
0617 out:
0618 f2fs_unlock_op(sbi);
0619 return err;
0620 }
0621
0622 int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname,
0623 struct inode *inode, nid_t ino, umode_t mode)
0624 {
0625 struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
0626 struct page *ipage;
0627 unsigned int bit_pos;
0628 void *inline_dentry = NULL;
0629 struct f2fs_dentry_ptr d;
0630 int slots = GET_DENTRY_SLOTS(fname->disk_name.len);
0631 struct page *page = NULL;
0632 int err = 0;
0633
0634 ipage = f2fs_get_node_page(sbi, dir->i_ino);
0635 if (IS_ERR(ipage))
0636 return PTR_ERR(ipage);
0637
0638 inline_dentry = inline_data_addr(dir, ipage);
0639 make_dentry_ptr_inline(dir, &d, inline_dentry);
0640
0641 bit_pos = f2fs_room_for_filename(d.bitmap, slots, d.max);
0642 if (bit_pos >= d.max) {
0643 err = do_convert_inline_dir(dir, ipage, inline_dentry);
0644 if (err)
0645 return err;
0646 err = -EAGAIN;
0647 goto out;
0648 }
0649
0650 if (inode) {
0651 f2fs_down_write(&F2FS_I(inode)->i_sem);
0652 page = f2fs_init_inode_metadata(inode, dir, fname, ipage);
0653 if (IS_ERR(page)) {
0654 err = PTR_ERR(page);
0655 goto fail;
0656 }
0657 }
0658
0659 f2fs_wait_on_page_writeback(ipage, NODE, true, true);
0660
0661 f2fs_update_dentry(ino, mode, &d, &fname->disk_name, fname->hash,
0662 bit_pos);
0663
0664 set_page_dirty(ipage);
0665
0666
0667 if (inode) {
0668 f2fs_i_pino_write(inode, dir->i_ino);
0669
0670
0671 if (is_inode_flag_set(inode, FI_NEW_INODE))
0672 f2fs_update_inode(inode, page);
0673
0674 f2fs_put_page(page, 1);
0675 }
0676
0677 f2fs_update_parent_metadata(dir, inode, 0);
0678 fail:
0679 if (inode)
0680 f2fs_up_write(&F2FS_I(inode)->i_sem);
0681 out:
0682 f2fs_put_page(ipage, 1);
0683 return err;
0684 }
0685
0686 void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry, struct page *page,
0687 struct inode *dir, struct inode *inode)
0688 {
0689 struct f2fs_dentry_ptr d;
0690 void *inline_dentry;
0691 int slots = GET_DENTRY_SLOTS(le16_to_cpu(dentry->name_len));
0692 unsigned int bit_pos;
0693 int i;
0694
0695 lock_page(page);
0696 f2fs_wait_on_page_writeback(page, NODE, true, true);
0697
0698 inline_dentry = inline_data_addr(dir, page);
0699 make_dentry_ptr_inline(dir, &d, inline_dentry);
0700
0701 bit_pos = dentry - d.dentry;
0702 for (i = 0; i < slots; i++)
0703 __clear_bit_le(bit_pos + i, d.bitmap);
0704
0705 set_page_dirty(page);
0706 f2fs_put_page(page, 1);
0707
0708 dir->i_ctime = dir->i_mtime = current_time(dir);
0709 f2fs_mark_inode_dirty_sync(dir, false);
0710
0711 if (inode)
0712 f2fs_drop_nlink(dir, inode);
0713 }
0714
0715 bool f2fs_empty_inline_dir(struct inode *dir)
0716 {
0717 struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
0718 struct page *ipage;
0719 unsigned int bit_pos = 2;
0720 void *inline_dentry;
0721 struct f2fs_dentry_ptr d;
0722
0723 ipage = f2fs_get_node_page(sbi, dir->i_ino);
0724 if (IS_ERR(ipage))
0725 return false;
0726
0727 inline_dentry = inline_data_addr(dir, ipage);
0728 make_dentry_ptr_inline(dir, &d, inline_dentry);
0729
0730 bit_pos = find_next_bit_le(d.bitmap, d.max, bit_pos);
0731
0732 f2fs_put_page(ipage, 1);
0733
0734 if (bit_pos < d.max)
0735 return false;
0736
0737 return true;
0738 }
0739
0740 int f2fs_read_inline_dir(struct file *file, struct dir_context *ctx,
0741 struct fscrypt_str *fstr)
0742 {
0743 struct inode *inode = file_inode(file);
0744 struct page *ipage = NULL;
0745 struct f2fs_dentry_ptr d;
0746 void *inline_dentry = NULL;
0747 int err;
0748
0749 make_dentry_ptr_inline(inode, &d, inline_dentry);
0750
0751 if (ctx->pos == d.max)
0752 return 0;
0753
0754 ipage = f2fs_get_node_page(F2FS_I_SB(inode), inode->i_ino);
0755 if (IS_ERR(ipage))
0756 return PTR_ERR(ipage);
0757
0758
0759
0760
0761
0762 unlock_page(ipage);
0763
0764 inline_dentry = inline_data_addr(inode, ipage);
0765
0766 make_dentry_ptr_inline(inode, &d, inline_dentry);
0767
0768 err = f2fs_fill_dentries(ctx, &d, 0, fstr);
0769 if (!err)
0770 ctx->pos = d.max;
0771
0772 f2fs_put_page(ipage, 0);
0773 return err < 0 ? err : 0;
0774 }
0775
0776 int f2fs_inline_data_fiemap(struct inode *inode,
0777 struct fiemap_extent_info *fieinfo, __u64 start, __u64 len)
0778 {
0779 __u64 byteaddr, ilen;
0780 __u32 flags = FIEMAP_EXTENT_DATA_INLINE | FIEMAP_EXTENT_NOT_ALIGNED |
0781 FIEMAP_EXTENT_LAST;
0782 struct node_info ni;
0783 struct page *ipage;
0784 int err = 0;
0785
0786 ipage = f2fs_get_node_page(F2FS_I_SB(inode), inode->i_ino);
0787 if (IS_ERR(ipage))
0788 return PTR_ERR(ipage);
0789
0790 if ((S_ISREG(inode->i_mode) || S_ISLNK(inode->i_mode)) &&
0791 !f2fs_has_inline_data(inode)) {
0792 err = -EAGAIN;
0793 goto out;
0794 }
0795
0796 if (S_ISDIR(inode->i_mode) && !f2fs_has_inline_dentry(inode)) {
0797 err = -EAGAIN;
0798 goto out;
0799 }
0800
0801 ilen = min_t(size_t, MAX_INLINE_DATA(inode), i_size_read(inode));
0802 if (start >= ilen)
0803 goto out;
0804 if (start + len < ilen)
0805 ilen = start + len;
0806 ilen -= start;
0807
0808 err = f2fs_get_node_info(F2FS_I_SB(inode), inode->i_ino, &ni, false);
0809 if (err)
0810 goto out;
0811
0812 byteaddr = (__u64)ni.blk_addr << inode->i_sb->s_blocksize_bits;
0813 byteaddr += (char *)inline_data_addr(inode, ipage) -
0814 (char *)F2FS_INODE(ipage);
0815 err = fiemap_fill_next_extent(fieinfo, start, byteaddr, ilen, flags);
0816 trace_f2fs_fiemap(inode, start, byteaddr, ilen, flags, err);
0817 out:
0818 f2fs_put_page(ipage, 1);
0819 return err;
0820 }