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 "f2fs.h"
  14#include "node.h"
  15#include "acl.h"
  16#include "xattr.h"
  17
  18static unsigned long dir_blocks(struct inode *inode)
  19{
  20        return ((unsigned long long) (i_size_read(inode) + PAGE_CACHE_SIZE - 1))
  21                                                        >> PAGE_CACHE_SHIFT;
  22}
  23
  24static unsigned int dir_buckets(unsigned int level, int dir_level)
  25{
  26        if (level + dir_level < MAX_DIR_HASH_DEPTH / 2)
  27                return 1 << (level + dir_level);
  28        else
  29                return MAX_DIR_BUCKETS;
  30}
  31
  32static unsigned int bucket_blocks(unsigned int level)
  33{
  34        if (level < MAX_DIR_HASH_DEPTH / 2)
  35                return 2;
  36        else
  37                return 4;
  38}
  39
  40unsigned char f2fs_filetype_table[F2FS_FT_MAX] = {
  41        [F2FS_FT_UNKNOWN]       = DT_UNKNOWN,
  42        [F2FS_FT_REG_FILE]      = DT_REG,
  43        [F2FS_FT_DIR]           = DT_DIR,
  44        [F2FS_FT_CHRDEV]        = DT_CHR,
  45        [F2FS_FT_BLKDEV]        = DT_BLK,
  46        [F2FS_FT_FIFO]          = DT_FIFO,
  47        [F2FS_FT_SOCK]          = DT_SOCK,
  48        [F2FS_FT_SYMLINK]       = DT_LNK,
  49};
  50
  51#define S_SHIFT 12
  52static 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
  62void 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
  67static unsigned long dir_block_index(unsigned int level,
  68                                int dir_level, unsigned int idx)
  69{
  70        unsigned long i;
  71        unsigned long bidx = 0;
  72
  73        for (i = 0; i < level; i++)
  74                bidx += dir_buckets(i, dir_level) * bucket_blocks(i);
  75        bidx += idx * bucket_blocks(level);
  76        return bidx;
  77}
  78
  79static struct f2fs_dir_entry *find_in_block(struct page *dentry_page,
  80                                struct f2fs_filename *fname,
  81                                f2fs_hash_t namehash,
  82                                int *max_slots,
  83                                struct page **res_page)
  84{
  85        struct f2fs_dentry_block *dentry_blk;
  86        struct f2fs_dir_entry *de;
  87        struct f2fs_dentry_ptr d;
  88
  89        dentry_blk = (struct f2fs_dentry_block *)kmap(dentry_page);
  90
  91        make_dentry_ptr(NULL, &d, (void *)dentry_blk, 1);
  92        de = find_target_dentry(fname, namehash, max_slots, &d);
  93        if (de)
  94                *res_page = dentry_page;
  95        else
  96                kunmap(dentry_page);
  97
  98        /*
  99         * For the most part, it should be a bug when name_len is zero.
 100         * We stop here for figuring out where the bugs has occurred.
 101         */
 102        f2fs_bug_on(F2FS_P_SB(dentry_page), d.max < 0);
 103        return de;
 104}
 105
 106struct f2fs_dir_entry *find_target_dentry(struct f2fs_filename *fname,
 107                        f2fs_hash_t namehash, int *max_slots,
 108                        struct f2fs_dentry_ptr *d)
 109{
 110        struct f2fs_dir_entry *de;
 111        unsigned long bit_pos = 0;
 112        int max_len = 0;
 113        struct f2fs_str de_name = FSTR_INIT(NULL, 0);
 114        struct f2fs_str *name = &fname->disk_name;
 115
 116        if (max_slots)
 117                *max_slots = 0;
 118        while (bit_pos < d->max) {
 119                if (!test_bit_le(bit_pos, d->bitmap)) {
 120                        bit_pos++;
 121                        max_len++;
 122                        continue;
 123                }
 124
 125                de = &d->dentry[bit_pos];
 126
 127                /* encrypted case */
 128                de_name.name = d->filename[bit_pos];
 129                de_name.len = le16_to_cpu(de->name_len);
 130
 131                /* show encrypted name */
 132                if (fname->hash) {
 133                        if (de->hash_code == fname->hash)
 134                                goto found;
 135                } else if (de_name.len == name->len &&
 136                        de->hash_code == namehash &&
 137                        !memcmp(de_name.name, name->name, name->len))
 138                        goto found;
 139
 140                if (max_slots && max_len > *max_slots)
 141                        *max_slots = max_len;
 142                max_len = 0;
 143
 144                /* remain bug on condition */
 145                if (unlikely(!de->name_len))
 146                        d->max = -1;
 147
 148                bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len));
 149        }
 150
 151        de = NULL;
 152found:
 153        if (max_slots && max_len > *max_slots)
 154                *max_slots = max_len;
 155        return de;
 156}
 157
 158static struct f2fs_dir_entry *find_in_level(struct inode *dir,
 159                                        unsigned int level,
 160                                        struct f2fs_filename *fname,
 161                                        struct page **res_page)
 162{
 163        struct qstr name = FSTR_TO_QSTR(&fname->disk_name);
 164        int s = GET_DENTRY_SLOTS(name.len);
 165        unsigned int nbucket, nblock;
 166        unsigned int bidx, end_block;
 167        struct page *dentry_page;
 168        struct f2fs_dir_entry *de = NULL;
 169        bool room = false;
 170        int max_slots;
 171        f2fs_hash_t namehash;
 172
 173        namehash = f2fs_dentry_hash(&name);
 174
 175        f2fs_bug_on(F2FS_I_SB(dir), level > MAX_DIR_HASH_DEPTH);
 176
 177        nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level);
 178        nblock = bucket_blocks(level);
 179
 180        bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
 181                                        le32_to_cpu(namehash) % nbucket);
 182        end_block = bidx + nblock;
 183
 184        for (; bidx < end_block; bidx++) {
 185                /* no need to allocate new dentry pages to all the indices */
 186                dentry_page = find_data_page(dir, bidx);
 187                if (IS_ERR(dentry_page)) {
 188                        room = true;
 189                        continue;
 190                }
 191
 192                de = find_in_block(dentry_page, fname, namehash, &max_slots,
 193                                                                res_page);
 194                if (de)
 195                        break;
 196
 197                if (max_slots >= s)
 198                        room = true;
 199                f2fs_put_page(dentry_page, 0);
 200        }
 201
 202        if (!de && room && F2FS_I(dir)->chash != namehash) {
 203                F2FS_I(dir)->chash = namehash;
 204                F2FS_I(dir)->clevel = level;
 205        }
 206
 207        return de;
 208}
 209
 210/*
 211 * Find an entry in the specified directory with the wanted name.
 212 * It returns the page where the entry was found (as a parameter - res_page),
 213 * and the entry itself. Page is returned mapped and unlocked.
 214 * Entry is guaranteed to be valid.
 215 */
 216struct f2fs_dir_entry *f2fs_find_entry(struct inode *dir,
 217                        struct qstr *child, struct page **res_page)
 218{
 219        unsigned long npages = dir_blocks(dir);
 220        struct f2fs_dir_entry *de = NULL;
 221        unsigned int max_depth;
 222        unsigned int level;
 223        struct f2fs_filename fname;
 224        int err;
 225
 226        *res_page = NULL;
 227
 228        err = f2fs_fname_setup_filename(dir, child, 1, &fname);
 229        if (err)
 230                return NULL;
 231
 232        if (f2fs_has_inline_dentry(dir)) {
 233                de = find_in_inline_dir(dir, &fname, res_page);
 234                goto out;
 235        }
 236
 237        if (npages == 0)
 238                goto out;
 239
 240        max_depth = F2FS_I(dir)->i_current_depth;
 241
 242        for (level = 0; level < max_depth; level++) {
 243                de = find_in_level(dir, level, &fname, res_page);
 244                if (de)
 245                        break;
 246        }
 247out:
 248        f2fs_fname_free_filename(&fname);
 249        return de;
 250}
 251
 252struct f2fs_dir_entry *f2fs_parent_dir(struct inode *dir, struct page **p)
 253{
 254        struct page *page;
 255        struct f2fs_dir_entry *de;
 256        struct f2fs_dentry_block *dentry_blk;
 257
 258        if (f2fs_has_inline_dentry(dir))
 259                return f2fs_parent_inline_dir(dir, p);
 260
 261        page = get_lock_data_page(dir, 0, false);
 262        if (IS_ERR(page))
 263                return NULL;
 264
 265        dentry_blk = kmap(page);
 266        de = &dentry_blk->dentry[1];
 267        *p = page;
 268        unlock_page(page);
 269        return de;
 270}
 271
 272ino_t f2fs_inode_by_name(struct inode *dir, struct qstr *qstr)
 273{
 274        ino_t res = 0;
 275        struct f2fs_dir_entry *de;
 276        struct page *page;
 277
 278        de = f2fs_find_entry(dir, qstr, &page);
 279        if (de) {
 280                res = le32_to_cpu(de->ino);
 281                f2fs_dentry_kunmap(dir, page);
 282                f2fs_put_page(page, 0);
 283        }
 284
 285        return res;
 286}
 287
 288void f2fs_set_link(struct inode *dir, struct f2fs_dir_entry *de,
 289                struct page *page, struct inode *inode)
 290{
 291        enum page_type type = f2fs_has_inline_dentry(dir) ? NODE : DATA;
 292        lock_page(page);
 293        f2fs_wait_on_page_writeback(page, type);
 294        de->ino = cpu_to_le32(inode->i_ino);
 295        set_de_type(de, inode->i_mode);
 296        f2fs_dentry_kunmap(dir, page);
 297        set_page_dirty(page);
 298        dir->i_mtime = dir->i_ctime = CURRENT_TIME;
 299        mark_inode_dirty(dir);
 300
 301        f2fs_put_page(page, 1);
 302}
 303
 304static void init_dent_inode(const struct qstr *name, struct page *ipage)
 305{
 306        struct f2fs_inode *ri;
 307
 308        f2fs_wait_on_page_writeback(ipage, NODE);
 309
 310        /* copy name info. to this inode page */
 311        ri = F2FS_INODE(ipage);
 312        ri->i_namelen = cpu_to_le32(name->len);
 313        memcpy(ri->i_name, name->name, name->len);
 314        set_page_dirty(ipage);
 315}
 316
 317int update_dent_inode(struct inode *inode, struct inode *to,
 318                                        const struct qstr *name)
 319{
 320        struct page *page;
 321
 322        if (file_enc_name(to))
 323                return 0;
 324
 325        page = get_node_page(F2FS_I_SB(inode), inode->i_ino);
 326        if (IS_ERR(page))
 327                return PTR_ERR(page);
 328
 329        init_dent_inode(name, page);
 330        f2fs_put_page(page, 1);
 331
 332        return 0;
 333}
 334
 335void do_make_empty_dir(struct inode *inode, struct inode *parent,
 336                                        struct f2fs_dentry_ptr *d)
 337{
 338        struct f2fs_dir_entry *de;
 339
 340        de = &d->dentry[0];
 341        de->name_len = cpu_to_le16(1);
 342        de->hash_code = 0;
 343        de->ino = cpu_to_le32(inode->i_ino);
 344        memcpy(d->filename[0], ".", 1);
 345        set_de_type(de, inode->i_mode);
 346
 347        de = &d->dentry[1];
 348        de->hash_code = 0;
 349        de->name_len = cpu_to_le16(2);
 350        de->ino = cpu_to_le32(parent->i_ino);
 351        memcpy(d->filename[1], "..", 2);
 352        set_de_type(de, parent->i_mode);
 353
 354        test_and_set_bit_le(0, (void *)d->bitmap);
 355        test_and_set_bit_le(1, (void *)d->bitmap);
 356}
 357
 358static int make_empty_dir(struct inode *inode,
 359                struct inode *parent, struct page *page)
 360{
 361        struct page *dentry_page;
 362        struct f2fs_dentry_block *dentry_blk;
 363        struct f2fs_dentry_ptr d;
 364
 365        if (f2fs_has_inline_dentry(inode))
 366                return make_empty_inline_dir(inode, parent, page);
 367
 368        dentry_page = get_new_data_page(inode, page, 0, true);
 369        if (IS_ERR(dentry_page))
 370                return PTR_ERR(dentry_page);
 371
 372        dentry_blk = kmap_atomic(dentry_page);
 373
 374        make_dentry_ptr(NULL, &d, (void *)dentry_blk, 1);
 375        do_make_empty_dir(inode, parent, &d);
 376
 377        kunmap_atomic(dentry_blk);
 378
 379        set_page_dirty(dentry_page);
 380        f2fs_put_page(dentry_page, 1);
 381        return 0;
 382}
 383
 384struct page *init_inode_metadata(struct inode *inode, struct inode *dir,
 385                        const struct qstr *name, struct page *dpage)
 386{
 387        struct page *page;
 388        int err;
 389
 390        if (is_inode_flag_set(F2FS_I(inode), FI_NEW_INODE)) {
 391                page = new_inode_page(inode);
 392                if (IS_ERR(page))
 393                        return page;
 394
 395                if (S_ISDIR(inode->i_mode)) {
 396                        err = make_empty_dir(inode, dir, page);
 397                        if (err)
 398                                goto error;
 399                }
 400
 401                err = f2fs_init_acl(inode, dir, page, dpage);
 402                if (err)
 403                        goto put_error;
 404
 405                err = f2fs_init_security(inode, dir, name, page);
 406                if (err)
 407                        goto put_error;
 408
 409                if (f2fs_encrypted_inode(dir) && f2fs_may_encrypt(inode)) {
 410                        err = f2fs_inherit_context(dir, inode, page);
 411                        if (err)
 412                                goto put_error;
 413                }
 414        } else {
 415                page = get_node_page(F2FS_I_SB(dir), inode->i_ino);
 416                if (IS_ERR(page))
 417                        return page;
 418
 419                set_cold_node(inode, page);
 420        }
 421
 422        if (name)
 423                init_dent_inode(name, page);
 424
 425        /*
 426         * This file should be checkpointed during fsync.
 427         * We lost i_pino from now on.
 428         */
 429        if (is_inode_flag_set(F2FS_I(inode), FI_INC_LINK)) {
 430                file_lost_pino(inode);
 431                /*
 432                 * If link the tmpfile to alias through linkat path,
 433                 * we should remove this inode from orphan list.
 434                 */
 435                if (inode->i_nlink == 0)
 436                        remove_orphan_inode(F2FS_I_SB(dir), inode->i_ino);
 437                inc_nlink(inode);
 438        }
 439        return page;
 440
 441put_error:
 442        f2fs_put_page(page, 1);
 443error:
 444        /* once the failed inode becomes a bad inode, i_mode is S_IFREG */
 445        truncate_inode_pages(&inode->i_data, 0);
 446        truncate_blocks(inode, 0, false);
 447        remove_dirty_dir_inode(inode);
 448        remove_inode_page(inode);
 449        return ERR_PTR(err);
 450}
 451
 452void update_parent_metadata(struct inode *dir, struct inode *inode,
 453                                                unsigned int current_depth)
 454{
 455        if (inode && is_inode_flag_set(F2FS_I(inode), FI_NEW_INODE)) {
 456                if (S_ISDIR(inode->i_mode)) {
 457                        inc_nlink(dir);
 458                        set_inode_flag(F2FS_I(dir), FI_UPDATE_DIR);
 459                }
 460                clear_inode_flag(F2FS_I(inode), FI_NEW_INODE);
 461        }
 462        dir->i_mtime = dir->i_ctime = CURRENT_TIME;
 463        mark_inode_dirty(dir);
 464
 465        if (F2FS_I(dir)->i_current_depth != current_depth) {
 466                F2FS_I(dir)->i_current_depth = current_depth;
 467                set_inode_flag(F2FS_I(dir), FI_UPDATE_DIR);
 468        }
 469
 470        if (inode && is_inode_flag_set(F2FS_I(inode), FI_INC_LINK))
 471                clear_inode_flag(F2FS_I(inode), FI_INC_LINK);
 472}
 473
 474int room_for_filename(const void *bitmap, int slots, int max_slots)
 475{
 476        int bit_start = 0;
 477        int zero_start, zero_end;
 478next:
 479        zero_start = find_next_zero_bit_le(bitmap, max_slots, bit_start);
 480        if (zero_start >= max_slots)
 481                return max_slots;
 482
 483        zero_end = find_next_bit_le(bitmap, max_slots, zero_start);
 484        if (zero_end - zero_start >= slots)
 485                return zero_start;
 486
 487        bit_start = zero_end + 1;
 488
 489        if (zero_end + 1 >= max_slots)
 490                return max_slots;
 491        goto next;
 492}
 493
 494void f2fs_update_dentry(nid_t ino, umode_t mode, struct f2fs_dentry_ptr *d,
 495                                const struct qstr *name, f2fs_hash_t name_hash,
 496                                unsigned int bit_pos)
 497{
 498        struct f2fs_dir_entry *de;
 499        int slots = GET_DENTRY_SLOTS(name->len);
 500        int i;
 501
 502        de = &d->dentry[bit_pos];
 503        de->hash_code = name_hash;
 504        de->name_len = cpu_to_le16(name->len);
 505        memcpy(d->filename[bit_pos], name->name, name->len);
 506        de->ino = cpu_to_le32(ino);
 507        set_de_type(de, mode);
 508        for (i = 0; i < slots; i++)
 509                test_and_set_bit_le(bit_pos + i, (void *)d->bitmap);
 510}
 511
 512/*
 513 * Caller should grab and release a rwsem by calling f2fs_lock_op() and
 514 * f2fs_unlock_op().
 515 */
 516int __f2fs_add_link(struct inode *dir, const struct qstr *name,
 517                                struct inode *inode, nid_t ino, umode_t mode)
 518{
 519        unsigned int bit_pos;
 520        unsigned int level;
 521        unsigned int current_depth;
 522        unsigned long bidx, block;
 523        f2fs_hash_t dentry_hash;
 524        unsigned int nbucket, nblock;
 525        struct page *dentry_page = NULL;
 526        struct f2fs_dentry_block *dentry_blk = NULL;
 527        struct f2fs_dentry_ptr d;
 528        struct page *page = NULL;
 529        struct f2fs_filename fname;
 530        struct qstr new_name;
 531        int slots, err;
 532
 533        err = f2fs_fname_setup_filename(dir, name, 0, &fname);
 534        if (err)
 535                return err;
 536
 537        new_name.name = fname_name(&fname);
 538        new_name.len = fname_len(&fname);
 539
 540        if (f2fs_has_inline_dentry(dir)) {
 541                err = f2fs_add_inline_entry(dir, &new_name, inode, ino, mode);
 542                if (!err || err != -EAGAIN)
 543                        goto out;
 544                else
 545                        err = 0;
 546        }
 547
 548        level = 0;
 549        slots = GET_DENTRY_SLOTS(new_name.len);
 550        dentry_hash = f2fs_dentry_hash(&new_name);
 551
 552        current_depth = F2FS_I(dir)->i_current_depth;
 553        if (F2FS_I(dir)->chash == dentry_hash) {
 554                level = F2FS_I(dir)->clevel;
 555                F2FS_I(dir)->chash = 0;
 556        }
 557
 558start:
 559        if (unlikely(current_depth == MAX_DIR_HASH_DEPTH)) {
 560                err = -ENOSPC;
 561                goto out;
 562        }
 563
 564        /* Increase the depth, if required */
 565        if (level == current_depth)
 566                ++current_depth;
 567
 568        nbucket = dir_buckets(level, F2FS_I(dir)->i_dir_level);
 569        nblock = bucket_blocks(level);
 570
 571        bidx = dir_block_index(level, F2FS_I(dir)->i_dir_level,
 572                                (le32_to_cpu(dentry_hash) % nbucket));
 573
 574        for (block = bidx; block <= (bidx + nblock - 1); block++) {
 575                dentry_page = get_new_data_page(dir, NULL, block, true);
 576                if (IS_ERR(dentry_page)) {
 577                        err = PTR_ERR(dentry_page);
 578                        goto out;
 579                }
 580
 581                dentry_blk = kmap(dentry_page);
 582                bit_pos = room_for_filename(&dentry_blk->dentry_bitmap,
 583                                                slots, NR_DENTRY_IN_BLOCK);
 584                if (bit_pos < NR_DENTRY_IN_BLOCK)
 585                        goto add_dentry;
 586
 587                kunmap(dentry_page);
 588                f2fs_put_page(dentry_page, 1);
 589        }
 590
 591        /* Move to next level to find the empty slot for new dentry */
 592        ++level;
 593        goto start;
 594add_dentry:
 595        f2fs_wait_on_page_writeback(dentry_page, DATA);
 596
 597        if (inode) {
 598                down_write(&F2FS_I(inode)->i_sem);
 599                page = init_inode_metadata(inode, dir, &new_name, NULL);
 600                if (IS_ERR(page)) {
 601                        err = PTR_ERR(page);
 602                        goto fail;
 603                }
 604                if (f2fs_encrypted_inode(dir))
 605                        file_set_enc_name(inode);
 606        }
 607
 608        make_dentry_ptr(NULL, &d, (void *)dentry_blk, 1);
 609        f2fs_update_dentry(ino, mode, &d, &new_name, dentry_hash, bit_pos);
 610
 611        set_page_dirty(dentry_page);
 612
 613        if (inode) {
 614                /* we don't need to mark_inode_dirty now */
 615                F2FS_I(inode)->i_pino = dir->i_ino;
 616                update_inode(inode, page);
 617                f2fs_put_page(page, 1);
 618        }
 619
 620        update_parent_metadata(dir, inode, current_depth);
 621fail:
 622        if (inode)
 623                up_write(&F2FS_I(inode)->i_sem);
 624
 625        if (is_inode_flag_set(F2FS_I(dir), FI_UPDATE_DIR)) {
 626                update_inode_page(dir);
 627                clear_inode_flag(F2FS_I(dir), FI_UPDATE_DIR);
 628        }
 629        kunmap(dentry_page);
 630        f2fs_put_page(dentry_page, 1);
 631out:
 632        f2fs_fname_free_filename(&fname);
 633        return err;
 634}
 635
 636int f2fs_do_tmpfile(struct inode *inode, struct inode *dir)
 637{
 638        struct page *page;
 639        int err = 0;
 640
 641        down_write(&F2FS_I(inode)->i_sem);
 642        page = init_inode_metadata(inode, dir, NULL, NULL);
 643        if (IS_ERR(page)) {
 644                err = PTR_ERR(page);
 645                goto fail;
 646        }
 647        /* we don't need to mark_inode_dirty now */
 648        update_inode(inode, page);
 649        f2fs_put_page(page, 1);
 650
 651        clear_inode_flag(F2FS_I(inode), FI_NEW_INODE);
 652fail:
 653        up_write(&F2FS_I(inode)->i_sem);
 654        return err;
 655}
 656
 657void f2fs_drop_nlink(struct inode *dir, struct inode *inode, struct page *page)
 658{
 659        struct f2fs_sb_info *sbi = F2FS_I_SB(dir);
 660
 661        down_write(&F2FS_I(inode)->i_sem);
 662
 663        if (S_ISDIR(inode->i_mode)) {
 664                drop_nlink(dir);
 665                if (page)
 666                        update_inode(dir, page);
 667                else
 668                        update_inode_page(dir);
 669        }
 670        inode->i_ctime = CURRENT_TIME;
 671
 672        drop_nlink(inode);
 673        if (S_ISDIR(inode->i_mode)) {
 674                drop_nlink(inode);
 675                i_size_write(inode, 0);
 676        }
 677        up_write(&F2FS_I(inode)->i_sem);
 678        update_inode_page(inode);
 679
 680        if (inode->i_nlink == 0)
 681                add_orphan_inode(sbi, inode->i_ino);
 682        else
 683                release_orphan_inode(sbi);
 684}
 685
 686/*
 687 * It only removes the dentry from the dentry page, corresponding name
 688 * entry in name page does not need to be touched during deletion.
 689 */
 690void f2fs_delete_entry(struct f2fs_dir_entry *dentry, struct page *page,
 691                                        struct inode *dir, struct inode *inode)
 692{
 693        struct  f2fs_dentry_block *dentry_blk;
 694        unsigned int bit_pos;
 695        int slots = GET_DENTRY_SLOTS(le16_to_cpu(dentry->name_len));
 696        int i;
 697
 698        if (f2fs_has_inline_dentry(dir))
 699                return f2fs_delete_inline_entry(dentry, page, dir, inode);
 700
 701        lock_page(page);
 702        f2fs_wait_on_page_writeback(page, DATA);
 703
 704        dentry_blk = page_address(page);
 705        bit_pos = dentry - dentry_blk->dentry;
 706        for (i = 0; i < slots; i++)
 707                clear_bit_le(bit_pos + i, &dentry_blk->dentry_bitmap);
 708
 709        /* Let's check and deallocate this dentry page */
 710        bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap,
 711                        NR_DENTRY_IN_BLOCK,
 712                        0);
 713        kunmap(page); /* kunmap - pair of f2fs_find_entry */
 714        set_page_dirty(page);
 715
 716        dir->i_ctime = dir->i_mtime = CURRENT_TIME;
 717
 718        if (inode)
 719                f2fs_drop_nlink(dir, inode, NULL);
 720
 721        if (bit_pos == NR_DENTRY_IN_BLOCK &&
 722                        !truncate_hole(dir, page->index, page->index + 1)) {
 723                clear_page_dirty_for_io(page);
 724                ClearPagePrivate(page);
 725                ClearPageUptodate(page);
 726                inode_dec_dirty_pages(dir);
 727        }
 728        f2fs_put_page(page, 1);
 729}
 730
 731bool f2fs_empty_dir(struct inode *dir)
 732{
 733        unsigned long bidx;
 734        struct page *dentry_page;
 735        unsigned int bit_pos;
 736        struct f2fs_dentry_block *dentry_blk;
 737        unsigned long nblock = dir_blocks(dir);
 738
 739        if (f2fs_has_inline_dentry(dir))
 740                return f2fs_empty_inline_dir(dir);
 741
 742        for (bidx = 0; bidx < nblock; bidx++) {
 743                dentry_page = get_lock_data_page(dir, bidx, false);
 744                if (IS_ERR(dentry_page)) {
 745                        if (PTR_ERR(dentry_page) == -ENOENT)
 746                                continue;
 747                        else
 748                                return false;
 749                }
 750
 751                dentry_blk = kmap_atomic(dentry_page);
 752                if (bidx == 0)
 753                        bit_pos = 2;
 754                else
 755                        bit_pos = 0;
 756                bit_pos = find_next_bit_le(&dentry_blk->dentry_bitmap,
 757                                                NR_DENTRY_IN_BLOCK,
 758                                                bit_pos);
 759                kunmap_atomic(dentry_blk);
 760
 761                f2fs_put_page(dentry_page, 1);
 762
 763                if (bit_pos < NR_DENTRY_IN_BLOCK)
 764                        return false;
 765        }
 766        return true;
 767}
 768
 769bool f2fs_fill_dentries(struct dir_context *ctx, struct f2fs_dentry_ptr *d,
 770                                unsigned int start_pos, struct f2fs_str *fstr)
 771{
 772        unsigned char d_type = DT_UNKNOWN;
 773        unsigned int bit_pos;
 774        struct f2fs_dir_entry *de = NULL;
 775        struct f2fs_str de_name = FSTR_INIT(NULL, 0);
 776
 777        bit_pos = ((unsigned long)ctx->pos % d->max);
 778
 779        while (bit_pos < d->max) {
 780                bit_pos = find_next_bit_le(d->bitmap, d->max, bit_pos);
 781                if (bit_pos >= d->max)
 782                        break;
 783
 784                de = &d->dentry[bit_pos];
 785                if (de->file_type < F2FS_FT_MAX)
 786                        d_type = f2fs_filetype_table[de->file_type];
 787                else
 788                        d_type = DT_UNKNOWN;
 789
 790                de_name.name = d->filename[bit_pos];
 791                de_name.len = le16_to_cpu(de->name_len);
 792
 793                if (f2fs_encrypted_inode(d->inode)) {
 794                        int save_len = fstr->len;
 795                        int ret;
 796
 797                        de_name.name = kmalloc(de_name.len, GFP_NOFS);
 798                        if (!de_name.name)
 799                                return false;
 800
 801                        memcpy(de_name.name, d->filename[bit_pos], de_name.len);
 802
 803                        ret = f2fs_fname_disk_to_usr(d->inode, &de->hash_code,
 804                                                        &de_name, fstr);
 805                        kfree(de_name.name);
 806                        if (ret < 0)
 807                                return true;
 808
 809                        de_name = *fstr;
 810                        fstr->len = save_len;
 811                }
 812
 813                if (!dir_emit(ctx, de_name.name, de_name.len,
 814                                        le32_to_cpu(de->ino), d_type))
 815                        return true;
 816
 817                bit_pos += GET_DENTRY_SLOTS(le16_to_cpu(de->name_len));
 818                ctx->pos = start_pos + bit_pos;
 819        }
 820        return false;
 821}
 822
 823static int f2fs_readdir(struct file *file, struct dir_context *ctx)
 824{
 825        struct inode *inode = file_inode(file);
 826        unsigned long npages = dir_blocks(inode);
 827        struct f2fs_dentry_block *dentry_blk = NULL;
 828        struct page *dentry_page = NULL;
 829        struct file_ra_state *ra = &file->f_ra;
 830        unsigned int n = ((unsigned long)ctx->pos / NR_DENTRY_IN_BLOCK);
 831        struct f2fs_dentry_ptr d;
 832        struct f2fs_str fstr = FSTR_INIT(NULL, 0);
 833        int err = 0;
 834
 835        if (f2fs_encrypted_inode(inode)) {
 836                err = f2fs_get_encryption_info(inode);
 837                if (err)
 838                        return err;
 839
 840                err = f2fs_fname_crypto_alloc_buffer(inode, F2FS_NAME_LEN,
 841                                                                &fstr);
 842                if (err < 0)
 843                        return err;
 844        }
 845
 846        if (f2fs_has_inline_dentry(inode)) {
 847                err = f2fs_read_inline_dir(file, ctx, &fstr);
 848                goto out;
 849        }
 850
 851        /* readahead for multi pages of dir */
 852        if (npages - n > 1 && !ra_has_index(ra, n))
 853                page_cache_sync_readahead(inode->i_mapping, ra, file, n,
 854                                min(npages - n, (pgoff_t)MAX_DIR_RA_PAGES));
 855
 856        for (; n < npages; n++) {
 857                dentry_page = get_lock_data_page(inode, n, false);
 858                if (IS_ERR(dentry_page))
 859                        continue;
 860
 861                dentry_blk = kmap(dentry_page);
 862
 863                make_dentry_ptr(inode, &d, (void *)dentry_blk, 1);
 864
 865                if (f2fs_fill_dentries(ctx, &d, n * NR_DENTRY_IN_BLOCK, &fstr))
 866                        goto stop;
 867
 868                ctx->pos = (n + 1) * NR_DENTRY_IN_BLOCK;
 869                kunmap(dentry_page);
 870                f2fs_put_page(dentry_page, 1);
 871                dentry_page = NULL;
 872        }
 873stop:
 874        if (dentry_page && !IS_ERR(dentry_page)) {
 875                kunmap(dentry_page);
 876                f2fs_put_page(dentry_page, 1);
 877        }
 878out:
 879        f2fs_fname_crypto_free_buffer(&fstr);
 880        return err;
 881}
 882
 883const struct file_operations f2fs_dir_operations = {
 884        .llseek         = generic_file_llseek,
 885        .read           = generic_read_dir,
 886        .iterate        = f2fs_readdir,
 887        .fsync          = f2fs_sync_file,
 888        .unlocked_ioctl = f2fs_ioctl,
 889#ifdef CONFIG_COMPAT
 890        .compat_ioctl   = f2fs_compat_ioctl,
 891#endif
 892};
 893