1 /* 2 * fs/f2fs/inline.c 3 * Copyright (c) 2013, Intel Corporation 4 * Authors: Huajun Li <huajun.li@intel.com> 5 * Haicheng Li <haicheng.li@intel.com> 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License version 2 as 8 * published by the Free Software Foundation. 9 */ 10 11 #include <linux/fs.h> 12 #include <linux/f2fs_fs.h> 13 14 #include "f2fs.h" 15 #include "node.h" 16 17 bool f2fs_may_inline_data(struct inode *inode) 18 { 19 if (f2fs_is_atomic_file(inode)) 20 return false; 21 22 if (!S_ISREG(inode->i_mode) && !S_ISLNK(inode->i_mode)) 23 return false; 24 25 if (i_size_read(inode) > MAX_INLINE_DATA) 26 return false; 27 28 if (f2fs_encrypted_inode(inode) && S_ISREG(inode->i_mode)) 29 return false; 30 31 return true; 32 } 33 34 bool f2fs_may_inline_dentry(struct inode *inode) 35 { 36 if (!test_opt(F2FS_I_SB(inode), INLINE_DENTRY)) 37 return false; 38 39 if (!S_ISDIR(inode->i_mode)) 40 return false; 41 42 return true; 43 } 44 45 void read_inline_data(struct page *page, struct page *ipage) 46 { 47 void *src_addr, *dst_addr; 48 49 if (PageUptodate(page)) 50 return; 51 52 f2fs_bug_on(F2FS_P_SB(page), page->index); 53 54 zero_user_segment(page, MAX_INLINE_DATA, PAGE_SIZE); 55 56 /* Copy the whole inline data block */ 57 src_addr = inline_data_addr(ipage); 58 dst_addr = kmap_atomic(page); 59 memcpy(dst_addr, src_addr, MAX_INLINE_DATA); 60 flush_dcache_page(page); 61 kunmap_atomic(dst_addr); 62 if (!PageUptodate(page)) 63 SetPageUptodate(page); 64 } 65 66 bool truncate_inline_inode(struct page *ipage, u64 from) 67 { 68 void *addr; 69 70 if (from >= MAX_INLINE_DATA) 71 return false; 72 73 addr = inline_data_addr(ipage); 74 75 f2fs_wait_on_page_writeback(ipage, NODE, true); 76 memset(addr + from, 0, MAX_INLINE_DATA - from); 77 set_page_dirty(ipage); 78 return true; 79 } 80 81 int f2fs_read_inline_data(struct inode *inode, struct page *page) 82 { 83 struct page *ipage; 84 85 ipage = get_node_page(F2FS_I_SB(inode), inode->i_ino); 86 if (IS_ERR(ipage)) { 87 unlock_page(page); 88 return PTR_ERR(ipage); 89 } 90 91 if (!f2fs_has_inline_data(inode)) { 92 f2fs_put_page(ipage, 1); 93 return -EAGAIN; 94 } 95 96 if (page->index) 97 zero_user_segment(page, 0, PAGE_SIZE); 98 else 99 read_inline_data(page, ipage); 100 101 if (!PageUptodate(page)) 102 SetPageUptodate(page); 103 f2fs_put_page(ipage, 1); 104 unlock_page(page); 105 return 0; 106 } 107 108 int f2fs_convert_inline_page(struct dnode_of_data *dn, struct page *page) 109 { 110 struct f2fs_io_info fio = { 111 .sbi = F2FS_I_SB(dn->inode), 112 .type = DATA, 113 .op = REQ_OP_WRITE, 114 .op_flags = REQ_SYNC | REQ_PRIO, 115 .page = page, 116 .encrypted_page = NULL, 117 }; 118 int dirty, err; 119 120 if (!f2fs_exist_data(dn->inode)) 121 goto clear_out; 122 123 err = f2fs_reserve_block(dn, 0); 124 if (err) 125 return err; 126 127 f2fs_bug_on(F2FS_P_SB(page), PageWriteback(page)); 128 129 read_inline_data(page, dn->inode_page); 130 set_page_dirty(page); 131 132 /* clear dirty state */ 133 dirty = clear_page_dirty_for_io(page); 134 135 /* write data page to try to make data consistent */ 136 set_page_writeback(page); 137 fio.old_blkaddr = dn->data_blkaddr; 138 write_data_page(dn, &fio); 139 f2fs_wait_on_page_writeback(page, DATA, true); 140 if (dirty) { 141 inode_dec_dirty_pages(dn->inode); 142 remove_dirty_inode(dn->inode); 143 } 144 145 /* this converted inline_data should be recovered. */ 146 set_inode_flag(dn->inode, FI_APPEND_WRITE); 147 148 /* clear inline data and flag after data writeback */ 149 truncate_inline_inode(dn->inode_page, 0); 150 clear_inline_node(dn->inode_page); 151 clear_out: 152 stat_dec_inline_inode(dn->inode); 153 f2fs_clear_inline_inode(dn->inode); 154 f2fs_put_dnode(dn); 155 return 0; 156 } 157 158 int f2fs_convert_inline_inode(struct inode *inode) 159 { 160 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 161 struct dnode_of_data dn; 162 struct page *ipage, *page; 163 int err = 0; 164 165 if (!f2fs_has_inline_data(inode)) 166 return 0; 167 168 page = f2fs_grab_cache_page(inode->i_mapping, 0, false); 169 if (!page) 170 return -ENOMEM; 171 172 f2fs_lock_op(sbi); 173 174 ipage = get_node_page(sbi, inode->i_ino); 175 if (IS_ERR(ipage)) { 176 err = PTR_ERR(ipage); 177 goto out; 178 } 179 180 set_new_dnode(&dn, inode, ipage, ipage, 0); 181 182 if (f2fs_has_inline_data(inode)) 183 err = f2fs_convert_inline_page(&dn, page); 184 185 f2fs_put_dnode(&dn); 186 out: 187 f2fs_unlock_op(sbi); 188 189 f2fs_put_page(page, 1); 190 191 f2fs_balance_fs(sbi, dn.node_changed); 192 193 return err; 194 } 195 196 int f2fs_write_inline_data(struct inode *inode, struct page *page) 197 { 198 void *src_addr, *dst_addr; 199 struct dnode_of_data dn; 200 int err; 201 202 set_new_dnode(&dn, inode, NULL, NULL, 0); 203 err = get_dnode_of_data(&dn, 0, LOOKUP_NODE); 204 if (err) 205 return err; 206 207 if (!f2fs_has_inline_data(inode)) { 208 f2fs_put_dnode(&dn); 209 return -EAGAIN; 210 } 211 212 f2fs_bug_on(F2FS_I_SB(inode), page->index); 213 214 f2fs_wait_on_page_writeback(dn.inode_page, NODE, true); 215 src_addr = kmap_atomic(page); 216 dst_addr = inline_data_addr(dn.inode_page); 217 memcpy(dst_addr, src_addr, MAX_INLINE_DATA); 218 kunmap_atomic(src_addr); 219 set_page_dirty(dn.inode_page); 220 221 set_inode_flag(inode, FI_APPEND_WRITE); 222 set_inode_flag(inode, FI_DATA_EXIST); 223 224 clear_inline_node(dn.inode_page); 225 f2fs_put_dnode(&dn); 226 return 0; 227 } 228 229 bool recover_inline_data(struct inode *inode, struct page *npage) 230 { 231 struct f2fs_sb_info *sbi = F2FS_I_SB(inode); 232 struct f2fs_inode *ri = NULL; 233 void *src_addr, *dst_addr; 234 struct page *ipage; 235 236 /* 237 * The inline_data recovery policy is as follows. 238 * [prev.] [next] of inline_data flag 239 * o o -> recover inline_data 240 * o x -> remove inline_data, and then recover data blocks 241 * x o -> remove inline_data, and then recover inline_data 242 * x x -> recover data blocks 243 */ 244 if (IS_INODE(npage)) 245 ri = F2FS_INODE(npage); 246 247 if (f2fs_has_inline_data(inode) && 248 ri && (ri->i_inline & F2FS_INLINE_DATA)) { 249 process_inline: 250 ipage = get_node_page(sbi, inode->i_ino); 251 f2fs_bug_on(sbi, IS_ERR(ipage)); 252 253 f2fs_wait_on_page_writeback(ipage, NODE, true); 254 255 src_addr = inline_data_addr(npage); 256 dst_addr = inline_data_addr(ipage); 257 memcpy(dst_addr, src_addr, MAX_INLINE_DATA); 258 259 set_inode_flag(inode, FI_INLINE_DATA); 260 set_inode_flag(inode, FI_DATA_EXIST); 261 262 set_page_dirty(ipage); 263 f2fs_put_page(ipage, 1); 264 return true; 265 } 266 267 if (f2fs_has_inline_data(inode)) { 268 ipage = get_node_page(sbi, inode->i_ino); 269 f2fs_bug_on(sbi, IS_ERR(ipage)); 270 if (!truncate_inline_inode(ipage, 0)) 271 return false; 272 f2fs_clear_inline_inode(inode); 273 f2fs_put_page(ipage, 1); 274 } else if (ri && (ri->i_inline & F2FS_INLINE_DATA)) { 275 if (truncate_blocks(inode, 0, false)) 276 return false; 277 goto process_inline; 278 } 279 return false; 280 } 281 282 struct f2fs_dir_entry *find_in_inline_dir(struct inode *dir, 283 struct fscrypt_name *fname, struct page **res_page) 284 { 285 struct f2fs_sb_info *sbi = F2FS_SB(dir->i_sb); 286 struct f2fs_inline_dentry *inline_dentry; 287 struct qstr name = FSTR_TO_QSTR(&fname->disk_name); 288 struct f2fs_dir_entry *de; 289 struct f2fs_dentry_ptr d; 290 struct page *ipage; 291 f2fs_hash_t namehash; 292 293 ipage = get_node_page(sbi, dir->i_ino); 294 if (IS_ERR(ipage)) { 295 *res_page = ipage; 296 return NULL; 297 } 298 299 namehash = f2fs_dentry_hash(&name); 300 301 inline_dentry = inline_data_addr(ipage); 302 303 make_dentry_ptr(NULL, &d, (void *)inline_dentry, 2); 304 de = find_target_dentry(fname, namehash, NULL, &d); 305 unlock_page(ipage); 306 if (de) 307 *res_page = ipage; 308 else 309 f2fs_put_page(ipage, 0); 310 311 return de; 312 } 313 314 int make_empty_inline_dir(struct inode *inode, struct inode *parent, 315 struct page *ipage) 316 { 317 struct f2fs_inline_dentry *dentry_blk; 318 struct f2fs_dentry_ptr d; 319 320 dentry_blk = inline_data_addr(ipage); 321 322 make_dentry_ptr(NULL, &d, (void *)dentry_blk, 2); 323 do_make_empty_dir(inode, parent, &d); 324 325 set_page_dirty(ipage); 326 327 /* update i_size to MAX_INLINE_DATA */ 328 if (i_size_read(inode) < MAX_INLINE_DATA) 329 f2fs_i_size_write(inode, MAX_INLINE_DATA); 330 return 0; 331 } 332 333 /* 334 * NOTE: ipage is grabbed by caller, but if any error occurs, we should 335 * release ipage in this function. 336 */ 337 static int f2fs_move_inline_dirents(struct inode *dir, struct page *ipage, 338 struct f2fs_inline_dentry *inline_dentry) 339 { 340 struct page *page; 341 struct dnode_of_data dn; 342 struct f2fs_dentry_block *dentry_blk; 343 int err; 344 345 page = f2fs_grab_cache_page(dir->i_mapping, 0, false); 346 if (!page) { 347 f2fs_put_page(ipage, 1); 348 return -ENOMEM; 349 } 350 351 set_new_dnode(&dn, dir, ipage, NULL, 0); 352 err = f2fs_reserve_block(&dn, 0); 353 if (err) 354 goto out; 355 356 f2fs_wait_on_page_writeback(page, DATA, true); 357 zero_user_segment(page, MAX_INLINE_DATA, PAGE_SIZE); 358 359 dentry_blk = kmap_atomic(page); 360 361 /* copy data from inline dentry block to new dentry block */ 362 memcpy(dentry_blk->dentry_bitmap, inline_dentry->dentry_bitmap, 363 INLINE_DENTRY_BITMAP_SIZE); 364 memset(dentry_blk->dentry_bitmap + INLINE_DENTRY_BITMAP_SIZE, 0, 365 SIZE_OF_DENTRY_BITMAP - INLINE_DENTRY_BITMAP_SIZE); 366 /* 367 * we do not need to zero out remainder part of dentry and filename 368 * field, since we have used bitmap for marking the usage status of 369 * them, besides, we can also ignore copying/zeroing reserved space 370 * of dentry block, because them haven't been used so far. 371 */ 372 memcpy(dentry_blk->dentry, inline_dentry->dentry, 373 sizeof(struct f2fs_dir_entry) * NR_INLINE_DENTRY); 374 memcpy(dentry_blk->filename, inline_dentry->filename, 375 NR_INLINE_DENTRY * F2FS_SLOT_LEN); 376 377 kunmap_atomic(dentry_blk); 378 if (!PageUptodate(page)) 379 SetPageUptodate(page); 380 set_page_dirty(page); 381 382 /* clear inline dir and flag after data writeback */ 383 truncate_inline_inode(ipage, 0); 384 385 stat_dec_inline_dir(dir); 386 clear_inode_flag(dir, FI_INLINE_DENTRY); 387 388 f2fs_i_depth_write(dir, 1); 389 if (i_size_read(dir) < PAGE_SIZE) 390 f2fs_i_size_write(dir, PAGE_SIZE); 391 out: 392 f2fs_put_page(page, 1); 393 return err; 394 } 395 396 static int f2fs_add_inline_entries(struct inode *dir, 397 struct f2fs_inline_dentry *inline_dentry) 398 { 399 struct f2fs_dentry_ptr d; 400 unsigned long bit_pos = 0; 401 int err = 0; 402 403 make_dentry_ptr(NULL, &d, (void *)inline_dentry, 2); 404 405 while (bit_pos < d.max) { 406 struct f2fs_dir_entry *de; 407 struct qstr new_name; 408 nid_t ino; 409 umode_t fake_mode; 410 411 if (!test_bit_le(bit_pos, d.bitmap)) { 412 bit_pos++; 413 continue; 414 } 415 416 de = &d.dentry[bit_pos]; 417 418 if (unlikely(!de->name_len)) { 419 bit_pos++; 420 continue; 421 } 422 423 new_name.name = d.filename[bit_pos]; 424 new_name.len = le16_to_cpu(de->name_len); 425 426 ino = le32_to_cpu(de->ino); 427 fake_mode = get_de_type(de) << S_SHIFT; 428 429 err = f2fs_add_regular_entry(dir, &new_name, NULL, NULL, 430 ino, fake_mode); 431 if (err) 432 goto punch_dentry_pages; 433 434 bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len)); 435 } 436 return 0; 437 punch_dentry_pages: 438 truncate_inode_pages(&dir->i_data, 0); 439 truncate_blocks(dir, 0, false); 440 remove_dirty_inode(dir); 441 return err; 442 } 443 444 static int f2fs_move_rehashed_dirents(struct inode *dir, struct page *ipage, 445 struct f2fs_inline_dentry *inline_dentry) 446 { 447 struct f2fs_inline_dentry *backup_dentry; 448 int err; 449 450 backup_dentry = f2fs_kmalloc(F2FS_I_SB(dir), 451 sizeof(struct f2fs_inline_dentry), GFP_F2FS_ZERO); 452 if (!backup_dentry) { 453 f2fs_put_page(ipage, 1); 454 return -ENOMEM; 455 } 456 457 memcpy(backup_dentry, inline_dentry, MAX_INLINE_DATA); 458 truncate_inline_inode(ipage, 0); 459 460 unlock_page(ipage); 461 462 err = f2fs_add_inline_entries(dir, backup_dentry); 463 if (err) 464 goto recover; 465 466 lock_page(ipage); 467 468 stat_dec_inline_dir(dir); 469 clear_inode_flag(dir, FI_INLINE_DENTRY); 470 kfree(backup_dentry); 471 return 0; 472 recover: 473 lock_page(ipage); 474 memcpy(inline_dentry, backup_dentry, MAX_INLINE_DATA); 475 f2fs_i_depth_write(dir, 0); 476 f2fs_i_size_write(dir, MAX_INLINE_DATA); 477 set_page_dirty(ipage); 478 f2fs_put_page(ipage, 1); 479 480 kfree(backup_dentry); 481 return err; 482 } 483 484 static int f2fs_convert_inline_dir(struct inode *dir, struct page *ipage, 485 struct f2fs_inline_dentry *inline_dentry) 486 { 487 if (!F2FS_I(dir)->i_dir_level) 488 return f2fs_move_inline_dirents(dir, ipage, inline_dentry); 489 else 490 return f2fs_move_rehashed_dirents(dir, ipage, inline_dentry); 491 } 492 493 int f2fs_add_inline_entry(struct inode *dir, const struct qstr *new_name, 494 const struct qstr *orig_name, 495 struct inode *inode, nid_t ino, umode_t mode) 496 { 497 struct f2fs_sb_info *sbi = F2FS_I_SB(dir); 498 struct page *ipage; 499 unsigned int bit_pos; 500 f2fs_hash_t name_hash; 501 struct f2fs_inline_dentry *dentry_blk = NULL; 502 struct f2fs_dentry_ptr d; 503 int slots = GET_DENTRY_SLOTS(new_name->len); 504 struct page *page = NULL; 505 int err = 0; 506 507 ipage = get_node_page(sbi, dir->i_ino); 508 if (IS_ERR(ipage)) 509 return PTR_ERR(ipage); 510 511 dentry_blk = inline_data_addr(ipage); 512 bit_pos = room_for_filename(&dentry_blk->dentry_bitmap, 513 slots, NR_INLINE_DENTRY); 514 if (bit_pos >= NR_INLINE_DENTRY) { 515 err = f2fs_convert_inline_dir(dir, ipage, dentry_blk); 516 if (err) 517 return err; 518 err = -EAGAIN; 519 goto out; 520 } 521 522 if (inode) { 523 down_write(&F2FS_I(inode)->i_sem); 524 page = init_inode_metadata(inode, dir, new_name, 525 orig_name, ipage); 526 if (IS_ERR(page)) { 527 err = PTR_ERR(page); 528 goto fail; 529 } 530 if (f2fs_encrypted_inode(dir)) 531 file_set_enc_name(inode); 532 } 533 534 f2fs_wait_on_page_writeback(ipage, NODE, true); 535 536 name_hash = f2fs_dentry_hash(new_name); 537 make_dentry_ptr(NULL, &d, (void *)dentry_blk, 2); 538 f2fs_update_dentry(ino, mode, &d, new_name, name_hash, bit_pos); 539 540 set_page_dirty(ipage); 541 542 /* we don't need to mark_inode_dirty now */ 543 if (inode) { 544 f2fs_i_pino_write(inode, dir->i_ino); 545 f2fs_put_page(page, 1); 546 } 547 548 update_parent_metadata(dir, inode, 0); 549 fail: 550 if (inode) 551 up_write(&F2FS_I(inode)->i_sem); 552 out: 553 f2fs_put_page(ipage, 1); 554 return err; 555 } 556 557 void f2fs_delete_inline_entry(struct f2fs_dir_entry *dentry, struct page *page, 558 struct inode *dir, struct inode *inode) 559 { 560 struct f2fs_inline_dentry *inline_dentry; 561 int slots = GET_DENTRY_SLOTS(le16_to_cpu(dentry->name_len)); 562 unsigned int bit_pos; 563 int i; 564 565 lock_page(page); 566 f2fs_wait_on_page_writeback(page, NODE, true); 567 568 inline_dentry = inline_data_addr(page); 569 bit_pos = dentry - inline_dentry->dentry; 570 for (i = 0; i < slots; i++) 571 __clear_bit_le(bit_pos + i, 572 &inline_dentry->dentry_bitmap); 573 574 set_page_dirty(page); 575 f2fs_put_page(page, 1); 576 577 dir->i_ctime = dir->i_mtime = current_time(dir); 578 f2fs_mark_inode_dirty_sync(dir, false); 579 580 if (inode) 581 f2fs_drop_nlink(dir, inode); 582 } 583 584 bool f2fs_empty_inline_dir(struct inode *dir) 585 { 586 struct f2fs_sb_info *sbi = F2FS_I_SB(dir); 587 struct page *ipage; 588 unsigned int bit_pos = 2; 589 struct f2fs_inline_dentry *dentry_blk; 590 591 ipage = get_node_page(sbi, dir->i_ino); 592 if (IS_ERR(ipage)) 593 return false; 594 595 dentry_blk = inline_data_addr(ipage); 596 bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap, 597 NR_INLINE_DENTRY, 598 bit_pos); 599 600 f2fs_put_page(ipage, 1); 601 602 if (bit_pos < NR_INLINE_DENTRY) 603 return false; 604 605 return true; 606 } 607 608 int f2fs_read_inline_dir(struct file *file, struct dir_context *ctx, 609 struct fscrypt_str *fstr) 610 { 611 struct inode *inode = file_inode(file); 612 struct f2fs_inline_dentry *inline_dentry = NULL; 613 struct page *ipage = NULL; 614 struct f2fs_dentry_ptr d; 615 int err; 616 617 if (ctx->pos == NR_INLINE_DENTRY) 618 return 0; 619 620 ipage = get_node_page(F2FS_I_SB(inode), inode->i_ino); 621 if (IS_ERR(ipage)) 622 return PTR_ERR(ipage); 623 624 inline_dentry = inline_data_addr(ipage); 625 626 make_dentry_ptr(inode, &d, (void *)inline_dentry, 2); 627 628 err = f2fs_fill_dentries(ctx, &d, 0, fstr); 629 if (!err) 630 ctx->pos = NR_INLINE_DENTRY; 631 632 f2fs_put_page(ipage, 1); 633 return err < 0 ? err : 0; 634 } 635 636 int f2fs_inline_data_fiemap(struct inode *inode, 637 struct fiemap_extent_info *fieinfo, __u64 start, __u64 len) 638 { 639 __u64 byteaddr, ilen; 640 __u32 flags = FIEMAP_EXTENT_DATA_INLINE | FIEMAP_EXTENT_NOT_ALIGNED | 641 FIEMAP_EXTENT_LAST; 642 struct node_info ni; 643 struct page *ipage; 644 int err = 0; 645 646 ipage = get_node_page(F2FS_I_SB(inode), inode->i_ino); 647 if (IS_ERR(ipage)) 648 return PTR_ERR(ipage); 649 650 if (!f2fs_has_inline_data(inode)) { 651 err = -EAGAIN; 652 goto out; 653 } 654 655 ilen = min_t(size_t, MAX_INLINE_DATA, i_size_read(inode)); 656 if (start >= ilen) 657 goto out; 658 if (start + len < ilen) 659 ilen = start + len; 660 ilen -= start; 661 662 get_node_info(F2FS_I_SB(inode), inode->i_ino, &ni); 663 byteaddr = (__u64)ni.blk_addr << inode->i_sb->s_blocksize_bits; 664 byteaddr += (char *)inline_data_addr(ipage) - (char *)F2FS_INODE(ipage); 665 err = fiemap_fill_next_extent(fieinfo, start, byteaddr, ilen, flags); 666 out: 667 f2fs_put_page(ipage, 1); 668 return err; 669 } 670