1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * fs/f2fs/inline.c 4 * Copyright (c) 2013, Intel Corporation 5 * Authors: Huajun Li <huajun.li@intel.com> 6 * Haicheng Li <haicheng.li@intel.com> 7 */ 8 9 #include <linux/fs.h> 10 #include <linux/f2fs_fs.h> 11 #include <linux/fiemap.h> 12 13 #include "f2fs.h" 14 #include "node.h" 15 #include <trace/events/f2fs.h> 16 17 static bool support_inline_data(struct inode *inode) 18 { 19 if (f2fs_used_in_atomic_write(inode)) 20 return false; 21 if (!S_ISREG(inode->i_mode) && !S_ISLNK(inode->i_mode)) 22 return false; 23 if (i_size_read(inode) > MAX_INLINE_DATA(inode)) 24 return false; 25 return true; 26 } 27 28 bool f2fs_may_inline_data(struct inode *inode) 29 { 30 if (!support_inline_data(inode)) 31 return false; 32 33 return !f2fs_post_read_required(inode); 34 } 35 36 bool f2fs_sanity_check_inline_data(struct inode *inode) 37 { 38 if (!f2fs_has_inline_data(inode)) 39 return false; 40 41 if (!support_inline_data(inode)) 42 return true; 43 44 /* 45 * used by sanity_check_inode(), when disk layout fields has not 46 * been synchronized to inmem fields. 47 */ 48 return (S_ISREG(inode->i_mode) && 49 (file_is_encrypt(inode) || file_is_verity(inode) || 50 (F2FS_I(inode)->i_flags & F2FS_COMPR_FL))); 51 } 52 53 bool f2fs_may_inline_dentry(struct inode *inode) 54 { 55 if (!test_opt(F2FS_I_SB(inode), INLINE_DENTRY)) 56 return false; 57 58 if (!S_ISDIR(inode->i_mode)) 59 return false; 60 61 return true; 62 } 63 64 void f2fs_do_read_inline_data(struct page *page, struct page *ipage) 65 { 66 struct inode *inode = page->mapping->host; 67 68 if (PageUptodate(page)) 69 return; 70 71 f2fs_bug_on(F2FS_P_SB(page), page->index); 72 73 zero_user_segment(page, MAX_INLINE_DATA(inode), PAGE_SIZE); 74 75 /* Copy the whole inline data block */ 76 memcpy_to_page(page, 0, inline_data_addr(inode, ipage), 77 MAX_INLINE_DATA(inode)); 78 if (!PageUptodate(page)) 79 SetPageUptodate(page); 80 } 81 82 void f2fs_truncate_inline_inode(struct inode *inode, 83 struct page *ipage, u64 from) 84 { 85 void *addr; 86 87 if (from >= MAX_INLINE_DATA(inode)) 88 return; 89 90 addr = inline_data_addr(inode, ipage); 91 92 f2fs_wait_on_page_writeback(ipage, NODE, true, true); 93 memset(addr + from, 0, MAX_INLINE_DATA(inode) - from); 94 set_page_dirty(ipage); 95 96 if (from == 0) 97 clear_inode_flag(inode, FI_DATA_EXIST); 98 } 99 100 int f2fs_read_inline_data(struct inode *inode, struct page *page) 101 { 102 struct page *ipage; 103 104 ipage = f2fs_get_node_page(F2FS_I_SB(inode), inode->i_ino); 105 if (IS_ERR(ipage)) { 106 unlock_page(page); 107 return PTR_ERR(ipage); 108 } 109 110 if (!f2fs_has_inline_data(inode)) { 111 f2fs_put_page(ipage, 1); 112 return -EAGAIN; 113 } 114 115 if (page->index) 116 zero_user_segment(page, 0, PAGE_SIZE); 117 else 118 f2fs_do_read_inline_data(page, ipage); 119 120 if (!PageUptodate(page)) 121 SetPageUptodate(page); 122 f2fs_put_page(ipage, 1); 123 unlock_page(page); 124 return 0; 125 } 126 127 int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page) 128 { 129 struct f2fs_io_info fio = { 130 .sbi = F2FS_I_SB(dn->inode), 131 .ino = dn->inode->i_ino, 132 .type = DATA, 133 .op = REQ_OP_WRITE, 134 .op_flags = REQ_SYNC | REQ_PRIO, 135 .page = page, 136 .encrypted_page = NULL, 137 .io_type = FS_DATA_IO, 138 }; 139 struct node_info ni; 140 int dirty, err; 141 142 if (!f2fs_exist_data(dn->inode)) 143 goto clear_out; 144 145 err = f2fs_reserve_block(dn, 0); 146 if (err) 147 return err; 148 149 err = f2fs_get_node_info(fio.sbi, dn->nid, &ni, false); 150 if (err) { 151 f2fs_truncate_data_blocks_range(dn, 1); 152 f2fs_put_dnode(dn); 153 return err; 154 } 155 156 fio.version = ni.version; 157 158 if (unlikely(dn->data_blkaddr != NEW_ADDR)) { 159 f2fs_put_dnode(dn); 160 set_sbi_flag(fio.sbi, SBI_NEED_FSCK); 161 f2fs_warn(fio.sbi, "%s: corrupted inline inode ino=%lx, i_addr[0]:0x%x, run fsck to fix.", 162 __func__, dn->inode->i_ino, dn->data_blkaddr); 163 f2fs_handle_error(fio.sbi, ERROR_INVALID_BLKADDR); 164 return -EFSCORRUPTED; 165 } 166 167 f2fs_bug_on(F2FS_P_SB(page), PageWriteback(page)); 168 169 f2fs_do_read_inline_data(page, dn->inode_page); 170 set_page_dirty(page); 171 172 /* clear dirty state */ 173 dirty = clear_page_dirty_for_io(page); 174 175 /* write data page to try to make data consistent */ 176 set_page_writeback(page); 177 fio.old_blkaddr = dn->data_blkaddr; 178 set_inode_flag(dn->inode, FI_HOT_DATA); 179 f2fs_outplace_write_data(dn, &fio); 180 f2fs_wait_on_page_writeback(page, DATA, true, true); 181 if (dirty) { 182 inode_dec_dirty_pages(dn->inode); 183 f2fs_remove_dirty_inode(dn->inode); 184 } 185 186 /* this converted inline_data should be recovered. */ 187 set_inode_flag(dn->inode, FI_APPEND_WRITE); 188 189 /* clear inline data and flag after data writeback */ 190 f2fs_truncate_inline_inode(dn->inode, dn->inode_page, 0); 191 clear_page_private_inline(dn->inode_page); 192 clear_out: 193 stat_dec_inline_inode(dn->inode); 194 clear_inode_flag(dn->inode, FI_INLINE_DATA); 195 f2fs_put_dnode(dn); 196 return 0; 197 } 198 199 int f2fs_convert_inline_inode(struct inode *inode) 200 { 201 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 202 struct dnode_of_data dn; 203 struct page *ipage, *page; 204 int err = 0; 205 206 if (f2fs_hw_is_readonly(sbi) || f2fs_readonly(sbi->sb)) 207 return -EROFS; 208 209 if (!f2fs_has_inline_data(inode)) 210 return 0; 211 212 err = f2fs_dquot_initialize(inode); 213 if (err) 214 return err; 215 216 page = f2fs_grab_cache_page(inode->i_mapping, 0, false); 217 if (!page) 218 return -ENOMEM; 219 220 f2fs_lock_op(sbi); 221 222 ipage = f2fs_get_node_page(sbi, inode->i_ino); 223 if (IS_ERR(ipage)) { 224 err = PTR_ERR(ipage); 225 goto out; 226 } 227 228 set_new_dnode(&dn, inode, ipage, ipage, 0); 229 230 if (f2fs_has_inline_data(inode)) 231 err = f2fs_convert_inline_page(&dn, page); 232 233 f2fs_put_dnode(&dn); 234 out: 235 f2fs_unlock_op(sbi); 236 237 f2fs_put_page(page, 1); 238 239 if (!err) 240 f2fs_balance_fs(sbi, dn.node_changed); 241 242 return err; 243 } 244 245 int f2fs_write_inline_data(struct inode *inode, struct page *page) 246 { 247 struct dnode_of_data dn; 248 int err; 249 250 set_new_dnode(&dn, inode, NULL, NULL, 0); 251 err = f2fs_get_dnode_of_data(&dn, 0, LOOKUP_NODE); 252 if (err) 253 return err; 254 255 if (!f2fs_has_inline_data(inode)) { 256 f2fs_put_dnode(&dn); 257 return -EAGAIN; 258 } 259 260 f2fs_bug_on(F2FS_I_SB(inode), page->index); 261 262 f2fs_wait_on_page_writeback(dn.inode_page, NODE, true, true); 263 memcpy_from_page(inline_data_addr(inode, dn.inode_page), 264 page, 0, MAX_INLINE_DATA(inode)); 265 set_page_dirty(dn.inode_page); 266 267 f2fs_clear_page_cache_dirty_tag(page); 268 269 set_inode_flag(inode, FI_APPEND_WRITE); 270 set_inode_flag(inode, FI_DATA_EXIST); 271 272 clear_page_private_inline(dn.inode_page); 273 f2fs_put_dnode(&dn); 274 return 0; 275 } 276 277 int f2fs_recover_inline_data(struct inode *inode, struct page *npage) 278 { 279 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 280 struct f2fs_inode *ri = NULL; 281 void *src_addr, *dst_addr; 282 struct page *ipage; 283 284 /* 285 * The inline_data recovery policy is as follows. 286 * [prev.] [next] of inline_data flag 287 * o o -> recover inline_data 288 * o x -> remove inline_data, and then recover data blocks 289 * x o -> remove data blocks, and then recover inline_data 290 * x x -> recover data blocks 291 */ 292 if (IS_INODE(npage)) 293 ri = F2FS_INODE(npage); 294 295 if (f2fs_has_inline_data(inode) && 296 ri && (ri->i_inline & F2FS_INLINE_DATA)) { 297 process_inline: 298 ipage = f2fs_get_node_page(sbi, inode->i_ino); 299 if (IS_ERR(ipage)) 300 return PTR_ERR(ipage); 301 302 f2fs_wait_on_page_writeback(ipage, NODE, true, true); 303 304 src_addr = inline_data_addr(inode, npage); 305 dst_addr = inline_data_addr(inode, ipage); 306 memcpy(dst_addr, src_addr, MAX_INLINE_DATA(inode)); 307 308 set_inode_flag(inode, FI_INLINE_DATA); 309 set_inode_flag(inode, FI_DATA_EXIST); 310 311 set_page_dirty(ipage); 312 f2fs_put_page(ipage, 1); 313 return 1; 314 } 315 316 if (f2fs_has_inline_data(inode)) { 317 ipage = f2fs_get_node_page(sbi, inode->i_ino); 318 if (IS_ERR(ipage)) 319 return PTR_ERR(ipage); 320 f2fs_truncate_inline_inode(inode, ipage, 0); 321 stat_dec_inline_inode(inode); 322 clear_inode_flag(inode, FI_INLINE_DATA); 323 f2fs_put_page(ipage, 1); 324 } else if (ri && (ri->i_inline & F2FS_INLINE_DATA)) { 325 int ret; 326 327 ret = f2fs_truncate_blocks(inode, 0, false); 328 if (ret) 329 return ret; 330 stat_inc_inline_inode(inode); 331 goto process_inline; 332 } 333 return 0; 334 } 335 336 struct f2fs_dir_entry *f2fs_find_in_inline_dir(struct inode *dir, 337 const struct f2fs_filename *fname, 338 struct page **res_page) 339 { 340 struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb); 341 struct f2fs_dir_entry *de; 342 struct f2fs_dentry_ptr d; 343 struct page *ipage; 344 void *inline_dentry; 345 346 ipage = f2fs_get_node_page(sbi, dir->i_ino); 347 if (IS_ERR(ipage)) { 348 *res_page = ipage; 349 return NULL; 350 } 351 352 inline_dentry = inline_data_addr(dir, ipage); 353 354 make_dentry_ptr_inline(dir, &d, inline_dentry); 355 de = f2fs_find_target_dentry(&d, fname, NULL); 356 unlock_page(ipage); 357 if (IS_ERR(de)) { 358 *res_page = ERR_CAST(de); 359 de = NULL; 360 } 361 if (de) 362 *res_page = ipage; 363 else 364 f2fs_put_page(ipage, 0); 365 366 return de; 367 } 368 369 int f2fs_make_empty_inline_dir(struct inode *inode, struct inode *parent, 370 struct page *ipage) 371 { 372 struct f2fs_dentry_ptr d; 373 void *inline_dentry; 374 375 inline_dentry = inline_data_addr(inode, ipage); 376 377 make_dentry_ptr_inline(inode, &d, inline_dentry); 378 f2fs_do_make_empty_dir(inode, parent, &d); 379 380 set_page_dirty(ipage); 381 382 /* update i_size to MAX_INLINE_DATA */ 383 if (i_size_read(inode) < MAX_INLINE_DATA(inode)) 384 f2fs_i_size_write(inode, MAX_INLINE_DATA(inode)); 385 return 0; 386 } 387 388 /* 389 * NOTE: ipage is grabbed by caller, but if any error occurs, we should 390 * release ipage in this function. 391 */ 392 static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage, 393 void *inline_dentry) 394 { 395 struct page *page; 396 struct dnode_of_data dn; 397 struct f2fs_dentry_block *dentry_blk; 398 struct f2fs_dentry_ptr src, dst; 399 int err; 400 401 page = f2fs_grab_cache_page(dir->i_mapping, 0, true); 402 if (!page) { 403 f2fs_put_page(ipage, 1); 404 return -ENOMEM; 405 } 406 407 set_new_dnode(&dn, dir, ipage, NULL, 0); 408 err = f2fs_reserve_block(&dn, 0); 409 if (err) 410 goto out; 411 412 if (unlikely(dn.data_blkaddr != NEW_ADDR)) { 413 f2fs_put_dnode(&dn); 414 set_sbi_flag(F2FS_P_SB(page), SBI_NEED_FSCK); 415 f2fs_warn(F2FS_P_SB(page), "%s: corrupted inline inode ino=%lx, i_addr[0]:0x%x, run fsck to fix.", 416 __func__, dir->i_ino, dn.data_blkaddr); 417 f2fs_handle_error(F2FS_P_SB(page), ERROR_INVALID_BLKADDR); 418 err = -EFSCORRUPTED; 419 goto out; 420 } 421 422 f2fs_wait_on_page_writeback(page, DATA, true, true); 423 424 dentry_blk = page_address(page); 425 426 /* 427 * Start by zeroing the full block, to ensure that all unused space is 428 * zeroed and no uninitialized memory is leaked to disk. 429 */ 430 memset(dentry_blk, 0, F2FS_BLKSIZE); 431 432 make_dentry_ptr_inline(dir, &src, inline_dentry); 433 make_dentry_ptr_block(dir, &dst, dentry_blk); 434 435 /* copy data from inline dentry block to new dentry block */ 436 memcpy(dst.bitmap, src.bitmap, src.nr_bitmap); 437 memcpy(dst.dentry, src.dentry, SIZE_OF_DIR_ENTRY * src.max); 438 memcpy(dst.filename, src.filename, src.max * F2FS_SLOT_LEN); 439 440 if (!PageUptodate(page)) 441 SetPageUptodate(page); 442 set_page_dirty(page); 443 444 /* clear inline dir and flag after data writeback */ 445 f2fs_truncate_inline_inode(dir, ipage, 0); 446 447 stat_dec_inline_dir(dir); 448 clear_inode_flag(dir, FI_INLINE_DENTRY); 449 450 /* 451 * should retrieve reserved space which was used to keep 452 * inline_dentry's structure for backward compatibility. 453 */ 454 if (!f2fs_sb_has_flexible_inline_xattr(F2FS_I_SB(dir)) && 455 !f2fs_has_inline_xattr(dir)) 456 F2FS_I(dir)->i_inline_xattr_size = 0; 457 458 f2fs_i_depth_write(dir, 1); 459 if (i_size_read(dir) < PAGE_SIZE) 460 f2fs_i_size_write(dir, PAGE_SIZE); 461 out: 462 f2fs_put_page(page, 1); 463 return err; 464 } 465 466 static int f2fs_add_inline_entries(struct inode *dir, void *inline_dentry) 467 { 468 struct f2fs_dentry_ptr d; 469 unsigned long bit_pos = 0; 470 int err = 0; 471 472 make_dentry_ptr_inline(dir, &d, inline_dentry); 473 474 while (bit_pos < d.max) { 475 struct f2fs_dir_entry *de; 476 struct f2fs_filename fname; 477 nid_t ino; 478 umode_t fake_mode; 479 480 if (!test_bit_le(bit_pos, d.bitmap)) { 481 bit_pos++; 482 continue; 483 } 484 485 de = &d.dentry[bit_pos]; 486 487 if (unlikely(!de->name_len)) { 488 bit_pos++; 489 continue; 490 } 491 492 /* 493 * We only need the disk_name and hash to move the dentry. 494 * We don't need the original or casefolded filenames. 495 */ 496 memset(&fname, 0, sizeof(fname)); 497 fname.disk_name.name = d.filename[bit_pos]; 498 fname.disk_name.len = le16_to_cpu(de->name_len); 499 fname.hash = de->hash_code; 500 501 ino = le32_to_cpu(de->ino); 502 fake_mode = fs_ftype_to_dtype(de->file_type) << S_DT_SHIFT; 503 504 err = f2fs_add_regular_entry(dir, &fname, NULL, ino, fake_mode); 505 if (err) 506 goto punch_dentry_pages; 507 508 bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len)); 509 } 510 return 0; 511 punch_dentry_pages: 512 truncate_inode_pages(&dir->i_data, 0); 513 f2fs_truncate_blocks(dir, 0, false); 514 f2fs_remove_dirty_inode(dir); 515 return err; 516 } 517 518 static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage, 519 void *inline_dentry) 520 { 521 void *backup_dentry; 522 int err; 523 524 backup_dentry = f2fs_kmalloc(F2FS_I_SB(dir), 525 MAX_INLINE_DATA(dir), GFP_F2FS_ZERO); 526 if (!backup_dentry) { 527 f2fs_put_page(ipage, 1); 528 return -ENOMEM; 529 } 530 531 memcpy(backup_dentry, inline_dentry, MAX_INLINE_DATA(dir)); 532 f2fs_truncate_inline_inode(dir, ipage, 0); 533 534 unlock_page(ipage); 535 536 err = f2fs_add_inline_entries(dir, backup_dentry); 537 if (err) 538 goto recover; 539 540 lock_page(ipage); 541 542 stat_dec_inline_dir(dir); 543 clear_inode_flag(dir, FI_INLINE_DENTRY); 544 545 /* 546 * should retrieve reserved space which was used to keep 547 * inline_dentry's structure for backward compatibility. 548 */ 549 if (!f2fs_sb_has_flexible_inline_xattr(F2FS_I_SB(dir)) && 550 !f2fs_has_inline_xattr(dir)) 551 F2FS_I(dir)->i_inline_xattr_size = 0; 552 553 kfree(backup_dentry); 554 return 0; 555 recover: 556 lock_page(ipage); 557 f2fs_wait_on_page_writeback(ipage, NODE, true, true); 558 memcpy(inline_dentry, backup_dentry, MAX_INLINE_DATA(dir)); 559 f2fs_i_depth_write(dir, 0); 560 f2fs_i_size_write(dir, MAX_INLINE_DATA(dir)); 561 set_page_dirty(ipage); 562 f2fs_put_page(ipage, 1); 563 564 kfree(backup_dentry); 565 return err; 566 } 567 568 static int do_convert_inline_dir(struct inode *dir, struct page *ipage, 569 void *inline_dentry) 570 { 571 if (!F2FS_I(dir)->i_dir_level) 572 return f2fs_move_inline_dirents(dir, ipage, inline_dentry); 573 else 574 return f2fs_move_rehashed_dirents(dir, ipage, inline_dentry); 575 } 576 577 int f2fs_try_convert_inline_dir(struct inode *dir, struct dentry *dentry) 578 { 579 struct f2fs_sb_info *sbi = F2FS_I_SB(dir); 580 struct page *ipage; 581 struct f2fs_filename fname; 582 void *inline_dentry = NULL; 583 int err = 0; 584 585 if (!f2fs_has_inline_dentry(dir)) 586 return 0; 587 588 f2fs_lock_op(sbi); 589 590 err = f2fs_setup_filename(dir, &dentry->d_name, 0, &fname); 591 if (err) 592 goto out; 593 594 ipage = f2fs_get_node_page(sbi, dir->i_ino); 595 if (IS_ERR(ipage)) { 596 err = PTR_ERR(ipage); 597 goto out_fname; 598 } 599 600 if (f2fs_has_enough_room(dir, ipage, &fname)) { 601 f2fs_put_page(ipage, 1); 602 goto out_fname; 603 } 604 605 inline_dentry = inline_data_addr(dir, ipage); 606 607 err = do_convert_inline_dir(dir, ipage, inline_dentry); 608 if (!err) 609 f2fs_put_page(ipage, 1); 610 out_fname: 611 f2fs_free_filename(&fname); 612 out: 613 f2fs_unlock_op(sbi); 614 return err; 615 } 616 617 int f2fs_add_inline_entry(struct inode *dir, const struct f2fs_filename *fname, 618 struct inode *inode, nid_t ino, umode_t mode) 619 { 620 struct f2fs_sb_info *sbi = F2FS_I_SB(dir); 621 struct page *ipage; 622 unsigned int bit_pos; 623 void *inline_dentry = NULL; 624 struct f2fs_dentry_ptr d; 625 int slots = GET_DENTRY_SLOTS(fname->disk_name.len); 626 struct page *page = NULL; 627 int err = 0; 628 629 ipage = f2fs_get_node_page(sbi, dir->i_ino); 630 if (IS_ERR(ipage)) 631 return PTR_ERR(ipage); 632 633 inline_dentry = inline_data_addr(dir, ipage); 634 make_dentry_ptr_inline(dir, &d, inline_dentry); 635 636 bit_pos = f2fs_room_for_filename(d.bitmap, slots, d.max); 637 if (bit_pos >= d.max) { 638 err = do_convert_inline_dir(dir, ipage, inline_dentry); 639 if (err) 640 return err; 641 err = -EAGAIN; 642 goto out; 643 } 644 645 if (inode) { 646 f2fs_down_write_nested(&F2FS_I(inode)->i_sem, 647 SINGLE_DEPTH_NESTING); 648 page = f2fs_init_inode_metadata(inode, dir, fname, ipage); 649 if (IS_ERR(page)) { 650 err = PTR_ERR(page); 651 goto fail; 652 } 653 } 654 655 f2fs_wait_on_page_writeback(ipage, NODE, true, true); 656 657 f2fs_update_dentry(ino, mode, &d, &fname->disk_name, fname->hash, 658 bit_pos); 659 660 set_page_dirty(ipage); 661 662 /* we don't need to mark_inode_dirty now */ 663 if (inode) { 664 f2fs_i_pino_write(inode, dir->i_ino); 665 666 /* synchronize inode page's data from inode cache */ 667 if (is_inode_flag_set(inode, FI_NEW_INODE)) 668 f2fs_update_inode(inode, page); 669 670 f2fs_put_page(page, 1); 671 } 672 673 f2fs_update_parent_metadata(dir, inode, 0); 674 fail: 675 if (inode) 676 f2fs_up_write(&F2FS_I(inode)->i_sem); 677 out: 678 f2fs_put_page(ipage, 1); 679 return err; 680 } 681 682 void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry, struct page *page, 683 struct inode *dir, struct inode *inode) 684 { 685 struct f2fs_dentry_ptr d; 686 void *inline_dentry; 687 int slots = GET_DENTRY_SLOTS(le16_to_cpu(dentry->name_len)); 688 unsigned int bit_pos; 689 int i; 690 691 lock_page(page); 692 f2fs_wait_on_page_writeback(page, NODE, true, true); 693 694 inline_dentry = inline_data_addr(dir, page); 695 make_dentry_ptr_inline(dir, &d, inline_dentry); 696 697 bit_pos = dentry - d.dentry; 698 for (i = 0; i < slots; i++) 699 __clear_bit_le(bit_pos + i, d.bitmap); 700 701 set_page_dirty(page); 702 f2fs_put_page(page, 1); 703 704 dir->i_mtime = inode_set_ctime_current(dir); 705 f2fs_mark_inode_dirty_sync(dir, false); 706 707 if (inode) 708 f2fs_drop_nlink(dir, inode); 709 } 710 711 bool f2fs_empty_inline_dir(struct inode *dir) 712 { 713 struct f2fs_sb_info *sbi = F2FS_I_SB(dir); 714 struct page *ipage; 715 unsigned int bit_pos = 2; 716 void *inline_dentry; 717 struct f2fs_dentry_ptr d; 718 719 ipage = f2fs_get_node_page(sbi, dir->i_ino); 720 if (IS_ERR(ipage)) 721 return false; 722 723 inline_dentry = inline_data_addr(dir, ipage); 724 make_dentry_ptr_inline(dir, &d, inline_dentry); 725 726 bit_pos = find_next_bit_le(d.bitmap, d.max, bit_pos); 727 728 f2fs_put_page(ipage, 1); 729 730 if (bit_pos < d.max) 731 return false; 732 733 return true; 734 } 735 736 int f2fs_read_inline_dir(struct file *file, struct dir_context *ctx, 737 struct fscrypt_str *fstr) 738 { 739 struct inode *inode = file_inode(file); 740 struct page *ipage = NULL; 741 struct f2fs_dentry_ptr d; 742 void *inline_dentry = NULL; 743 int err; 744 745 make_dentry_ptr_inline(inode, &d, inline_dentry); 746 747 if (ctx->pos == d.max) 748 return 0; 749 750 ipage = f2fs_get_node_page(F2FS_I_SB(inode), inode->i_ino); 751 if (IS_ERR(ipage)) 752 return PTR_ERR(ipage); 753 754 /* 755 * f2fs_readdir was protected by inode.i_rwsem, it is safe to access 756 * ipage without page's lock held. 757 */ 758 unlock_page(ipage); 759 760 inline_dentry = inline_data_addr(inode, ipage); 761 762 make_dentry_ptr_inline(inode, &d, inline_dentry); 763 764 err = f2fs_fill_dentries(ctx, &d, 0, fstr); 765 if (!err) 766 ctx->pos = d.max; 767 768 f2fs_put_page(ipage, 0); 769 return err < 0 ? err : 0; 770 } 771 772 int f2fs_inline_data_fiemap(struct inode *inode, 773 struct fiemap_extent_info *fieinfo, __u64 start, __u64 len) 774 { 775 __u64 byteaddr, ilen; 776 __u32 flags = FIEMAP_EXTENT_DATA_INLINE | FIEMAP_EXTENT_NOT_ALIGNED | 777 FIEMAP_EXTENT_LAST; 778 struct node_info ni; 779 struct page *ipage; 780 int err = 0; 781 782 ipage = f2fs_get_node_page(F2FS_I_SB(inode), inode->i_ino); 783 if (IS_ERR(ipage)) 784 return PTR_ERR(ipage); 785 786 if ((S_ISREG(inode->i_mode) || S_ISLNK(inode->i_mode)) && 787 !f2fs_has_inline_data(inode)) { 788 err = -EAGAIN; 789 goto out; 790 } 791 792 if (S_ISDIR(inode->i_mode) && !f2fs_has_inline_dentry(inode)) { 793 err = -EAGAIN; 794 goto out; 795 } 796 797 ilen = min_t(size_t, MAX_INLINE_DATA(inode), i_size_read(inode)); 798 if (start >= ilen) 799 goto out; 800 if (start + len < ilen) 801 ilen = start + len; 802 ilen -= start; 803 804 err = f2fs_get_node_info(F2FS_I_SB(inode), inode->i_ino, &ni, false); 805 if (err) 806 goto out; 807 808 byteaddr = (__u64)ni.blk_addr << inode->i_sb->s_blocksize_bits; 809 byteaddr += (char *)inline_data_addr(inode, ipage) - 810 (char *)F2FS_INODE(ipage); 811 err = fiemap_fill_next_extent(fieinfo, start, byteaddr, ilen, flags); 812 trace_f2fs_fiemap(inode, start, byteaddr, ilen, flags, err); 813 out: 814 f2fs_put_page(ipage, 1); 815 return err; 816 } 817