linux/fs/f2fs/dir.c
<<
>>
Prefs
   1/*
   2 * fs/f2fs/dir.c
   3 *
   4 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
   5 *             http://www.samsung.com/
   6 *
   7 * This program is free software; you can redistribute it and/or modify
   8 * it under the terms of the GNU General Public License version 2 as
   9 * published by the Free Software Foundation.
  10 */
  11#include <linux/fs.h>
  12#include <linux/f2fs_fs.h>
  13#include <linux/sched/signal.h>
  14#include "f2fs.h"
  15#include "node.h"
  16#include "acl.h"
  17#include "xattr.h"
  18#include <trace/events/f2fs.h>
  19
  20static unsigned long dir_blocks(struct inode *inode)
  21{
  22        return ((unsigned long long) (i_size_read(inode) + PAGE_SIZE - 1))
  23                                                        >> PAGE_SHIFT;
  24}
  25
  26static unsigned int dir_buckets(unsigned int level, int dir_level)
  27{
  28        if (level + dir_level < MAX_DIR_HASH_DEPTH / 2)
  29                return 1 << (level + dir_level);
  30        else
  31                return MAX_DIR_BUCKETS;
  32}
  33
  34static unsigned int bucket_blocks(unsigned int level)
  35{
  36        if (level < MAX_DIR_HASH_DEPTH / 2)
  37                return 2;
  38        else
  39                return 4;
  40}
  41
  42static unsigned char f2fs_filetype_table[F2FS_FT_MAX] = {
  43        [F2FS_FT_UNKNOWN]       = DT_UNKNOWN,
  44        [F2FS_FT_REG_FILE]      = DT_REG,
  45        [F2FS_FT_DIR]           = DT_DIR,
  46        [F2FS_FT_CHRDEV]        = DT_CHR,
  47        [F2FS_FT_BLKDEV]        = DT_BLK,
  48        [F2FS_FT_FIFO]          = DT_FIFO,
  49        [F2FS_FT_SOCK]          = DT_SOCK,
  50        [F2FS_FT_SYMLINK]       = DT_LNK,
  51};
  52
  53static unsigned char f2fs_type_by_mode[S_IFMT >> S_SHIFT] = {
  54        [S_IFREG >> S_SHIFT]    = F2FS_FT_REG_FILE,
  55        [S_IFDIR >> S_SHIFT]    = F2FS_FT_DIR,
  56        [S_IFCHR >> S_SHIFT]    = F2FS_FT_CHRDEV,
  57        [S_IFBLK >> S_SHIFT]    = F2FS_FT_BLKDEV,
  58        [S_IFIFO >> S_SHIFT]    = F2FS_FT_FIFO,
  59        [S_IFSOCK >> S_SHIFT]   = F2FS_FT_SOCK,
  60        [S_IFLNK >> S_SHIFT]    = F2FS_FT_SYMLINK,
  61};
  62
  63static void set_de_type(struct f2fs_dir_entry *de, umode_t mode)
  64{
  65        de->file_type = f2fs_type_by_mode[(mode & S_IFMT) >> S_SHIFT];
  66}
  67
  68unsigned char f2fs_get_de_type(struct f2fs_dir_entry *de)
  69{
  70        if (de->file_type < F2FS_FT_MAX)
  71                return f2fs_filetype_table[de->file_type];
  72        return DT_UNKNOWN;
  73}
  74
  75static unsigned long dir_block_index(unsigned int level,
  76                                int dir_level, unsigned int idx)
  77{
  78        unsigned long i;
  79        unsigned long bidx = 0;
  80
  81        for (i = 0; i < level; i++)
  82                bidx += dir_buckets(i, dir_level) * bucket_blocks(i);
  83        bidx += idx * bucket_blocks(level);
  84        return bidx;
  85}
  86
  87static struct f2fs_dir_entry *find_in_block(struct page *dentry_page,
  88                                struct fscrypt_name *fname,
  89                                f2fs_hash_t namehash,
  90                                int *max_slots,
  91                                struct page **res_page)
  92{
  93        struct f2fs_dentry_block *dentry_blk;
  94        struct f2fs_dir_entry *de;
  95        struct f2fs_dentry_ptr d;
  96
  97        dentry_blk = (struct f2fs_dentry_block *)page_address(dentry_page);
  98
  99        make_dentry_ptr_block(NULL, &d, dentry_blk);
 100        de = f2fs_find_target_dentry(fname, namehash, max_slots, &d);
 101        if (de)
 102                *res_page = dentry_page;
 103
 104        return de;
 105}
 106
 107struct f2fs_dir_entry *f2fs_find_target_dentry(struct fscrypt_name *fname,
 108                        f2fs_hash_t namehash, int *max_slots,
 109                        struct f2fs_dentry_ptr *d)
 110{
 111        struct f2fs_dir_entry *de;
 112        unsigned long bit_pos = 0;
 113        int max_len = 0;
 114
 115        if (max_slots)
 116                *max_slots = 0;
 117        while (bit_pos < d->max) {
 118                if (!test_bit_le(bit_pos, d->bitmap)) {
 119                        bit_pos++;
 120                        max_len++;
 121                        continue;
 122                }
 123
 124                de = &d->dentry[bit_pos];
 125
 126                if (unlikely(!de->name_len)) {
 127                        bit_pos++;
 128                        continue;
 129                }
 130
 131                if (de->hash_code == namehash &&
 132                    fscrypt_match_name(fname, d->filename[bit_pos],
 133                                       le16_to_cpu(de->name_len)))
 134                        goto found;
 135
 136                if (max_slots && max_len > *max_slots)
 137                        *max_slots = max_len;
 138                max_len = 0;
 139
 140                bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len));
 141        }
 142
 143        de = NULL;
 144found:
 145        if (max_slots && max_len > *max_slots)
 146                *max_slots = max_len;
 147        return de;
 148}
 149
 150static struct f2fs_dir_entry *find_in_level(struct inode *dir,
 151                                        unsigned int level,
 152                                        struct fscrypt_name *fname,
 153                                        struct page **res_page)
 154{
 155        struct qstr name = FSTR_TO_QSTR(&fname->disk_name);
 156        int s = GET_DENTRY_SLOTS(name.len);
 157        unsigned int nbucket, nblock;
 158        unsigned int bidx, end_block;
 159        struct page *dentry_page;
 160        struct f2fs_dir_entry *de = NULL;
 161        bool room = false;
 162        int max_slots;
 163        f2fs_hash_t namehash = f2fs_dentry_hash(&name, fname);
 164
 165        nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level);
 166        nblock = bucket_blocks(level);
 167
 168        bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
 169                                        le32_to_cpu(namehash) % nbucket);
 170        end_block = bidx + nblock;
 171
 172        for (; bidx < end_block; bidx++) {
 173                /* no need to allocate new dentry pages to all the indices */
 174                dentry_page = f2fs_find_data_page(dir, bidx);
 175                if (IS_ERR(dentry_page)) {
 176                        if (PTR_ERR(dentry_page) == -ENOENT) {
 177                                room = true;
 178                                continue;
 179                        } else {
 180                                *res_page = dentry_page;
 181                                break;
 182                        }
 183                }
 184
 185                de = find_in_block(dentry_page, fname, namehash, &max_slots,
 186                                                                res_page);
 187                if (de)
 188                        break;
 189
 190                if (max_slots >= s)
 191                        room = true;
 192                f2fs_put_page(dentry_page, 0);
 193        }
 194
 195        if (!de && room && F2FS_I(dir)->chash != namehash) {
 196                F2FS_I(dir)->chash = namehash;
 197                F2FS_I(dir)->clevel = level;
 198        }
 199
 200        return de;
 201}
 202
 203struct f2fs_dir_entry *__f2fs_find_entry(struct inode *dir,
 204                        struct fscrypt_name *fname, struct page **res_page)
 205{
 206        unsigned long npages = dir_blocks(dir);
 207        struct f2fs_dir_entry *de = NULL;
 208        unsigned int max_depth;
 209        unsigned int level;
 210
 211        if (f2fs_has_inline_dentry(dir)) {
 212                *res_page = NULL;
 213                de = f2fs_find_in_inline_dir(dir, fname, res_page);
 214                goto out;
 215        }
 216
 217        if (npages == 0) {
 218                *res_page = NULL;
 219                goto out;
 220        }
 221
 222        max_depth = F2FS_I(dir)->i_current_depth;
 223        if (unlikely(max_depth > MAX_DIR_HASH_DEPTH)) {
 224                f2fs_msg(F2FS_I_SB(dir)->sb, KERN_WARNING,
 225                                "Corrupted max_depth of %lu: %u",
 226                                dir->i_ino, max_depth);
 227                max_depth = MAX_DIR_HASH_DEPTH;
 228                f2fs_i_depth_write(dir, max_depth);
 229        }
 230
 231        for (level = 0; level < max_depth; level++) {
 232                *res_page = NULL;
 233                de = find_in_level(dir, level, fname, res_page);
 234                if (de || IS_ERR(*res_page))
 235                        break;
 236        }
 237out:
 238        /* This is to increase the speed of f2fs_create */
 239        if (!de)
 240                F2FS_I(dir)->task = current;
 241        return de;
 242}
 243
 244/*
 245 * Find an entry in the specified directory with the wanted name.
 246 * It returns the page where the entry was found (as a parameter - res_page),
 247 * and the entry itself. Page is returned mapped and unlocked.
 248 * Entry is guaranteed to be valid.
 249 */
 250struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
 251                        const struct qstr *child, struct page **res_page)
 252{
 253        struct f2fs_dir_entry *de = NULL;
 254        struct fscrypt_name fname;
 255        int err;
 256
 257        err = fscrypt_setup_filename(dir, child, 1, &fname);
 258        if (err) {
 259                if (err == -ENOENT)
 260                        *res_page = NULL;
 261                else
 262                        *res_page = ERR_PTR(err);
 263                return NULL;
 264        }
 265
 266        de = __f2fs_find_entry(dir, &fname, res_page);
 267
 268        fscrypt_free_filename(&fname);
 269        return de;
 270}
 271
 272struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p)
 273{
 274        struct qstr dotdot = QSTR_INIT("..", 2);
 275
 276        return f2fs_find_entry(dir, &dotdot, p);
 277}
 278
 279ino_t f2fs_inode_by_name(struct inode *dir, const struct qstr *qstr,
 280                                                        struct page **page)
 281{
 282        ino_t res = 0;
 283        struct f2fs_dir_entry *de;
 284
 285        de = f2fs_find_entry(dir, qstr, page);
 286        if (de) {
 287                res = le32_to_cpu(de->ino);
 288                f2fs_put_page(*page, 0);
 289        }
 290
 291        return res;
 292}
 293
 294void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
 295                struct page *page, struct inode *inode)
 296{
 297        enum page_type type = f2fs_has_inline_dentry(dir) ? NODE : DATA;
 298        lock_page(page);
 299        f2fs_wait_on_page_writeback(page, type, true);
 300        de->ino = cpu_to_le32(inode->i_ino);
 301        set_de_type(de, inode->i_mode);
 302        set_page_dirty(page);
 303
 304        dir->i_mtime = dir->i_ctime = current_time(dir);
 305        f2fs_mark_inode_dirty_sync(dir, false);
 306        f2fs_put_page(page, 1);
 307}
 308
 309static void init_dent_inode(const struct qstr *name, struct page *ipage)
 310{
 311        struct f2fs_inode *ri;
 312
 313        f2fs_wait_on_page_writeback(ipage, NODE, true);
 314
 315        /* copy name info. to this inode page */
 316        ri = F2FS_INODE(ipage);
 317        ri->i_namelen = cpu_to_le32(name->len);
 318        memcpy(ri->i_name, name->name, name->len);
 319        set_page_dirty(ipage);
 320}
 321
 322void f2fs_do_make_empty_dir(struct inode *inode, struct inode *parent,
 323                                        struct f2fs_dentry_ptr *d)
 324{
 325        struct qstr dot = QSTR_INIT(".", 1);
 326        struct qstr dotdot = QSTR_INIT("..", 2);
 327
 328        /* update dirent of "." */
 329        f2fs_update_dentry(inode->i_ino, inode->i_mode, d, &dot, 0, 0);
 330
 331        /* update dirent of ".." */
 332        f2fs_update_dentry(parent->i_ino, parent->i_mode, d, &dotdot, 0, 1);
 333}
 334
 335static int make_empty_dir(struct inode *inode,
 336                struct inode *parent, struct page *page)
 337{
 338        struct page *dentry_page;
 339        struct f2fs_dentry_block *dentry_blk;
 340        struct f2fs_dentry_ptr d;
 341
 342        if (f2fs_has_inline_dentry(inode))
 343                return f2fs_make_empty_inline_dir(inode, parent, page);
 344
 345        dentry_page = f2fs_get_new_data_page(inode, page, 0, true);
 346        if (IS_ERR(dentry_page))
 347                return PTR_ERR(dentry_page);
 348
 349        dentry_blk = page_address(dentry_page);
 350
 351        make_dentry_ptr_block(NULL, &d, dentry_blk);
 352        f2fs_do_make_empty_dir(inode, parent, &d);
 353
 354        set_page_dirty(dentry_page);
 355        f2fs_put_page(dentry_page, 1);
 356        return 0;
 357}
 358
 359struct page *f2fs_init_inode_metadata(struct inode *inode, struct inode *dir,
 360                        const struct qstr *new_name, const struct qstr *orig_name,
 361                        struct page *dpage)
 362{
 363        struct page *page;
 364        int dummy_encrypt = DUMMY_ENCRYPTION_ENABLED(F2FS_I_SB(dir));
 365        int err;
 366
 367        if (is_inode_flag_set(inode, FI_NEW_INODE)) {
 368                page = f2fs_new_inode_page(inode);
 369                if (IS_ERR(page))
 370                        return page;
 371
 372                if (S_ISDIR(inode->i_mode)) {
 373                        /* in order to handle error case */
 374                        get_page(page);
 375                        err = make_empty_dir(inode, dir, page);
 376                        if (err) {
 377                                lock_page(page);
 378                                goto put_error;
 379                        }
 380                        put_page(page);
 381                }
 382
 383                err = f2fs_init_acl(inode, dir, page, dpage);
 384                if (err)
 385                        goto put_error;
 386
 387                err = f2fs_init_security(inode, dir, orig_name, page);
 388                if (err)
 389                        goto put_error;
 390
 391                if ((f2fs_encrypted_inode(dir) || dummy_encrypt) &&
 392                                        f2fs_may_encrypt(inode)) {
 393                        err = fscrypt_inherit_context(dir, inode, page, false);
 394                        if (err)
 395                                goto put_error;
 396                }
 397        } else {
 398                page = f2fs_get_node_page(F2FS_I_SB(dir), inode->i_ino);
 399                if (IS_ERR(page))
 400                        return page;
 401        }
 402
 403        if (new_name) {
 404                init_dent_inode(new_name, page);
 405                if (f2fs_encrypted_inode(dir))
 406                        file_set_enc_name(inode);
 407        }
 408
 409        /*
 410         * This file should be checkpointed during fsync.
 411         * We lost i_pino from now on.
 412         */
 413        if (is_inode_flag_set(inode, FI_INC_LINK)) {
 414                if (!S_ISDIR(inode->i_mode))
 415                        file_lost_pino(inode);
 416                /*
 417                 * If link the tmpfile to alias through linkat path,
 418                 * we should remove this inode from orphan list.
 419                 */
 420                if (inode->i_nlink == 0)
 421                        f2fs_remove_orphan_inode(F2FS_I_SB(dir), inode->i_ino);
 422                f2fs_i_links_write(inode, true);
 423        }
 424        return page;
 425
 426put_error:
 427        clear_nlink(inode);
 428        f2fs_update_inode(inode, page);
 429        f2fs_put_page(page, 1);
 430        return ERR_PTR(err);
 431}
 432
 433void f2fs_update_parent_metadata(struct inode *dir, struct inode *inode,
 434                                                unsigned int current_depth)
 435{
 436        if (inode && is_inode_flag_set(inode, FI_NEW_INODE)) {
 437                if (S_ISDIR(inode->i_mode))
 438                        f2fs_i_links_write(dir, true);
 439                clear_inode_flag(inode, FI_NEW_INODE);
 440        }
 441        dir->i_mtime = dir->i_ctime = current_time(dir);
 442        f2fs_mark_inode_dirty_sync(dir, false);
 443
 444        if (F2FS_I(dir)->i_current_depth != current_depth)
 445                f2fs_i_depth_write(dir, current_depth);
 446
 447        if (inode && is_inode_flag_set(inode, FI_INC_LINK))
 448                clear_inode_flag(inode, FI_INC_LINK);
 449}
 450
 451int f2fs_room_for_filename(const void *bitmap, int slots, int max_slots)
 452{
 453        int bit_start = 0;
 454        int zero_start, zero_end;
 455next:
 456        zero_start = find_next_zero_bit_le(bitmap, max_slots, bit_start);
 457        if (zero_start >= max_slots)
 458                return max_slots;
 459
 460        zero_end = find_next_bit_le(bitmap, max_slots, zero_start);
 461        if (zero_end - zero_start >= slots)
 462                return zero_start;
 463
 464        bit_start = zero_end + 1;
 465
 466        if (zero_end + 1 >= max_slots)
 467                return max_slots;
 468        goto next;
 469}
 470
 471void f2fs_update_dentry(nid_t ino, umode_t mode, struct f2fs_dentry_ptr *d,
 472                                const struct qstr *name, f2fs_hash_t name_hash,
 473                                unsigned int bit_pos)
 474{
 475        struct f2fs_dir_entry *de;
 476        int slots = GET_DENTRY_SLOTS(name->len);
 477        int i;
 478
 479        de = &d->dentry[bit_pos];
 480        de->hash_code = name_hash;
 481        de->name_len = cpu_to_le16(name->len);
 482        memcpy(d->filename[bit_pos], name->name, name->len);
 483        de->ino = cpu_to_le32(ino);
 484        set_de_type(de, mode);
 485        for (i = 0; i < slots; i++) {
 486                __set_bit_le(bit_pos + i, (void *)d->bitmap);
 487                /* avoid wrong garbage data for readdir */
 488                if (i)
 489                        (de + i)->name_len = 0;
 490        }
 491}
 492
 493int f2fs_add_regular_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        unsigned int bit_pos;
 498        unsigned int level;
 499        unsigned int current_depth;
 500        unsigned long bidx, block;
 501        f2fs_hash_t dentry_hash;
 502        unsigned int nbucket, nblock;
 503        struct page *dentry_page = NULL;
 504        struct f2fs_dentry_block *dentry_blk = NULL;
 505        struct f2fs_dentry_ptr d;
 506        struct page *page = NULL;
 507        int slots, err = 0;
 508
 509        level = 0;
 510        slots = GET_DENTRY_SLOTS(new_name->len);
 511        dentry_hash = f2fs_dentry_hash(new_name, NULL);
 512
 513        current_depth = F2FS_I(dir)->i_current_depth;
 514        if (F2FS_I(dir)->chash == dentry_hash) {
 515                level = F2FS_I(dir)->clevel;
 516                F2FS_I(dir)->chash = 0;
 517        }
 518
 519start:
 520#ifdef CONFIG_F2FS_FAULT_INJECTION
 521        if (time_to_inject(F2FS_I_SB(dir), FAULT_DIR_DEPTH)) {
 522                f2fs_show_injection_info(FAULT_DIR_DEPTH);
 523                return -ENOSPC;
 524        }
 525#endif
 526        if (unlikely(current_depth == MAX_DIR_HASH_DEPTH))
 527                return -ENOSPC;
 528
 529        /* Increase the depth, if required */
 530        if (level == current_depth)
 531                ++current_depth;
 532
 533        nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level);
 534        nblock = bucket_blocks(level);
 535
 536        bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
 537                                (le32_to_cpu(dentry_hash) % nbucket));
 538
 539        for (block = bidx; block <= (bidx + nblock - 1); block++) {
 540                dentry_page = f2fs_get_new_data_page(dir, NULL, block, true);
 541                if (IS_ERR(dentry_page))
 542                        return PTR_ERR(dentry_page);
 543
 544                dentry_blk = page_address(dentry_page);
 545                bit_pos = f2fs_room_for_filename(&dentry_blk->dentry_bitmap,
 546                                                slots, NR_DENTRY_IN_BLOCK);
 547                if (bit_pos < NR_DENTRY_IN_BLOCK)
 548                        goto add_dentry;
 549
 550                f2fs_put_page(dentry_page, 1);
 551        }
 552
 553        /* Move to next level to find the empty slot for new dentry */
 554        ++level;
 555        goto start;
 556add_dentry:
 557        f2fs_wait_on_page_writeback(dentry_page, DATA, true);
 558
 559        if (inode) {
 560                down_write(&F2FS_I(inode)->i_sem);
 561                page = f2fs_init_inode_metadata(inode, dir, new_name,
 562                                                orig_name, NULL);
 563                if (IS_ERR(page)) {
 564                        err = PTR_ERR(page);
 565                        goto fail;
 566                }
 567        }
 568
 569        make_dentry_ptr_block(NULL, &d, dentry_blk);
 570        f2fs_update_dentry(ino, mode, &d, new_name, dentry_hash, bit_pos);
 571
 572        set_page_dirty(dentry_page);
 573
 574        if (inode) {
 575                f2fs_i_pino_write(inode, dir->i_ino);
 576                f2fs_put_page(page, 1);
 577        }
 578
 579        f2fs_update_parent_metadata(dir, inode, current_depth);
 580fail:
 581        if (inode)
 582                up_write(&F2FS_I(inode)->i_sem);
 583
 584        f2fs_put_page(dentry_page, 1);
 585
 586        return err;
 587}
 588
 589int f2fs_add_dentry(struct inode *dir, struct fscrypt_name *fname,
 590                                struct inode *inode, nid_t ino, umode_t mode)
 591{
 592        struct qstr new_name;
 593        int err = -EAGAIN;
 594
 595        new_name.name = fname_name(fname);
 596        new_name.len = fname_len(fname);
 597
 598        if (f2fs_has_inline_dentry(dir))
 599                err = f2fs_add_inline_entry(dir, &new_name, fname->usr_fname,
 600                                                        inode, ino, mode);
 601        if (err == -EAGAIN)
 602                err = f2fs_add_regular_entry(dir, &new_name, fname->usr_fname,
 603                                                        inode, ino, mode);
 604
 605        f2fs_update_time(F2FS_I_SB(dir), REQ_TIME);
 606        return err;
 607}
 608
 609/*
 610 * Caller should grab and release a rwsem by calling f2fs_lock_op() and
 611 * f2fs_unlock_op().
 612 */
 613int f2fs_do_add_link(struct inode *dir, const struct qstr *name,
 614                                struct inode *inode, nid_t ino, umode_t mode)
 615{
 616        struct fscrypt_name fname;
 617        struct page *page = NULL;
 618        struct f2fs_dir_entry *de = NULL;
 619        int err;
 620
 621        err = fscrypt_setup_filename(dir, name, 0, &fname);
 622        if (err)
 623                return err;
 624
 625        /*
 626         * An immature stakable filesystem shows a race condition between lookup
 627         * and create. If we have same task when doing lookup and create, it's
 628         * definitely fine as expected by VFS normally. Otherwise, let's just
 629         * verify on-disk dentry one more time, which guarantees filesystem
 630         * consistency more.
 631         */
 632        if (current != F2FS_I(dir)->task) {
 633                de = __f2fs_find_entry(dir, &fname, &page);
 634                F2FS_I(dir)->task = NULL;
 635        }
 636        if (de) {
 637                f2fs_put_page(page, 0);
 638                err = -EEXIST;
 639        } else if (IS_ERR(page)) {
 640                err = PTR_ERR(page);
 641        } else {
 642                err = f2fs_add_dentry(dir, &fname, inode, ino, mode);
 643        }
 644        fscrypt_free_filename(&fname);
 645        return err;
 646}
 647
 648int f2fs_do_tmpfile(struct inode *inode, struct inode *dir)
 649{
 650        struct page *page;
 651        int err = 0;
 652
 653        down_write(&F2FS_I(inode)->i_sem);
 654        page = f2fs_init_inode_metadata(inode, dir, NULL, NULL, NULL);
 655        if (IS_ERR(page)) {
 656                err = PTR_ERR(page);
 657                goto fail;
 658        }
 659        f2fs_put_page(page, 1);
 660
 661        clear_inode_flag(inode, FI_NEW_INODE);
 662fail:
 663        up_write(&F2FS_I(inode)->i_sem);
 664        f2fs_update_time(F2FS_I_SB(inode), REQ_TIME);
 665        return err;
 666}
 667
 668void f2fs_drop_nlink(struct inode *dir, struct inode *inode)
 669{
 670        struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
 671
 672        down_write(&F2FS_I(inode)->i_sem);
 673
 674        if (S_ISDIR(inode->i_mode))
 675                f2fs_i_links_write(dir, false);
 676        inode->i_ctime = current_time(inode);
 677
 678        f2fs_i_links_write(inode, false);
 679        if (S_ISDIR(inode->i_mode)) {
 680                f2fs_i_links_write(inode, false);
 681                f2fs_i_size_write(inode, 0);
 682        }
 683        up_write(&F2FS_I(inode)->i_sem);
 684
 685        if (inode->i_nlink == 0)
 686                f2fs_add_orphan_inode(inode);
 687        else
 688                f2fs_release_orphan_inode(sbi);
 689}
 690
 691/*
 692 * It only removes the dentry from the dentry page, corresponding name
 693 * entry in name page does not need to be touched during deletion.
 694 */
 695void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
 696                                        struct inode *dir, struct inode *inode)
 697{
 698        struct  f2fs_dentry_block *dentry_blk;
 699        unsigned int bit_pos;
 700        int slots = GET_DENTRY_SLOTS(le16_to_cpu(dentry->name_len));
 701        int i;
 702
 703        f2fs_update_time(F2FS_I_SB(dir), REQ_TIME);
 704
 705        if (F2FS_OPTION(F2FS_I_SB(dir)).fsync_mode == FSYNC_MODE_STRICT)
 706                f2fs_add_ino_entry(F2FS_I_SB(dir), dir->i_ino, TRANS_DIR_INO);
 707
 708        if (f2fs_has_inline_dentry(dir))
 709                return f2fs_delete_inline_entry(dentry, page, dir, inode);
 710
 711        lock_page(page);
 712        f2fs_wait_on_page_writeback(page, DATA, true);
 713
 714        dentry_blk = page_address(page);
 715        bit_pos = dentry - dentry_blk->dentry;
 716        for (i = 0; i < slots; i++)
 717                __clear_bit_le(bit_pos + i, &dentry_blk->dentry_bitmap);
 718
 719        /* Let's check and deallocate this dentry page */
 720        bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap,
 721                        NR_DENTRY_IN_BLOCK,
 722                        0);
 723        set_page_dirty(page);
 724
 725        dir->i_ctime = dir->i_mtime = current_time(dir);
 726        f2fs_mark_inode_dirty_sync(dir, false);
 727
 728        if (inode)
 729                f2fs_drop_nlink(dir, inode);
 730
 731        if (bit_pos == NR_DENTRY_IN_BLOCK &&
 732                !f2fs_truncate_hole(dir, page->index, page->index + 1)) {
 733                f2fs_clear_radix_tree_dirty_tag(page);
 734                clear_page_dirty_for_io(page);
 735                ClearPagePrivate(page);
 736                ClearPageUptodate(page);
 737                inode_dec_dirty_pages(dir);
 738                f2fs_remove_dirty_inode(dir);
 739        }
 740        f2fs_put_page(page, 1);
 741}
 742
 743bool f2fs_empty_dir(struct inode *dir)
 744{
 745        unsigned long bidx;
 746        struct page *dentry_page;
 747        unsigned int bit_pos;
 748        struct f2fs_dentry_block *dentry_blk;
 749        unsigned long nblock = dir_blocks(dir);
 750
 751        if (f2fs_has_inline_dentry(dir))
 752                return f2fs_empty_inline_dir(dir);
 753
 754        for (bidx = 0; bidx < nblock; bidx++) {
 755                dentry_page = f2fs_get_lock_data_page(dir, bidx, false);
 756                if (IS_ERR(dentry_page)) {
 757                        if (PTR_ERR(dentry_page) == -ENOENT)
 758                                continue;
 759                        else
 760                                return false;
 761                }
 762
 763                dentry_blk = page_address(dentry_page);
 764                if (bidx == 0)
 765                        bit_pos = 2;
 766                else
 767                        bit_pos = 0;
 768                bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap,
 769                                                NR_DENTRY_IN_BLOCK,
 770                                                bit_pos);
 771
 772                f2fs_put_page(dentry_page, 1);
 773
 774                if (bit_pos < NR_DENTRY_IN_BLOCK)
 775                        return false;
 776        }
 777        return true;
 778}
 779
 780int f2fs_fill_dentries(struct dir_context *ctx, struct f2fs_dentry_ptr *d,
 781                        unsigned int start_pos, struct fscrypt_str *fstr)
 782{
 783        unsigned char d_type = DT_UNKNOWN;
 784        unsigned int bit_pos;
 785        struct f2fs_dir_entry *de = NULL;
 786        struct fscrypt_str de_name = FSTR_INIT(NULL, 0);
 787        struct f2fs_sb_info *sbi = F2FS_I_SB(d->inode);
 788
 789        bit_pos = ((unsigned long)ctx->pos % d->max);
 790
 791        while (bit_pos < d->max) {
 792                bit_pos = find_next_bit_le(d->bitmap, d->max, bit_pos);
 793                if (bit_pos >= d->max)
 794                        break;
 795
 796                de = &d->dentry[bit_pos];
 797                if (de->name_len == 0) {
 798                        bit_pos++;
 799                        ctx->pos = start_pos + bit_pos;
 800                        continue;
 801                }
 802
 803                d_type = f2fs_get_de_type(de);
 804
 805                de_name.name = d->filename[bit_pos];
 806                de_name.len = le16_to_cpu(de->name_len);
 807
 808                if (f2fs_encrypted_inode(d->inode)) {
 809                        int save_len = fstr->len;
 810                        int err;
 811
 812                        err = fscrypt_fname_disk_to_usr(d->inode,
 813                                                (u32)de->hash_code, 0,
 814                                                &de_name, fstr);
 815                        if (err)
 816                                return err;
 817
 818                        de_name = *fstr;
 819                        fstr->len = save_len;
 820                }
 821
 822                if (!dir_emit(ctx, de_name.name, de_name.len,
 823                                        le32_to_cpu(de->ino), d_type))
 824                        return 1;
 825
 826                if (sbi->readdir_ra == 1)
 827                        f2fs_ra_node_page(sbi, le32_to_cpu(de->ino));
 828
 829                bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len));
 830                ctx->pos = start_pos + bit_pos;
 831        }
 832        return 0;
 833}
 834
 835static int f2fs_readdir(struct file *file, struct dir_context *ctx)
 836{
 837        struct inode *inode = file_inode(file);
 838        unsigned long npages = dir_blocks(inode);
 839        struct f2fs_dentry_block *dentry_blk = NULL;
 840        struct page *dentry_page = NULL;
 841        struct file_ra_state *ra = &file->f_ra;
 842        loff_t start_pos = ctx->pos;
 843        unsigned int n = ((unsigned long)ctx->pos / NR_DENTRY_IN_BLOCK);
 844        struct f2fs_dentry_ptr d;
 845        struct fscrypt_str fstr = FSTR_INIT(NULL, 0);
 846        int err = 0;
 847
 848        if (f2fs_encrypted_inode(inode)) {
 849                err = fscrypt_get_encryption_info(inode);
 850                if (err && err != -ENOKEY)
 851                        goto out;
 852
 853                err = fscrypt_fname_alloc_buffer(inode, F2FS_NAME_LEN, &fstr);
 854                if (err < 0)
 855                        goto out;
 856        }
 857
 858        if (f2fs_has_inline_dentry(inode)) {
 859                err = f2fs_read_inline_dir(file, ctx, &fstr);
 860                goto out_free;
 861        }
 862
 863        for (; n < npages; n++, ctx->pos = n * NR_DENTRY_IN_BLOCK) {
 864
 865                /* allow readdir() to be interrupted */
 866                if (fatal_signal_pending(current)) {
 867                        err = -ERESTARTSYS;
 868                        goto out_free;
 869                }
 870                cond_resched();
 871
 872                /* readahead for multi pages of dir */
 873                if (npages - n > 1 && !ra_has_index(ra, n))
 874                        page_cache_sync_readahead(inode->i_mapping, ra, file, n,
 875                                min(npages - n, (pgoff_t)MAX_DIR_RA_PAGES));
 876
 877                dentry_page = f2fs_get_lock_data_page(inode, n, false);
 878                if (IS_ERR(dentry_page)) {
 879                        err = PTR_ERR(dentry_page);
 880                        if (err == -ENOENT) {
 881                                err = 0;
 882                                continue;
 883                        } else {
 884                                goto out_free;
 885                        }
 886                }
 887
 888                dentry_blk = page_address(dentry_page);
 889
 890                make_dentry_ptr_block(inode, &d, dentry_blk);
 891
 892                err = f2fs_fill_dentries(ctx, &d,
 893                                n * NR_DENTRY_IN_BLOCK, &fstr);
 894                if (err) {
 895                        f2fs_put_page(dentry_page, 1);
 896                        break;
 897                }
 898
 899                f2fs_put_page(dentry_page, 1);
 900        }
 901out_free:
 902        fscrypt_fname_free_buffer(&fstr);
 903out:
 904        trace_f2fs_readdir(inode, start_pos, ctx->pos, err);
 905        return err < 0 ? err : 0;
 906}
 907
 908static int f2fs_dir_open(struct inode *inode, struct file *filp)
 909{
 910        if (f2fs_encrypted_inode(inode))
 911                return fscrypt_get_encryption_info(inode) ? -EACCES : 0;
 912        return 0;
 913}
 914
 915const struct file_operations f2fs_dir_operations = {
 916        .llseek         = generic_file_llseek,
 917        .read           = generic_read_dir,
 918        .iterate_shared = f2fs_readdir,
 919        .fsync          = f2fs_sync_file,
 920        .open           = f2fs_dir_open,
 921        .unlocked_ioctl = f2fs_ioctl,
 922#ifdef CONFIG_COMPAT
 923        .compat_ioctl   = f2fs_compat_ioctl,
 924#endif
 925};
 926