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 <asm/unaligned.h> 9 #include <linux/fs.h> 10 #include <linux/f2fs_fs.h> 11 #include <linux/sched/signal.h> 12 #include <linux/unicode.h> 13 #include "f2fs.h" 14 #include "node.h" 15 #include "acl.h" 16 #include "xattr.h" 17 #include <trace/events/f2fs.h> 18 19 static unsigned long dir_blocks(struct inode *inode) 20 { 21 return ((unsigned long long) (i_size_read(inode) + PAGE_SIZE - 1)) 22 >> PAGE_SHIFT; 23 } 24 25 static unsigned int dir_buckets(unsigned int level, int dir_level) 26 { 27 if (level + dir_level < MAX_DIR_HASH_DEPTH / 2) 28 return 1 << (level + dir_level); 29 else 30 return MAX_DIR_BUCKETS; 31 } 32 33 static unsigned int bucket_blocks(unsigned int level) 34 { 35 if (level < MAX_DIR_HASH_DEPTH / 2) 36 return 2; 37 else 38 return 4; 39 } 40 41 static unsigned char f2fs_filetype_table[F2FS_FT_MAX] = { 42 [F2FS_FT_UNKNOWN] = DT_UNKNOWN, 43 [F2FS_FT_REG_FILE] = DT_REG, 44 [F2FS_FT_DIR] = DT_DIR, 45 [F2FS_FT_CHRDEV] = DT_CHR, 46 [F2FS_FT_BLKDEV] = DT_BLK, 47 [F2FS_FT_FIFO] = DT_FIFO, 48 [F2FS_FT_SOCK] = DT_SOCK, 49 [F2FS_FT_SYMLINK] = DT_LNK, 50 }; 51 52 static unsigned char f2fs_type_by_mode[S_IFMT >> S_SHIFT] = { 53 [S_IFREG >> S_SHIFT] = F2FS_FT_REG_FILE, 54 [S_IFDIR >> S_SHIFT] = F2FS_FT_DIR, 55 [S_IFCHR >> S_SHIFT] = F2FS_FT_CHRDEV, 56 [S_IFBLK >> S_SHIFT] = F2FS_FT_BLKDEV, 57 [S_IFIFO >> S_SHIFT] = F2FS_FT_FIFO, 58 [S_IFSOCK >> S_SHIFT] = F2FS_FT_SOCK, 59 [S_IFLNK >> S_SHIFT] = F2FS_FT_SYMLINK, 60 }; 61 62 static void set_de_type(struct f2fs_dir_entry *de, umode_t mode) 63 { 64 de->file_type = f2fs_type_by_mode[(mode & S_IFMT) >> S_SHIFT]; 65 } 66 67 unsigned char f2fs_get_de_type(struct f2fs_dir_entry *de) 68 { 69 if (de->file_type < F2FS_FT_MAX) 70 return f2fs_filetype_table[de->file_type]; 71 return DT_UNKNOWN; 72 } 73 74 /* If @dir is casefolded, initialize @fname->cf_name from @fname->usr_fname. */ 75 int f2fs_init_casefolded_name(const struct inode *dir, 76 struct f2fs_filename *fname) 77 { 78 #ifdef CONFIG_UNICODE 79 struct super_block *sb = dir->i_sb; 80 struct f2fs_sb_info *sbi = F2FS_SB(sb); 81 82 if (IS_CASEFOLDED(dir)) { 83 fname->cf_name.name = f2fs_kmalloc(sbi, F2FS_NAME_LEN, 84 GFP_NOFS); 85 if (!fname->cf_name.name) 86 return -ENOMEM; 87 fname->cf_name.len = utf8_casefold(sb->s_encoding, 88 fname->usr_fname, 89 fname->cf_name.name, 90 F2FS_NAME_LEN); 91 if ((int)fname->cf_name.len <= 0) { 92 kfree(fname->cf_name.name); 93 fname->cf_name.name = NULL; 94 if (sb_has_strict_encoding(sb)) 95 return -EINVAL; 96 /* fall back to treating name as opaque byte sequence */ 97 } 98 } 99 #endif 100 return 0; 101 } 102 103 static int __f2fs_setup_filename(const struct inode *dir, 104 const struct fscrypt_name *crypt_name, 105 struct f2fs_filename *fname) 106 { 107 int err; 108 109 memset(fname, 0, sizeof(*fname)); 110 111 fname->usr_fname = crypt_name->usr_fname; 112 fname->disk_name = crypt_name->disk_name; 113 #ifdef CONFIG_FS_ENCRYPTION 114 fname->crypto_buf = crypt_name->crypto_buf; 115 #endif 116 if (crypt_name->is_nokey_name) { 117 /* hash was decoded from the no-key name */ 118 fname->hash = cpu_to_le32(crypt_name->hash); 119 } else { 120 err = f2fs_init_casefolded_name(dir, fname); 121 if (err) { 122 f2fs_free_filename(fname); 123 return err; 124 } 125 f2fs_hash_filename(dir, fname); 126 } 127 return 0; 128 } 129 130 /* 131 * Prepare to search for @iname in @dir. This is similar to 132 * fscrypt_setup_filename(), but this also handles computing the casefolded name 133 * and the f2fs dirhash if needed, then packing all the information about this 134 * filename up into a 'struct f2fs_filename'. 135 */ 136 int f2fs_setup_filename(struct inode *dir, const struct qstr *iname, 137 int lookup, struct f2fs_filename *fname) 138 { 139 struct fscrypt_name crypt_name; 140 int err; 141 142 err = fscrypt_setup_filename(dir, iname, lookup, &crypt_name); 143 if (err) 144 return err; 145 146 return __f2fs_setup_filename(dir, &crypt_name, fname); 147 } 148 149 /* 150 * Prepare to look up @dentry in @dir. This is similar to 151 * fscrypt_prepare_lookup(), but this also handles computing the casefolded name 152 * and the f2fs dirhash if needed, then packing all the information about this 153 * filename up into a 'struct f2fs_filename'. 154 */ 155 int f2fs_prepare_lookup(struct inode *dir, struct dentry *dentry, 156 struct f2fs_filename *fname) 157 { 158 struct fscrypt_name crypt_name; 159 int err; 160 161 err = fscrypt_prepare_lookup(dir, dentry, &crypt_name); 162 if (err) 163 return err; 164 165 return __f2fs_setup_filename(dir, &crypt_name, fname); 166 } 167 168 void f2fs_free_filename(struct f2fs_filename *fname) 169 { 170 #ifdef CONFIG_FS_ENCRYPTION 171 kfree(fname->crypto_buf.name); 172 fname->crypto_buf.name = NULL; 173 #endif 174 #ifdef CONFIG_UNICODE 175 kfree(fname->cf_name.name); 176 fname->cf_name.name = NULL; 177 #endif 178 } 179 180 static unsigned long dir_block_index(unsigned int level, 181 int dir_level, unsigned int idx) 182 { 183 unsigned long i; 184 unsigned long bidx = 0; 185 186 for (i = 0; i < level; i++) 187 bidx += dir_buckets(i, dir_level) * bucket_blocks(i); 188 bidx += idx * bucket_blocks(level); 189 return bidx; 190 } 191 192 static struct f2fs_dir_entry *find_in_block(struct inode *dir, 193 struct page *dentry_page, 194 const struct f2fs_filename *fname, 195 int *max_slots) 196 { 197 struct f2fs_dentry_block *dentry_blk; 198 struct f2fs_dentry_ptr d; 199 200 dentry_blk = (struct f2fs_dentry_block *)page_address(dentry_page); 201 202 make_dentry_ptr_block(dir, &d, dentry_blk); 203 return f2fs_find_target_dentry(&d, fname, max_slots); 204 } 205 206 #ifdef CONFIG_UNICODE 207 /* 208 * Test whether a case-insensitive directory entry matches the filename 209 * being searched for. 210 * 211 * Returns 1 for a match, 0 for no match, and -errno on an error. 212 */ 213 static int f2fs_match_ci_name(const struct inode *dir, const struct qstr *name, 214 const u8 *de_name, u32 de_name_len) 215 { 216 const struct super_block *sb = dir->i_sb; 217 const struct unicode_map *um = sb->s_encoding; 218 struct fscrypt_str decrypted_name = FSTR_INIT(NULL, de_name_len); 219 struct qstr entry = QSTR_INIT(de_name, de_name_len); 220 int res; 221 222 if (IS_ENCRYPTED(dir)) { 223 const struct fscrypt_str encrypted_name = 224 FSTR_INIT((u8 *)de_name, de_name_len); 225 226 if (WARN_ON_ONCE(!fscrypt_has_encryption_key(dir))) 227 return -EINVAL; 228 229 decrypted_name.name = kmalloc(de_name_len, GFP_KERNEL); 230 if (!decrypted_name.name) 231 return -ENOMEM; 232 res = fscrypt_fname_disk_to_usr(dir, 0, 0, &encrypted_name, 233 &decrypted_name); 234 if (res < 0) 235 goto out; 236 entry.name = decrypted_name.name; 237 entry.len = decrypted_name.len; 238 } 239 240 res = utf8_strncasecmp_folded(um, name, &entry); 241 /* 242 * In strict mode, ignore invalid names. In non-strict mode, 243 * fall back to treating them as opaque byte sequences. 244 */ 245 if (res < 0 && !sb_has_strict_encoding(sb)) { 246 res = name->len == entry.len && 247 memcmp(name->name, entry.name, name->len) == 0; 248 } else { 249 /* utf8_strncasecmp_folded returns 0 on match */ 250 res = (res == 0); 251 } 252 out: 253 kfree(decrypted_name.name); 254 return res; 255 } 256 #endif /* CONFIG_UNICODE */ 257 258 static inline int f2fs_match_name(const struct inode *dir, 259 const struct f2fs_filename *fname, 260 const u8 *de_name, u32 de_name_len) 261 { 262 struct fscrypt_name f; 263 264 #ifdef CONFIG_UNICODE 265 if (fname->cf_name.name) { 266 struct qstr cf = FSTR_TO_QSTR(&fname->cf_name); 267 268 return f2fs_match_ci_name(dir, &cf, de_name, de_name_len); 269 } 270 #endif 271 f.usr_fname = fname->usr_fname; 272 f.disk_name = fname->disk_name; 273 #ifdef CONFIG_FS_ENCRYPTION 274 f.crypto_buf = fname->crypto_buf; 275 #endif 276 return fscrypt_match_name(&f, de_name, de_name_len); 277 } 278 279 struct f2fs_dir_entry *f2fs_find_target_dentry(const struct f2fs_dentry_ptr *d, 280 const struct f2fs_filename *fname, int *max_slots) 281 { 282 struct f2fs_dir_entry *de; 283 unsigned long bit_pos = 0; 284 int max_len = 0; 285 int res = 0; 286 287 if (max_slots) 288 *max_slots = 0; 289 while (bit_pos < d->max) { 290 if (!test_bit_le(bit_pos, d->bitmap)) { 291 bit_pos++; 292 max_len++; 293 continue; 294 } 295 296 de = &d->dentry[bit_pos]; 297 298 if (unlikely(!de->name_len)) { 299 bit_pos++; 300 continue; 301 } 302 303 if (de->hash_code == fname->hash) { 304 res = f2fs_match_name(d->inode, fname, 305 d->filename[bit_pos], 306 le16_to_cpu(de->name_len)); 307 if (res < 0) 308 return ERR_PTR(res); 309 if (res) 310 goto found; 311 } 312 313 if (max_slots && max_len > *max_slots) 314 *max_slots = max_len; 315 max_len = 0; 316 317 bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len)); 318 } 319 320 de = NULL; 321 found: 322 if (max_slots && max_len > *max_slots) 323 *max_slots = max_len; 324 return de; 325 } 326 327 static struct f2fs_dir_entry *find_in_level(struct inode *dir, 328 unsigned int level, 329 const struct f2fs_filename *fname, 330 struct page **res_page) 331 { 332 int s = GET_DENTRY_SLOTS(fname->disk_name.len); 333 unsigned int nbucket, nblock; 334 unsigned int bidx, end_block; 335 struct page *dentry_page; 336 struct f2fs_dir_entry *de = NULL; 337 bool room = false; 338 int max_slots; 339 340 nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level); 341 nblock = bucket_blocks(level); 342 343 bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level, 344 le32_to_cpu(fname->hash) % nbucket); 345 end_block = bidx + nblock; 346 347 for (; bidx < end_block; bidx++) { 348 /* no need to allocate new dentry pages to all the indices */ 349 dentry_page = f2fs_find_data_page(dir, bidx); 350 if (IS_ERR(dentry_page)) { 351 if (PTR_ERR(dentry_page) == -ENOENT) { 352 room = true; 353 continue; 354 } else { 355 *res_page = dentry_page; 356 break; 357 } 358 } 359 360 de = find_in_block(dir, dentry_page, fname, &max_slots); 361 if (IS_ERR(de)) { 362 *res_page = ERR_CAST(de); 363 de = NULL; 364 break; 365 } else if (de) { 366 *res_page = dentry_page; 367 break; 368 } 369 370 if (max_slots >= s) 371 room = true; 372 f2fs_put_page(dentry_page, 0); 373 } 374 375 if (!de && room && F2FS_I(dir)->chash != fname->hash) { 376 F2FS_I(dir)->chash = fname->hash; 377 F2FS_I(dir)->clevel = level; 378 } 379 380 return de; 381 } 382 383 struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir, 384 const struct f2fs_filename *fname, 385 struct page **res_page) 386 { 387 unsigned long npages = dir_blocks(dir); 388 struct f2fs_dir_entry *de = NULL; 389 unsigned int max_depth; 390 unsigned int level; 391 392 *res_page = NULL; 393 394 if (f2fs_has_inline_dentry(dir)) { 395 de = f2fs_find_in_inline_dir(dir, fname, res_page); 396 goto out; 397 } 398 399 if (npages == 0) 400 goto out; 401 402 max_depth = F2FS_I(dir)->i_current_depth; 403 if (unlikely(max_depth > MAX_DIR_HASH_DEPTH)) { 404 f2fs_warn(F2FS_I_SB(dir), "Corrupted max_depth of %lu: %u", 405 dir->i_ino, max_depth); 406 max_depth = MAX_DIR_HASH_DEPTH; 407 f2fs_i_depth_write(dir, max_depth); 408 } 409 410 for (level = 0; level < max_depth; level++) { 411 de = find_in_level(dir, level, fname, res_page); 412 if (de || IS_ERR(*res_page)) 413 break; 414 } 415 out: 416 /* This is to increase the speed of f2fs_create */ 417 if (!de) 418 F2FS_I(dir)->task = current; 419 return de; 420 } 421 422 /* 423 * Find an entry in the specified directory with the wanted name. 424 * It returns the page where the entry was found (as a parameter - res_page), 425 * and the entry itself. Page is returned mapped and unlocked. 426 * Entry is guaranteed to be valid. 427 */ 428 struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir, 429 const struct qstr *child, struct page **res_page) 430 { 431 struct f2fs_dir_entry *de = NULL; 432 struct f2fs_filename fname; 433 int err; 434 435 err = f2fs_setup_filename(dir, child, 1, &fname); 436 if (err) { 437 if (err == -ENOENT) 438 *res_page = NULL; 439 else 440 *res_page = ERR_PTR(err); 441 return NULL; 442 } 443 444 de = __f2fs_find_entry(dir, &fname, res_page); 445 446 f2fs_free_filename(&fname); 447 return de; 448 } 449 450 struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p) 451 { 452 return f2fs_find_entry(dir, &dotdot_name, p); 453 } 454 455 ino_t f2fs_inode_by_name(struct inode *dir, const struct qstr *qstr, 456 struct page **page) 457 { 458 ino_t res = 0; 459 struct f2fs_dir_entry *de; 460 461 de = f2fs_find_entry(dir, qstr, page); 462 if (de) { 463 res = le32_to_cpu(de->ino); 464 f2fs_put_page(*page, 0); 465 } 466 467 return res; 468 } 469 470 void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de, 471 struct page *page, struct inode *inode) 472 { 473 enum page_type type = f2fs_has_inline_dentry(dir) ? NODE : DATA; 474 lock_page(page); 475 f2fs_wait_on_page_writeback(page, type, true, true); 476 de->ino = cpu_to_le32(inode->i_ino); 477 set_de_type(de, inode->i_mode); 478 set_page_dirty(page); 479 480 dir->i_mtime = dir->i_ctime = current_time(dir); 481 f2fs_mark_inode_dirty_sync(dir, false); 482 f2fs_put_page(page, 1); 483 } 484 485 static void init_dent_inode(struct inode *dir, struct inode *inode, 486 const struct f2fs_filename *fname, 487 struct page *ipage) 488 { 489 struct f2fs_inode *ri; 490 491 if (!fname) /* tmpfile case? */ 492 return; 493 494 f2fs_wait_on_page_writeback(ipage, NODE, true, true); 495 496 /* copy name info. to this inode page */ 497 ri = F2FS_INODE(ipage); 498 ri->i_namelen = cpu_to_le32(fname->disk_name.len); 499 memcpy(ri->i_name, fname->disk_name.name, fname->disk_name.len); 500 if (IS_ENCRYPTED(dir)) { 501 file_set_enc_name(inode); 502 /* 503 * Roll-forward recovery doesn't have encryption keys available, 504 * so it can't compute the dirhash for encrypted+casefolded 505 * filenames. Append it to i_name if possible. Else, disable 506 * roll-forward recovery of the dentry (i.e., make fsync'ing the 507 * file force a checkpoint) by setting LOST_PINO. 508 */ 509 if (IS_CASEFOLDED(dir)) { 510 if (fname->disk_name.len + sizeof(f2fs_hash_t) <= 511 F2FS_NAME_LEN) 512 put_unaligned(fname->hash, (f2fs_hash_t *) 513 &ri->i_name[fname->disk_name.len]); 514 else 515 file_lost_pino(inode); 516 } 517 } 518 set_page_dirty(ipage); 519 } 520 521 void f2fs_do_make_empty_dir(struct inode *inode, struct inode *parent, 522 struct f2fs_dentry_ptr *d) 523 { 524 struct fscrypt_str dot = FSTR_INIT(".", 1); 525 struct fscrypt_str dotdot = FSTR_INIT("..", 2); 526 527 /* update dirent of "." */ 528 f2fs_update_dentry(inode->i_ino, inode->i_mode, d, &dot, 0, 0); 529 530 /* update dirent of ".." */ 531 f2fs_update_dentry(parent->i_ino, parent->i_mode, d, &dotdot, 0, 1); 532 } 533 534 static int make_empty_dir(struct inode *inode, 535 struct inode *parent, struct page *page) 536 { 537 struct page *dentry_page; 538 struct f2fs_dentry_block *dentry_blk; 539 struct f2fs_dentry_ptr d; 540 541 if (f2fs_has_inline_dentry(inode)) 542 return f2fs_make_empty_inline_dir(inode, parent, page); 543 544 dentry_page = f2fs_get_new_data_page(inode, page, 0, true); 545 if (IS_ERR(dentry_page)) 546 return PTR_ERR(dentry_page); 547 548 dentry_blk = page_address(dentry_page); 549 550 make_dentry_ptr_block(NULL, &d, dentry_blk); 551 f2fs_do_make_empty_dir(inode, parent, &d); 552 553 set_page_dirty(dentry_page); 554 f2fs_put_page(dentry_page, 1); 555 return 0; 556 } 557 558 struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir, 559 const struct f2fs_filename *fname, struct page *dpage) 560 { 561 struct page *page; 562 int err; 563 564 if (is_inode_flag_set(inode, FI_NEW_INODE)) { 565 page = f2fs_new_inode_page(inode); 566 if (IS_ERR(page)) 567 return page; 568 569 if (S_ISDIR(inode->i_mode)) { 570 /* in order to handle error case */ 571 get_page(page); 572 err = make_empty_dir(inode, dir, page); 573 if (err) { 574 lock_page(page); 575 goto put_error; 576 } 577 put_page(page); 578 } 579 580 err = f2fs_init_acl(inode, dir, page, dpage); 581 if (err) 582 goto put_error; 583 584 err = f2fs_init_security(inode, dir, 585 fname ? fname->usr_fname : NULL, page); 586 if (err) 587 goto put_error; 588 589 if (IS_ENCRYPTED(inode)) { 590 err = fscrypt_set_context(inode, page); 591 if (err) 592 goto put_error; 593 } 594 } else { 595 page = f2fs_get_node_page(F2FS_I_SB(dir), inode->i_ino); 596 if (IS_ERR(page)) 597 return page; 598 } 599 600 init_dent_inode(dir, inode, fname, page); 601 602 /* 603 * This file should be checkpointed during fsync. 604 * We lost i_pino from now on. 605 */ 606 if (is_inode_flag_set(inode, FI_INC_LINK)) { 607 if (!S_ISDIR(inode->i_mode)) 608 file_lost_pino(inode); 609 /* 610 * If link the tmpfile to alias through linkat path, 611 * we should remove this inode from orphan list. 612 */ 613 if (inode->i_nlink == 0) 614 f2fs_remove_orphan_inode(F2FS_I_SB(dir), inode->i_ino); 615 f2fs_i_links_write(inode, true); 616 } 617 return page; 618 619 put_error: 620 clear_nlink(inode); 621 f2fs_update_inode(inode, page); 622 f2fs_put_page(page, 1); 623 return ERR_PTR(err); 624 } 625 626 void f2fs_update_parent_metadata(struct inode *dir, struct inode *inode, 627 unsigned int current_depth) 628 { 629 if (inode && is_inode_flag_set(inode, FI_NEW_INODE)) { 630 if (S_ISDIR(inode->i_mode)) 631 f2fs_i_links_write(dir, true); 632 clear_inode_flag(inode, FI_NEW_INODE); 633 } 634 dir->i_mtime = dir->i_ctime = current_time(dir); 635 f2fs_mark_inode_dirty_sync(dir, false); 636 637 if (F2FS_I(dir)->i_current_depth != current_depth) 638 f2fs_i_depth_write(dir, current_depth); 639 640 if (inode && is_inode_flag_set(inode, FI_INC_LINK)) 641 clear_inode_flag(inode, FI_INC_LINK); 642 } 643 644 int f2fs_room_for_filename(const void *bitmap, int slots, int max_slots) 645 { 646 int bit_start = 0; 647 int zero_start, zero_end; 648 next: 649 zero_start = find_next_zero_bit_le(bitmap, max_slots, bit_start); 650 if (zero_start >= max_slots) 651 return max_slots; 652 653 zero_end = find_next_bit_le(bitmap, max_slots, zero_start); 654 if (zero_end - zero_start >= slots) 655 return zero_start; 656 657 bit_start = zero_end + 1; 658 659 if (zero_end + 1 >= max_slots) 660 return max_slots; 661 goto next; 662 } 663 664 bool f2fs_has_enough_room(struct inode *dir, struct page *ipage, 665 const struct f2fs_filename *fname) 666 { 667 struct f2fs_dentry_ptr d; 668 unsigned int bit_pos; 669 int slots = GET_DENTRY_SLOTS(fname->disk_name.len); 670 671 make_dentry_ptr_inline(dir, &d, inline_data_addr(dir, ipage)); 672 673 bit_pos = f2fs_room_for_filename(d.bitmap, slots, d.max); 674 675 return bit_pos < d.max; 676 } 677 678 void f2fs_update_dentry(nid_t ino, umode_t mode, struct f2fs_dentry_ptr *d, 679 const struct fscrypt_str *name, f2fs_hash_t name_hash, 680 unsigned int bit_pos) 681 { 682 struct f2fs_dir_entry *de; 683 int slots = GET_DENTRY_SLOTS(name->len); 684 int i; 685 686 de = &d->dentry[bit_pos]; 687 de->hash_code = name_hash; 688 de->name_len = cpu_to_le16(name->len); 689 memcpy(d->filename[bit_pos], name->name, name->len); 690 de->ino = cpu_to_le32(ino); 691 set_de_type(de, mode); 692 for (i = 0; i < slots; i++) { 693 __set_bit_le(bit_pos + i, (void *)d->bitmap); 694 /* avoid wrong garbage data for readdir */ 695 if (i) 696 (de + i)->name_len = 0; 697 } 698 } 699 700 int f2fs_add_regular_entry(struct inode *dir, const struct f2fs_filename *fname, 701 struct inode *inode, nid_t ino, umode_t mode) 702 { 703 unsigned int bit_pos; 704 unsigned int level; 705 unsigned int current_depth; 706 unsigned long bidx, block; 707 unsigned int nbucket, nblock; 708 struct page *dentry_page = NULL; 709 struct f2fs_dentry_block *dentry_blk = NULL; 710 struct f2fs_dentry_ptr d; 711 struct page *page = NULL; 712 int slots, err = 0; 713 714 level = 0; 715 slots = GET_DENTRY_SLOTS(fname->disk_name.len); 716 717 current_depth = F2FS_I(dir)->i_current_depth; 718 if (F2FS_I(dir)->chash == fname->hash) { 719 level = F2FS_I(dir)->clevel; 720 F2FS_I(dir)->chash = 0; 721 } 722 723 start: 724 if (time_to_inject(F2FS_I_SB(dir), FAULT_DIR_DEPTH)) { 725 f2fs_show_injection_info(F2FS_I_SB(dir), FAULT_DIR_DEPTH); 726 return -ENOSPC; 727 } 728 729 if (unlikely(current_depth == MAX_DIR_HASH_DEPTH)) 730 return -ENOSPC; 731 732 /* Increase the depth, if required */ 733 if (level == current_depth) 734 ++current_depth; 735 736 nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level); 737 nblock = bucket_blocks(level); 738 739 bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level, 740 (le32_to_cpu(fname->hash) % nbucket)); 741 742 for (block = bidx; block <= (bidx + nblock - 1); block++) { 743 dentry_page = f2fs_get_new_data_page(dir, NULL, block, true); 744 if (IS_ERR(dentry_page)) 745 return PTR_ERR(dentry_page); 746 747 dentry_blk = page_address(dentry_page); 748 bit_pos = f2fs_room_for_filename(&dentry_blk->dentry_bitmap, 749 slots, NR_DENTRY_IN_BLOCK); 750 if (bit_pos < NR_DENTRY_IN_BLOCK) 751 goto add_dentry; 752 753 f2fs_put_page(dentry_page, 1); 754 } 755 756 /* Move to next level to find the empty slot for new dentry */ 757 ++level; 758 goto start; 759 add_dentry: 760 f2fs_wait_on_page_writeback(dentry_page, DATA, true, true); 761 762 if (inode) { 763 down_write(&F2FS_I(inode)->i_sem); 764 page = f2fs_init_inode_metadata(inode, dir, fname, NULL); 765 if (IS_ERR(page)) { 766 err = PTR_ERR(page); 767 goto fail; 768 } 769 } 770 771 make_dentry_ptr_block(NULL, &d, dentry_blk); 772 f2fs_update_dentry(ino, mode, &d, &fname->disk_name, fname->hash, 773 bit_pos); 774 775 set_page_dirty(dentry_page); 776 777 if (inode) { 778 f2fs_i_pino_write(inode, dir->i_ino); 779 780 /* synchronize inode page's data from inode cache */ 781 if (is_inode_flag_set(inode, FI_NEW_INODE)) 782 f2fs_update_inode(inode, page); 783 784 f2fs_put_page(page, 1); 785 } 786 787 f2fs_update_parent_metadata(dir, inode, current_depth); 788 fail: 789 if (inode) 790 up_write(&F2FS_I(inode)->i_sem); 791 792 f2fs_put_page(dentry_page, 1); 793 794 return err; 795 } 796 797 int f2fs_add_dentry(struct inode *dir, const struct f2fs_filename *fname, 798 struct inode *inode, nid_t ino, umode_t mode) 799 { 800 int err = -EAGAIN; 801 802 if (f2fs_has_inline_dentry(dir)) 803 err = f2fs_add_inline_entry(dir, fname, inode, ino, mode); 804 if (err == -EAGAIN) 805 err = f2fs_add_regular_entry(dir, fname, inode, ino, mode); 806 807 f2fs_update_time(F2FS_I_SB(dir), REQ_TIME); 808 return err; 809 } 810 811 /* 812 * Caller should grab and release a rwsem by calling f2fs_lock_op() and 813 * f2fs_unlock_op(). 814 */ 815 int f2fs_do_add_link(struct inode *dir, const struct qstr *name, 816 struct inode *inode, nid_t ino, umode_t mode) 817 { 818 struct f2fs_filename fname; 819 struct page *page = NULL; 820 struct f2fs_dir_entry *de = NULL; 821 int err; 822 823 err = f2fs_setup_filename(dir, name, 0, &fname); 824 if (err) 825 return err; 826 827 /* 828 * An immature stackable filesystem shows a race condition between lookup 829 * and create. If we have same task when doing lookup and create, it's 830 * definitely fine as expected by VFS normally. Otherwise, let's just 831 * verify on-disk dentry one more time, which guarantees filesystem 832 * consistency more. 833 */ 834 if (current != F2FS_I(dir)->task) { 835 de = __f2fs_find_entry(dir, &fname, &page); 836 F2FS_I(dir)->task = NULL; 837 } 838 if (de) { 839 f2fs_put_page(page, 0); 840 err = -EEXIST; 841 } else if (IS_ERR(page)) { 842 err = PTR_ERR(page); 843 } else { 844 err = f2fs_add_dentry(dir, &fname, inode, ino, mode); 845 } 846 f2fs_free_filename(&fname); 847 return err; 848 } 849 850 int f2fs_do_tmpfile(struct inode *inode, struct inode *dir) 851 { 852 struct page *page; 853 int err = 0; 854 855 down_write(&F2FS_I(inode)->i_sem); 856 page = f2fs_init_inode_metadata(inode, dir, NULL, NULL); 857 if (IS_ERR(page)) { 858 err = PTR_ERR(page); 859 goto fail; 860 } 861 f2fs_put_page(page, 1); 862 863 clear_inode_flag(inode, FI_NEW_INODE); 864 f2fs_update_time(F2FS_I_SB(inode), REQ_TIME); 865 fail: 866 up_write(&F2FS_I(inode)->i_sem); 867 return err; 868 } 869 870 void f2fs_drop_nlink(struct inode *dir, struct inode *inode) 871 { 872 struct f2fs_sb_info *sbi = F2FS_I_SB(dir); 873 874 down_write(&F2FS_I(inode)->i_sem); 875 876 if (S_ISDIR(inode->i_mode)) 877 f2fs_i_links_write(dir, false); 878 inode->i_ctime = current_time(inode); 879 880 f2fs_i_links_write(inode, false); 881 if (S_ISDIR(inode->i_mode)) { 882 f2fs_i_links_write(inode, false); 883 f2fs_i_size_write(inode, 0); 884 } 885 up_write(&F2FS_I(inode)->i_sem); 886 887 if (inode->i_nlink == 0) 888 f2fs_add_orphan_inode(inode); 889 else 890 f2fs_release_orphan_inode(sbi); 891 } 892 893 /* 894 * It only removes the dentry from the dentry page, corresponding name 895 * entry in name page does not need to be touched during deletion. 896 */ 897 void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page, 898 struct inode *dir, struct inode *inode) 899 { 900 struct f2fs_dentry_block *dentry_blk; 901 unsigned int bit_pos; 902 int slots = GET_DENTRY_SLOTS(le16_to_cpu(dentry->name_len)); 903 int i; 904 905 f2fs_update_time(F2FS_I_SB(dir), REQ_TIME); 906 907 if (F2FS_OPTION(F2FS_I_SB(dir)).fsync_mode == FSYNC_MODE_STRICT) 908 f2fs_add_ino_entry(F2FS_I_SB(dir), dir->i_ino, TRANS_DIR_INO); 909 910 if (f2fs_has_inline_dentry(dir)) 911 return f2fs_delete_inline_entry(dentry, page, dir, inode); 912 913 lock_page(page); 914 f2fs_wait_on_page_writeback(page, DATA, true, true); 915 916 dentry_blk = page_address(page); 917 bit_pos = dentry - dentry_blk->dentry; 918 for (i = 0; i < slots; i++) 919 __clear_bit_le(bit_pos + i, &dentry_blk->dentry_bitmap); 920 921 /* Let's check and deallocate this dentry page */ 922 bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap, 923 NR_DENTRY_IN_BLOCK, 924 0); 925 set_page_dirty(page); 926 927 if (bit_pos == NR_DENTRY_IN_BLOCK && 928 !f2fs_truncate_hole(dir, page->index, page->index + 1)) { 929 f2fs_clear_page_cache_dirty_tag(page); 930 clear_page_dirty_for_io(page); 931 f2fs_clear_page_private(page); 932 ClearPageUptodate(page); 933 clear_cold_data(page); 934 inode_dec_dirty_pages(dir); 935 f2fs_remove_dirty_inode(dir); 936 } 937 f2fs_put_page(page, 1); 938 939 dir->i_ctime = dir->i_mtime = current_time(dir); 940 f2fs_mark_inode_dirty_sync(dir, false); 941 942 if (inode) 943 f2fs_drop_nlink(dir, inode); 944 } 945 946 bool f2fs_empty_dir(struct inode *dir) 947 { 948 unsigned long bidx; 949 struct page *dentry_page; 950 unsigned int bit_pos; 951 struct f2fs_dentry_block *dentry_blk; 952 unsigned long nblock = dir_blocks(dir); 953 954 if (f2fs_has_inline_dentry(dir)) 955 return f2fs_empty_inline_dir(dir); 956 957 for (bidx = 0; bidx < nblock; bidx++) { 958 dentry_page = f2fs_get_lock_data_page(dir, bidx, false); 959 if (IS_ERR(dentry_page)) { 960 if (PTR_ERR(dentry_page) == -ENOENT) 961 continue; 962 else 963 return false; 964 } 965 966 dentry_blk = page_address(dentry_page); 967 if (bidx == 0) 968 bit_pos = 2; 969 else 970 bit_pos = 0; 971 bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap, 972 NR_DENTRY_IN_BLOCK, 973 bit_pos); 974 975 f2fs_put_page(dentry_page, 1); 976 977 if (bit_pos < NR_DENTRY_IN_BLOCK) 978 return false; 979 } 980 return true; 981 } 982 983 int f2fs_fill_dentries(struct dir_context *ctx, struct f2fs_dentry_ptr *d, 984 unsigned int start_pos, struct fscrypt_str *fstr) 985 { 986 unsigned char d_type = DT_UNKNOWN; 987 unsigned int bit_pos; 988 struct f2fs_dir_entry *de = NULL; 989 struct fscrypt_str de_name = FSTR_INIT(NULL, 0); 990 struct f2fs_sb_info *sbi = F2FS_I_SB(d->inode); 991 struct blk_plug plug; 992 bool readdir_ra = sbi->readdir_ra == 1; 993 int err = 0; 994 995 bit_pos = ((unsigned long)ctx->pos % d->max); 996 997 if (readdir_ra) 998 blk_start_plug(&plug); 999 1000 while (bit_pos < d->max) { 1001 bit_pos = find_next_bit_le(d->bitmap, d->max, bit_pos); 1002 if (bit_pos >= d->max) 1003 break; 1004 1005 de = &d->dentry[bit_pos]; 1006 if (de->name_len == 0) { 1007 bit_pos++; 1008 ctx->pos = start_pos + bit_pos; 1009 printk_ratelimited( 1010 "%sF2FS-fs (%s): invalid namelen(0), ino:%u, run fsck to fix.", 1011 KERN_WARNING, sbi->sb->s_id, 1012 le32_to_cpu(de->ino)); 1013 set_sbi_flag(sbi, SBI_NEED_FSCK); 1014 continue; 1015 } 1016 1017 d_type = f2fs_get_de_type(de); 1018 1019 de_name.name = d->filename[bit_pos]; 1020 de_name.len = le16_to_cpu(de->name_len); 1021 1022 /* check memory boundary before moving forward */ 1023 bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len)); 1024 if (unlikely(bit_pos > d->max || 1025 le16_to_cpu(de->name_len) > F2FS_NAME_LEN)) { 1026 f2fs_warn(sbi, "%s: corrupted namelen=%d, run fsck to fix.", 1027 __func__, le16_to_cpu(de->name_len)); 1028 set_sbi_flag(sbi, SBI_NEED_FSCK); 1029 err = -EFSCORRUPTED; 1030 goto out; 1031 } 1032 1033 if (IS_ENCRYPTED(d->inode)) { 1034 int save_len = fstr->len; 1035 1036 err = fscrypt_fname_disk_to_usr(d->inode, 1037 (u32)le32_to_cpu(de->hash_code), 1038 0, &de_name, fstr); 1039 if (err) 1040 goto out; 1041 1042 de_name = *fstr; 1043 fstr->len = save_len; 1044 } 1045 1046 if (!dir_emit(ctx, de_name.name, de_name.len, 1047 le32_to_cpu(de->ino), d_type)) { 1048 err = 1; 1049 goto out; 1050 } 1051 1052 if (readdir_ra) 1053 f2fs_ra_node_page(sbi, le32_to_cpu(de->ino)); 1054 1055 ctx->pos = start_pos + bit_pos; 1056 } 1057 out: 1058 if (readdir_ra) 1059 blk_finish_plug(&plug); 1060 return err; 1061 } 1062 1063 static int f2fs_readdir(struct file *file, struct dir_context *ctx) 1064 { 1065 struct inode *inode = file_inode(file); 1066 unsigned long npages = dir_blocks(inode); 1067 struct f2fs_dentry_block *dentry_blk = NULL; 1068 struct page *dentry_page = NULL; 1069 struct file_ra_state *ra = &file->f_ra; 1070 loff_t start_pos = ctx->pos; 1071 unsigned int n = ((unsigned long)ctx->pos / NR_DENTRY_IN_BLOCK); 1072 struct f2fs_dentry_ptr d; 1073 struct fscrypt_str fstr = FSTR_INIT(NULL, 0); 1074 int err = 0; 1075 1076 if (IS_ENCRYPTED(inode)) { 1077 err = fscrypt_prepare_readdir(inode); 1078 if (err) 1079 goto out; 1080 1081 err = fscrypt_fname_alloc_buffer(F2FS_NAME_LEN, &fstr); 1082 if (err < 0) 1083 goto out; 1084 } 1085 1086 if (f2fs_has_inline_dentry(inode)) { 1087 err = f2fs_read_inline_dir(file, ctx, &fstr); 1088 goto out_free; 1089 } 1090 1091 for (; n < npages; n++, ctx->pos = n * NR_DENTRY_IN_BLOCK) { 1092 1093 /* allow readdir() to be interrupted */ 1094 if (fatal_signal_pending(current)) { 1095 err = -ERESTARTSYS; 1096 goto out_free; 1097 } 1098 cond_resched(); 1099 1100 /* readahead for multi pages of dir */ 1101 if (npages - n > 1 && !ra_has_index(ra, n)) 1102 page_cache_sync_readahead(inode->i_mapping, ra, file, n, 1103 min(npages - n, (pgoff_t)MAX_DIR_RA_PAGES)); 1104 1105 dentry_page = f2fs_find_data_page(inode, n); 1106 if (IS_ERR(dentry_page)) { 1107 err = PTR_ERR(dentry_page); 1108 if (err == -ENOENT) { 1109 err = 0; 1110 continue; 1111 } else { 1112 goto out_free; 1113 } 1114 } 1115 1116 dentry_blk = page_address(dentry_page); 1117 1118 make_dentry_ptr_block(inode, &d, dentry_blk); 1119 1120 err = f2fs_fill_dentries(ctx, &d, 1121 n * NR_DENTRY_IN_BLOCK, &fstr); 1122 if (err) { 1123 f2fs_put_page(dentry_page, 0); 1124 break; 1125 } 1126 1127 f2fs_put_page(dentry_page, 0); 1128 } 1129 out_free: 1130 fscrypt_fname_free_buffer(&fstr); 1131 out: 1132 trace_f2fs_readdir(inode, start_pos, ctx->pos, err); 1133 return err < 0 ? err : 0; 1134 } 1135 1136 const struct file_operations f2fs_dir_operations = { 1137 .llseek = generic_file_llseek, 1138 .read = generic_read_dir, 1139 .iterate_shared = f2fs_readdir, 1140 .fsync = f2fs_sync_file, 1141 .unlocked_ioctl = f2fs_ioctl, 1142 #ifdef CONFIG_COMPAT 1143 .compat_ioctl = f2fs_compat_ioctl, 1144 #endif 1145 }; 1146