linux/fs/ext4/namei.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/*
   3 *  linux/fs/ext4/namei.c
   4 *
   5 * Copyright (C) 1992, 1993, 1994, 1995
   6 * Remy Card (card@masi.ibp.fr)
   7 * Laboratoire MASI - Institut Blaise Pascal
   8 * Universite Pierre et Marie Curie (Paris VI)
   9 *
  10 *  from
  11 *
  12 *  linux/fs/minix/namei.c
  13 *
  14 *  Copyright (C) 1991, 1992  Linus Torvalds
  15 *
  16 *  Big-endian to little-endian byte-swapping/bitmaps by
  17 *        David S. Miller (davem@caip.rutgers.edu), 1995
  18 *  Directory entry file type support and forward compatibility hooks
  19 *      for B-tree directories by Theodore Ts'o (tytso@mit.edu), 1998
  20 *  Hash Tree Directory indexing (c)
  21 *      Daniel Phillips, 2001
  22 *  Hash Tree Directory indexing porting
  23 *      Christopher Li, 2002
  24 *  Hash Tree Directory indexing cleanup
  25 *      Theodore Ts'o, 2002
  26 */
  27
  28#include <linux/fs.h>
  29#include <linux/pagemap.h>
  30#include <linux/time.h>
  31#include <linux/fcntl.h>
  32#include <linux/stat.h>
  33#include <linux/string.h>
  34#include <linux/quotaops.h>
  35#include <linux/buffer_head.h>
  36#include <linux/bio.h>
  37#include <linux/iversion.h>
  38#include "ext4.h"
  39#include "ext4_jbd2.h"
  40
  41#include "xattr.h"
  42#include "acl.h"
  43
  44#include <trace/events/ext4.h>
  45/*
  46 * define how far ahead to read directories while searching them.
  47 */
  48#define NAMEI_RA_CHUNKS  2
  49#define NAMEI_RA_BLOCKS  4
  50#define NAMEI_RA_SIZE        (NAMEI_RA_CHUNKS * NAMEI_RA_BLOCKS)
  51
  52static struct buffer_head *ext4_append(handle_t *handle,
  53                                        struct inode *inode,
  54                                        ext4_lblk_t *block)
  55{
  56        struct buffer_head *bh;
  57        int err;
  58
  59        if (unlikely(EXT4_SB(inode->i_sb)->s_max_dir_size_kb &&
  60                     ((inode->i_size >> 10) >=
  61                      EXT4_SB(inode->i_sb)->s_max_dir_size_kb)))
  62                return ERR_PTR(-ENOSPC);
  63
  64        *block = inode->i_size >> inode->i_sb->s_blocksize_bits;
  65
  66        bh = ext4_bread(handle, inode, *block, EXT4_GET_BLOCKS_CREATE);
  67        if (IS_ERR(bh))
  68                return bh;
  69        inode->i_size += inode->i_sb->s_blocksize;
  70        EXT4_I(inode)->i_disksize = inode->i_size;
  71        BUFFER_TRACE(bh, "get_write_access");
  72        err = ext4_journal_get_write_access(handle, bh);
  73        if (err) {
  74                brelse(bh);
  75                ext4_std_error(inode->i_sb, err);
  76                return ERR_PTR(err);
  77        }
  78        return bh;
  79}
  80
  81static int ext4_dx_csum_verify(struct inode *inode,
  82                               struct ext4_dir_entry *dirent);
  83
  84typedef enum {
  85        EITHER, INDEX, DIRENT
  86} dirblock_type_t;
  87
  88#define ext4_read_dirblock(inode, block, type) \
  89        __ext4_read_dirblock((inode), (block), (type), __func__, __LINE__)
  90
  91static struct buffer_head *__ext4_read_dirblock(struct inode *inode,
  92                                                ext4_lblk_t block,
  93                                                dirblock_type_t type,
  94                                                const char *func,
  95                                                unsigned int line)
  96{
  97        struct buffer_head *bh;
  98        struct ext4_dir_entry *dirent;
  99        int is_dx_block = 0;
 100
 101        bh = ext4_bread(NULL, inode, block, 0);
 102        if (IS_ERR(bh)) {
 103                __ext4_warning(inode->i_sb, func, line,
 104                               "inode #%lu: lblock %lu: comm %s: "
 105                               "error %ld reading directory block",
 106                               inode->i_ino, (unsigned long)block,
 107                               current->comm, PTR_ERR(bh));
 108
 109                return bh;
 110        }
 111        if (!bh) {
 112                ext4_error_inode(inode, func, line, block,
 113                                 "Directory hole found");
 114                return ERR_PTR(-EFSCORRUPTED);
 115        }
 116        dirent = (struct ext4_dir_entry *) bh->b_data;
 117        /* Determine whether or not we have an index block */
 118        if (is_dx(inode)) {
 119                if (block == 0)
 120                        is_dx_block = 1;
 121                else if (ext4_rec_len_from_disk(dirent->rec_len,
 122                                                inode->i_sb->s_blocksize) ==
 123                         inode->i_sb->s_blocksize)
 124                        is_dx_block = 1;
 125        }
 126        if (!is_dx_block && type == INDEX) {
 127                ext4_error_inode(inode, func, line, block,
 128                       "directory leaf block found instead of index block");
 129                brelse(bh);
 130                return ERR_PTR(-EFSCORRUPTED);
 131        }
 132        if (!ext4_has_metadata_csum(inode->i_sb) ||
 133            buffer_verified(bh))
 134                return bh;
 135
 136        /*
 137         * An empty leaf block can get mistaken for a index block; for
 138         * this reason, we can only check the index checksum when the
 139         * caller is sure it should be an index block.
 140         */
 141        if (is_dx_block && type == INDEX) {
 142                if (ext4_dx_csum_verify(inode, dirent))
 143                        set_buffer_verified(bh);
 144                else {
 145                        ext4_error_inode(inode, func, line, block,
 146                                         "Directory index failed checksum");
 147                        brelse(bh);
 148                        return ERR_PTR(-EFSBADCRC);
 149                }
 150        }
 151        if (!is_dx_block) {
 152                if (ext4_dirent_csum_verify(inode, dirent))
 153                        set_buffer_verified(bh);
 154                else {
 155                        ext4_error_inode(inode, func, line, block,
 156                                         "Directory block failed checksum");
 157                        brelse(bh);
 158                        return ERR_PTR(-EFSBADCRC);
 159                }
 160        }
 161        return bh;
 162}
 163
 164#ifndef assert
 165#define assert(test) J_ASSERT(test)
 166#endif
 167
 168#ifdef DX_DEBUG
 169#define dxtrace(command) command
 170#else
 171#define dxtrace(command)
 172#endif
 173
 174struct fake_dirent
 175{
 176        __le32 inode;
 177        __le16 rec_len;
 178        u8 name_len;
 179        u8 file_type;
 180};
 181
 182struct dx_countlimit
 183{
 184        __le16 limit;
 185        __le16 count;
 186};
 187
 188struct dx_entry
 189{
 190        __le32 hash;
 191        __le32 block;
 192};
 193
 194/*
 195 * dx_root_info is laid out so that if it should somehow get overlaid by a
 196 * dirent the two low bits of the hash version will be zero.  Therefore, the
 197 * hash version mod 4 should never be 0.  Sincerely, the paranoia department.
 198 */
 199
 200struct dx_root
 201{
 202        struct fake_dirent dot;
 203        char dot_name[4];
 204        struct fake_dirent dotdot;
 205        char dotdot_name[4];
 206        struct dx_root_info
 207        {
 208                __le32 reserved_zero;
 209                u8 hash_version;
 210                u8 info_length; /* 8 */
 211                u8 indirect_levels;
 212                u8 unused_flags;
 213        }
 214        info;
 215        struct dx_entry entries[0];
 216};
 217
 218struct dx_node
 219{
 220        struct fake_dirent fake;
 221        struct dx_entry entries[0];
 222};
 223
 224
 225struct dx_frame
 226{
 227        struct buffer_head *bh;
 228        struct dx_entry *entries;
 229        struct dx_entry *at;
 230};
 231
 232struct dx_map_entry
 233{
 234        u32 hash;
 235        u16 offs;
 236        u16 size;
 237};
 238
 239/*
 240 * This goes at the end of each htree block.
 241 */
 242struct dx_tail {
 243        u32 dt_reserved;
 244        __le32 dt_checksum;     /* crc32c(uuid+inum+dirblock) */
 245};
 246
 247static inline ext4_lblk_t dx_get_block(struct dx_entry *entry);
 248static void dx_set_block(struct dx_entry *entry, ext4_lblk_t value);
 249static inline unsigned dx_get_hash(struct dx_entry *entry);
 250static void dx_set_hash(struct dx_entry *entry, unsigned value);
 251static unsigned dx_get_count(struct dx_entry *entries);
 252static unsigned dx_get_limit(struct dx_entry *entries);
 253static void dx_set_count(struct dx_entry *entries, unsigned value);
 254static void dx_set_limit(struct dx_entry *entries, unsigned value);
 255static unsigned dx_root_limit(struct inode *dir, unsigned infosize);
 256static unsigned dx_node_limit(struct inode *dir);
 257static struct dx_frame *dx_probe(struct ext4_filename *fname,
 258                                 struct inode *dir,
 259                                 struct dx_hash_info *hinfo,
 260                                 struct dx_frame *frame);
 261static void dx_release(struct dx_frame *frames);
 262static int dx_make_map(struct inode *dir, struct ext4_dir_entry_2 *de,
 263                       unsigned blocksize, struct dx_hash_info *hinfo,
 264                       struct dx_map_entry map[]);
 265static void dx_sort_map(struct dx_map_entry *map, unsigned count);
 266static struct ext4_dir_entry_2 *dx_move_dirents(char *from, char *to,
 267                struct dx_map_entry *offsets, int count, unsigned blocksize);
 268static struct ext4_dir_entry_2* dx_pack_dirents(char *base, unsigned blocksize);
 269static void dx_insert_block(struct dx_frame *frame,
 270                                        u32 hash, ext4_lblk_t block);
 271static int ext4_htree_next_block(struct inode *dir, __u32 hash,
 272                                 struct dx_frame *frame,
 273                                 struct dx_frame *frames,
 274                                 __u32 *start_hash);
 275static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
 276                struct ext4_filename *fname,
 277                struct ext4_dir_entry_2 **res_dir);
 278static int ext4_dx_add_entry(handle_t *handle, struct ext4_filename *fname,
 279                             struct inode *dir, struct inode *inode);
 280
 281/* checksumming functions */
 282void initialize_dirent_tail(struct ext4_dir_entry_tail *t,
 283                            unsigned int blocksize)
 284{
 285        memset(t, 0, sizeof(struct ext4_dir_entry_tail));
 286        t->det_rec_len = ext4_rec_len_to_disk(
 287                        sizeof(struct ext4_dir_entry_tail), blocksize);
 288        t->det_reserved_ft = EXT4_FT_DIR_CSUM;
 289}
 290
 291/* Walk through a dirent block to find a checksum "dirent" at the tail */
 292static struct ext4_dir_entry_tail *get_dirent_tail(struct inode *inode,
 293                                                   struct ext4_dir_entry *de)
 294{
 295        struct ext4_dir_entry_tail *t;
 296
 297#ifdef PARANOID
 298        struct ext4_dir_entry *d, *top;
 299
 300        d = de;
 301        top = (struct ext4_dir_entry *)(((void *)de) +
 302                (EXT4_BLOCK_SIZE(inode->i_sb) -
 303                sizeof(struct ext4_dir_entry_tail)));
 304        while (d < top && d->rec_len)
 305                d = (struct ext4_dir_entry *)(((void *)d) +
 306                    le16_to_cpu(d->rec_len));
 307
 308        if (d != top)
 309                return NULL;
 310
 311        t = (struct ext4_dir_entry_tail *)d;
 312#else
 313        t = EXT4_DIRENT_TAIL(de, EXT4_BLOCK_SIZE(inode->i_sb));
 314#endif
 315
 316        if (t->det_reserved_zero1 ||
 317            le16_to_cpu(t->det_rec_len) != sizeof(struct ext4_dir_entry_tail) ||
 318            t->det_reserved_zero2 ||
 319            t->det_reserved_ft != EXT4_FT_DIR_CSUM)
 320                return NULL;
 321
 322        return t;
 323}
 324
 325static __le32 ext4_dirent_csum(struct inode *inode,
 326                               struct ext4_dir_entry *dirent, int size)
 327{
 328        struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
 329        struct ext4_inode_info *ei = EXT4_I(inode);
 330        __u32 csum;
 331
 332        csum = ext4_chksum(sbi, ei->i_csum_seed, (__u8 *)dirent, size);
 333        return cpu_to_le32(csum);
 334}
 335
 336#define warn_no_space_for_csum(inode)                                   \
 337        __warn_no_space_for_csum((inode), __func__, __LINE__)
 338
 339static void __warn_no_space_for_csum(struct inode *inode, const char *func,
 340                                     unsigned int line)
 341{
 342        __ext4_warning_inode(inode, func, line,
 343                "No space for directory leaf checksum. Please run e2fsck -D.");
 344}
 345
 346int ext4_dirent_csum_verify(struct inode *inode, struct ext4_dir_entry *dirent)
 347{
 348        struct ext4_dir_entry_tail *t;
 349
 350        if (!ext4_has_metadata_csum(inode->i_sb))
 351                return 1;
 352
 353        t = get_dirent_tail(inode, dirent);
 354        if (!t) {
 355                warn_no_space_for_csum(inode);
 356                return 0;
 357        }
 358
 359        if (t->det_checksum != ext4_dirent_csum(inode, dirent,
 360                                                (void *)t - (void *)dirent))
 361                return 0;
 362
 363        return 1;
 364}
 365
 366static void ext4_dirent_csum_set(struct inode *inode,
 367                                 struct ext4_dir_entry *dirent)
 368{
 369        struct ext4_dir_entry_tail *t;
 370
 371        if (!ext4_has_metadata_csum(inode->i_sb))
 372                return;
 373
 374        t = get_dirent_tail(inode, dirent);
 375        if (!t) {
 376                warn_no_space_for_csum(inode);
 377                return;
 378        }
 379
 380        t->det_checksum = ext4_dirent_csum(inode, dirent,
 381                                           (void *)t - (void *)dirent);
 382}
 383
 384int ext4_handle_dirty_dirent_node(handle_t *handle,
 385                                  struct inode *inode,
 386                                  struct buffer_head *bh)
 387{
 388        ext4_dirent_csum_set(inode, (struct ext4_dir_entry *)bh->b_data);
 389        return ext4_handle_dirty_metadata(handle, inode, bh);
 390}
 391
 392static struct dx_countlimit *get_dx_countlimit(struct inode *inode,
 393                                               struct ext4_dir_entry *dirent,
 394                                               int *offset)
 395{
 396        struct ext4_dir_entry *dp;
 397        struct dx_root_info *root;
 398        int count_offset;
 399
 400        if (le16_to_cpu(dirent->rec_len) == EXT4_BLOCK_SIZE(inode->i_sb))
 401                count_offset = 8;
 402        else if (le16_to_cpu(dirent->rec_len) == 12) {
 403                dp = (struct ext4_dir_entry *)(((void *)dirent) + 12);
 404                if (le16_to_cpu(dp->rec_len) !=
 405                    EXT4_BLOCK_SIZE(inode->i_sb) - 12)
 406                        return NULL;
 407                root = (struct dx_root_info *)(((void *)dp + 12));
 408                if (root->reserved_zero ||
 409                    root->info_length != sizeof(struct dx_root_info))
 410                        return NULL;
 411                count_offset = 32;
 412        } else
 413                return NULL;
 414
 415        if (offset)
 416                *offset = count_offset;
 417        return (struct dx_countlimit *)(((void *)dirent) + count_offset);
 418}
 419
 420static __le32 ext4_dx_csum(struct inode *inode, struct ext4_dir_entry *dirent,
 421                           int count_offset, int count, struct dx_tail *t)
 422{
 423        struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
 424        struct ext4_inode_info *ei = EXT4_I(inode);
 425        __u32 csum;
 426        int size;
 427        __u32 dummy_csum = 0;
 428        int offset = offsetof(struct dx_tail, dt_checksum);
 429
 430        size = count_offset + (count * sizeof(struct dx_entry));
 431        csum = ext4_chksum(sbi, ei->i_csum_seed, (__u8 *)dirent, size);
 432        csum = ext4_chksum(sbi, csum, (__u8 *)t, offset);
 433        csum = ext4_chksum(sbi, csum, (__u8 *)&dummy_csum, sizeof(dummy_csum));
 434
 435        return cpu_to_le32(csum);
 436}
 437
 438static int ext4_dx_csum_verify(struct inode *inode,
 439                               struct ext4_dir_entry *dirent)
 440{
 441        struct dx_countlimit *c;
 442        struct dx_tail *t;
 443        int count_offset, limit, count;
 444
 445        if (!ext4_has_metadata_csum(inode->i_sb))
 446                return 1;
 447
 448        c = get_dx_countlimit(inode, dirent, &count_offset);
 449        if (!c) {
 450                EXT4_ERROR_INODE(inode, "dir seems corrupt?  Run e2fsck -D.");
 451                return 0;
 452        }
 453        limit = le16_to_cpu(c->limit);
 454        count = le16_to_cpu(c->count);
 455        if (count_offset + (limit * sizeof(struct dx_entry)) >
 456            EXT4_BLOCK_SIZE(inode->i_sb) - sizeof(struct dx_tail)) {
 457                warn_no_space_for_csum(inode);
 458                return 0;
 459        }
 460        t = (struct dx_tail *)(((struct dx_entry *)c) + limit);
 461
 462        if (t->dt_checksum != ext4_dx_csum(inode, dirent, count_offset,
 463                                            count, t))
 464                return 0;
 465        return 1;
 466}
 467
 468static void ext4_dx_csum_set(struct inode *inode, struct ext4_dir_entry *dirent)
 469{
 470        struct dx_countlimit *c;
 471        struct dx_tail *t;
 472        int count_offset, limit, count;
 473
 474        if (!ext4_has_metadata_csum(inode->i_sb))
 475                return;
 476
 477        c = get_dx_countlimit(inode, dirent, &count_offset);
 478        if (!c) {
 479                EXT4_ERROR_INODE(inode, "dir seems corrupt?  Run e2fsck -D.");
 480                return;
 481        }
 482        limit = le16_to_cpu(c->limit);
 483        count = le16_to_cpu(c->count);
 484        if (count_offset + (limit * sizeof(struct dx_entry)) >
 485            EXT4_BLOCK_SIZE(inode->i_sb) - sizeof(struct dx_tail)) {
 486                warn_no_space_for_csum(inode);
 487                return;
 488        }
 489        t = (struct dx_tail *)(((struct dx_entry *)c) + limit);
 490
 491        t->dt_checksum = ext4_dx_csum(inode, dirent, count_offset, count, t);
 492}
 493
 494static inline int ext4_handle_dirty_dx_node(handle_t *handle,
 495                                            struct inode *inode,
 496                                            struct buffer_head *bh)
 497{
 498        ext4_dx_csum_set(inode, (struct ext4_dir_entry *)bh->b_data);
 499        return ext4_handle_dirty_metadata(handle, inode, bh);
 500}
 501
 502/*
 503 * p is at least 6 bytes before the end of page
 504 */
 505static inline struct ext4_dir_entry_2 *
 506ext4_next_entry(struct ext4_dir_entry_2 *p, unsigned long blocksize)
 507{
 508        return (struct ext4_dir_entry_2 *)((char *)p +
 509                ext4_rec_len_from_disk(p->rec_len, blocksize));
 510}
 511
 512/*
 513 * Future: use high four bits of block for coalesce-on-delete flags
 514 * Mask them off for now.
 515 */
 516
 517static inline ext4_lblk_t dx_get_block(struct dx_entry *entry)
 518{
 519        return le32_to_cpu(entry->block) & 0x0fffffff;
 520}
 521
 522static inline void dx_set_block(struct dx_entry *entry, ext4_lblk_t value)
 523{
 524        entry->block = cpu_to_le32(value);
 525}
 526
 527static inline unsigned dx_get_hash(struct dx_entry *entry)
 528{
 529        return le32_to_cpu(entry->hash);
 530}
 531
 532static inline void dx_set_hash(struct dx_entry *entry, unsigned value)
 533{
 534        entry->hash = cpu_to_le32(value);
 535}
 536
 537static inline unsigned dx_get_count(struct dx_entry *entries)
 538{
 539        return le16_to_cpu(((struct dx_countlimit *) entries)->count);
 540}
 541
 542static inline unsigned dx_get_limit(struct dx_entry *entries)
 543{
 544        return le16_to_cpu(((struct dx_countlimit *) entries)->limit);
 545}
 546
 547static inline void dx_set_count(struct dx_entry *entries, unsigned value)
 548{
 549        ((struct dx_countlimit *) entries)->count = cpu_to_le16(value);
 550}
 551
 552static inline void dx_set_limit(struct dx_entry *entries, unsigned value)
 553{
 554        ((struct dx_countlimit *) entries)->limit = cpu_to_le16(value);
 555}
 556
 557static inline unsigned dx_root_limit(struct inode *dir, unsigned infosize)
 558{
 559        unsigned entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(1) -
 560                EXT4_DIR_REC_LEN(2) - infosize;
 561
 562        if (ext4_has_metadata_csum(dir->i_sb))
 563                entry_space -= sizeof(struct dx_tail);
 564        return entry_space / sizeof(struct dx_entry);
 565}
 566
 567static inline unsigned dx_node_limit(struct inode *dir)
 568{
 569        unsigned entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(0);
 570
 571        if (ext4_has_metadata_csum(dir->i_sb))
 572                entry_space -= sizeof(struct dx_tail);
 573        return entry_space / sizeof(struct dx_entry);
 574}
 575
 576/*
 577 * Debug
 578 */
 579#ifdef DX_DEBUG
 580static void dx_show_index(char * label, struct dx_entry *entries)
 581{
 582        int i, n = dx_get_count (entries);
 583        printk(KERN_DEBUG "%s index", label);
 584        for (i = 0; i < n; i++) {
 585                printk(KERN_CONT " %x->%lu",
 586                       i ? dx_get_hash(entries + i) : 0,
 587                       (unsigned long)dx_get_block(entries + i));
 588        }
 589        printk(KERN_CONT "\n");
 590}
 591
 592struct stats
 593{
 594        unsigned names;
 595        unsigned space;
 596        unsigned bcount;
 597};
 598
 599static struct stats dx_show_leaf(struct inode *dir,
 600                                struct dx_hash_info *hinfo,
 601                                struct ext4_dir_entry_2 *de,
 602                                int size, int show_names)
 603{
 604        unsigned names = 0, space = 0;
 605        char *base = (char *) de;
 606        struct dx_hash_info h = *hinfo;
 607
 608        printk("names: ");
 609        while ((char *) de < base + size)
 610        {
 611                if (de->inode)
 612                {
 613                        if (show_names)
 614                        {
 615#ifdef CONFIG_EXT4_FS_ENCRYPTION
 616                                int len;
 617                                char *name;
 618                                struct fscrypt_str fname_crypto_str =
 619                                        FSTR_INIT(NULL, 0);
 620                                int res = 0;
 621
 622                                name  = de->name;
 623                                len = de->name_len;
 624                                if (ext4_encrypted_inode(dir))
 625                                        res = fscrypt_get_encryption_info(dir);
 626                                if (res) {
 627                                        printk(KERN_WARNING "Error setting up"
 628                                               " fname crypto: %d\n", res);
 629                                }
 630                                if (!fscrypt_has_encryption_key(dir)) {
 631                                        /* Directory is not encrypted */
 632                                        ext4fs_dirhash(de->name,
 633                                                de->name_len, &h);
 634                                        printk("%*.s:(U)%x.%u ", len,
 635                                               name, h.hash,
 636                                               (unsigned) ((char *) de
 637                                                           - base));
 638                                } else {
 639                                        struct fscrypt_str de_name =
 640                                                FSTR_INIT(name, len);
 641
 642                                        /* Directory is encrypted */
 643                                        res = fscrypt_fname_alloc_buffer(
 644                                                dir, len,
 645                                                &fname_crypto_str);
 646                                        if (res)
 647                                                printk(KERN_WARNING "Error "
 648                                                        "allocating crypto "
 649                                                        "buffer--skipping "
 650                                                        "crypto\n");
 651                                        res = fscrypt_fname_disk_to_usr(dir,
 652                                                0, 0, &de_name,
 653                                                &fname_crypto_str);
 654                                        if (res) {
 655                                                printk(KERN_WARNING "Error "
 656                                                        "converting filename "
 657                                                        "from disk to usr"
 658                                                        "\n");
 659                                                name = "??";
 660                                                len = 2;
 661                                        } else {
 662                                                name = fname_crypto_str.name;
 663                                                len = fname_crypto_str.len;
 664                                        }
 665                                        ext4fs_dirhash(de->name, de->name_len,
 666                                                       &h);
 667                                        printk("%*.s:(E)%x.%u ", len, name,
 668                                               h.hash, (unsigned) ((char *) de
 669                                                                   - base));
 670                                        fscrypt_fname_free_buffer(
 671                                                        &fname_crypto_str);
 672                                }
 673#else
 674                                int len = de->name_len;
 675                                char *name = de->name;
 676                                ext4fs_dirhash(de->name, de->name_len, &h);
 677                                printk("%*.s:%x.%u ", len, name, h.hash,
 678                                       (unsigned) ((char *) de - base));
 679#endif
 680                        }
 681                        space += EXT4_DIR_REC_LEN(de->name_len);
 682                        names++;
 683                }
 684                de = ext4_next_entry(de, size);
 685        }
 686        printk(KERN_CONT "(%i)\n", names);
 687        return (struct stats) { names, space, 1 };
 688}
 689
 690struct stats dx_show_entries(struct dx_hash_info *hinfo, struct inode *dir,
 691                             struct dx_entry *entries, int levels)
 692{
 693        unsigned blocksize = dir->i_sb->s_blocksize;
 694        unsigned count = dx_get_count(entries), names = 0, space = 0, i;
 695        unsigned bcount = 0;
 696        struct buffer_head *bh;
 697        printk("%i indexed blocks...\n", count);
 698        for (i = 0; i < count; i++, entries++)
 699        {
 700                ext4_lblk_t block = dx_get_block(entries);
 701                ext4_lblk_t hash  = i ? dx_get_hash(entries): 0;
 702                u32 range = i < count - 1? (dx_get_hash(entries + 1) - hash): ~hash;
 703                struct stats stats;
 704                printk("%s%3u:%03u hash %8x/%8x ",levels?"":"   ", i, block, hash, range);
 705                bh = ext4_bread(NULL,dir, block, 0);
 706                if (!bh || IS_ERR(bh))
 707                        continue;
 708                stats = levels?
 709                   dx_show_entries(hinfo, dir, ((struct dx_node *) bh->b_data)->entries, levels - 1):
 710                   dx_show_leaf(dir, hinfo, (struct ext4_dir_entry_2 *)
 711                        bh->b_data, blocksize, 0);
 712                names += stats.names;
 713                space += stats.space;
 714                bcount += stats.bcount;
 715                brelse(bh);
 716        }
 717        if (bcount)
 718                printk(KERN_DEBUG "%snames %u, fullness %u (%u%%)\n",
 719                       levels ? "" : "   ", names, space/bcount,
 720                       (space/bcount)*100/blocksize);
 721        return (struct stats) { names, space, bcount};
 722}
 723#endif /* DX_DEBUG */
 724
 725/*
 726 * Probe for a directory leaf block to search.
 727 *
 728 * dx_probe can return ERR_BAD_DX_DIR, which means there was a format
 729 * error in the directory index, and the caller should fall back to
 730 * searching the directory normally.  The callers of dx_probe **MUST**
 731 * check for this error code, and make sure it never gets reflected
 732 * back to userspace.
 733 */
 734static struct dx_frame *
 735dx_probe(struct ext4_filename *fname, struct inode *dir,
 736         struct dx_hash_info *hinfo, struct dx_frame *frame_in)
 737{
 738        unsigned count, indirect;
 739        struct dx_entry *at, *entries, *p, *q, *m;
 740        struct dx_root *root;
 741        struct dx_frame *frame = frame_in;
 742        struct dx_frame *ret_err = ERR_PTR(ERR_BAD_DX_DIR);
 743        u32 hash;
 744
 745        memset(frame_in, 0, EXT4_HTREE_LEVEL * sizeof(frame_in[0]));
 746        frame->bh = ext4_read_dirblock(dir, 0, INDEX);
 747        if (IS_ERR(frame->bh))
 748                return (struct dx_frame *) frame->bh;
 749
 750        root = (struct dx_root *) frame->bh->b_data;
 751        if (root->info.hash_version != DX_HASH_TEA &&
 752            root->info.hash_version != DX_HASH_HALF_MD4 &&
 753            root->info.hash_version != DX_HASH_LEGACY) {
 754                ext4_warning_inode(dir, "Unrecognised inode hash code %u",
 755                                   root->info.hash_version);
 756                goto fail;
 757        }
 758        if (fname)
 759                hinfo = &fname->hinfo;
 760        hinfo->hash_version = root->info.hash_version;
 761        if (hinfo->hash_version <= DX_HASH_TEA)
 762                hinfo->hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned;
 763        hinfo->seed = EXT4_SB(dir->i_sb)->s_hash_seed;
 764        if (fname && fname_name(fname))
 765                ext4fs_dirhash(fname_name(fname), fname_len(fname), hinfo);
 766        hash = hinfo->hash;
 767
 768        if (root->info.unused_flags & 1) {
 769                ext4_warning_inode(dir, "Unimplemented hash flags: %#06x",
 770                                   root->info.unused_flags);
 771                goto fail;
 772        }
 773
 774        indirect = root->info.indirect_levels;
 775        if (indirect >= ext4_dir_htree_level(dir->i_sb)) {
 776                ext4_warning(dir->i_sb,
 777                             "Directory (ino: %lu) htree depth %#06x exceed"
 778                             "supported value", dir->i_ino,
 779                             ext4_dir_htree_level(dir->i_sb));
 780                if (ext4_dir_htree_level(dir->i_sb) < EXT4_HTREE_LEVEL) {
 781                        ext4_warning(dir->i_sb, "Enable large directory "
 782                                                "feature to access it");
 783                }
 784                goto fail;
 785        }
 786
 787        entries = (struct dx_entry *)(((char *)&root->info) +
 788                                      root->info.info_length);
 789
 790        if (dx_get_limit(entries) != dx_root_limit(dir,
 791                                                   root->info.info_length)) {
 792                ext4_warning_inode(dir, "dx entry: limit %u != root limit %u",
 793                                   dx_get_limit(entries),
 794                                   dx_root_limit(dir, root->info.info_length));
 795                goto fail;
 796        }
 797
 798        dxtrace(printk("Look up %x", hash));
 799        while (1) {
 800                count = dx_get_count(entries);
 801                if (!count || count > dx_get_limit(entries)) {
 802                        ext4_warning_inode(dir,
 803                                           "dx entry: count %u beyond limit %u",
 804                                           count, dx_get_limit(entries));
 805                        goto fail;
 806                }
 807
 808                p = entries + 1;
 809                q = entries + count - 1;
 810                while (p <= q) {
 811                        m = p + (q - p) / 2;
 812                        dxtrace(printk(KERN_CONT "."));
 813                        if (dx_get_hash(m) > hash)
 814                                q = m - 1;
 815                        else
 816                                p = m + 1;
 817                }
 818
 819                if (0) { // linear search cross check
 820                        unsigned n = count - 1;
 821                        at = entries;
 822                        while (n--)
 823                        {
 824                                dxtrace(printk(KERN_CONT ","));
 825                                if (dx_get_hash(++at) > hash)
 826                                {
 827                                        at--;
 828                                        break;
 829                                }
 830                        }
 831                        assert (at == p - 1);
 832                }
 833
 834                at = p - 1;
 835                dxtrace(printk(KERN_CONT " %x->%u\n",
 836                               at == entries ? 0 : dx_get_hash(at),
 837                               dx_get_block(at)));
 838                frame->entries = entries;
 839                frame->at = at;
 840                if (!indirect--)
 841                        return frame;
 842                frame++;
 843                frame->bh = ext4_read_dirblock(dir, dx_get_block(at), INDEX);
 844                if (IS_ERR(frame->bh)) {
 845                        ret_err = (struct dx_frame *) frame->bh;
 846                        frame->bh = NULL;
 847                        goto fail;
 848                }
 849                entries = ((struct dx_node *) frame->bh->b_data)->entries;
 850
 851                if (dx_get_limit(entries) != dx_node_limit(dir)) {
 852                        ext4_warning_inode(dir,
 853                                "dx entry: limit %u != node limit %u",
 854                                dx_get_limit(entries), dx_node_limit(dir));
 855                        goto fail;
 856                }
 857        }
 858fail:
 859        while (frame >= frame_in) {
 860                brelse(frame->bh);
 861                frame--;
 862        }
 863
 864        if (ret_err == ERR_PTR(ERR_BAD_DX_DIR))
 865                ext4_warning_inode(dir,
 866                        "Corrupt directory, running e2fsck is recommended");
 867        return ret_err;
 868}
 869
 870static void dx_release(struct dx_frame *frames)
 871{
 872        struct dx_root_info *info;
 873        int i;
 874
 875        if (frames[0].bh == NULL)
 876                return;
 877
 878        info = &((struct dx_root *)frames[0].bh->b_data)->info;
 879        for (i = 0; i <= info->indirect_levels; i++) {
 880                if (frames[i].bh == NULL)
 881                        break;
 882                brelse(frames[i].bh);
 883                frames[i].bh = NULL;
 884        }
 885}
 886
 887/*
 888 * This function increments the frame pointer to search the next leaf
 889 * block, and reads in the necessary intervening nodes if the search
 890 * should be necessary.  Whether or not the search is necessary is
 891 * controlled by the hash parameter.  If the hash value is even, then
 892 * the search is only continued if the next block starts with that
 893 * hash value.  This is used if we are searching for a specific file.
 894 *
 895 * If the hash value is HASH_NB_ALWAYS, then always go to the next block.
 896 *
 897 * This function returns 1 if the caller should continue to search,
 898 * or 0 if it should not.  If there is an error reading one of the
 899 * index blocks, it will a negative error code.
 900 *
 901 * If start_hash is non-null, it will be filled in with the starting
 902 * hash of the next page.
 903 */
 904static int ext4_htree_next_block(struct inode *dir, __u32 hash,
 905                                 struct dx_frame *frame,
 906                                 struct dx_frame *frames,
 907                                 __u32 *start_hash)
 908{
 909        struct dx_frame *p;
 910        struct buffer_head *bh;
 911        int num_frames = 0;
 912        __u32 bhash;
 913
 914        p = frame;
 915        /*
 916         * Find the next leaf page by incrementing the frame pointer.
 917         * If we run out of entries in the interior node, loop around and
 918         * increment pointer in the parent node.  When we break out of
 919         * this loop, num_frames indicates the number of interior
 920         * nodes need to be read.
 921         */
 922        while (1) {
 923                if (++(p->at) < p->entries + dx_get_count(p->entries))
 924                        break;
 925                if (p == frames)
 926                        return 0;
 927                num_frames++;
 928                p--;
 929        }
 930
 931        /*
 932         * If the hash is 1, then continue only if the next page has a
 933         * continuation hash of any value.  This is used for readdir
 934         * handling.  Otherwise, check to see if the hash matches the
 935         * desired contiuation hash.  If it doesn't, return since
 936         * there's no point to read in the successive index pages.
 937         */
 938        bhash = dx_get_hash(p->at);
 939        if (start_hash)
 940                *start_hash = bhash;
 941        if ((hash & 1) == 0) {
 942                if ((bhash & ~1) != hash)
 943                        return 0;
 944        }
 945        /*
 946         * If the hash is HASH_NB_ALWAYS, we always go to the next
 947         * block so no check is necessary
 948         */
 949        while (num_frames--) {
 950                bh = ext4_read_dirblock(dir, dx_get_block(p->at), INDEX);
 951                if (IS_ERR(bh))
 952                        return PTR_ERR(bh);
 953                p++;
 954                brelse(p->bh);
 955                p->bh = bh;
 956                p->at = p->entries = ((struct dx_node *) bh->b_data)->entries;
 957        }
 958        return 1;
 959}
 960
 961
 962/*
 963 * This function fills a red-black tree with information from a
 964 * directory block.  It returns the number directory entries loaded
 965 * into the tree.  If there is an error it is returned in err.
 966 */
 967static int htree_dirblock_to_tree(struct file *dir_file,
 968                                  struct inode *dir, ext4_lblk_t block,
 969                                  struct dx_hash_info *hinfo,
 970                                  __u32 start_hash, __u32 start_minor_hash)
 971{
 972        struct buffer_head *bh;
 973        struct ext4_dir_entry_2 *de, *top;
 974        int err = 0, count = 0;
 975        struct fscrypt_str fname_crypto_str = FSTR_INIT(NULL, 0), tmp_str;
 976
 977        dxtrace(printk(KERN_INFO "In htree dirblock_to_tree: block %lu\n",
 978                                                        (unsigned long)block));
 979        bh = ext4_read_dirblock(dir, block, DIRENT);
 980        if (IS_ERR(bh))
 981                return PTR_ERR(bh);
 982
 983        de = (struct ext4_dir_entry_2 *) bh->b_data;
 984        top = (struct ext4_dir_entry_2 *) ((char *) de +
 985                                           dir->i_sb->s_blocksize -
 986                                           EXT4_DIR_REC_LEN(0));
 987#ifdef CONFIG_EXT4_FS_ENCRYPTION
 988        /* Check if the directory is encrypted */
 989        if (ext4_encrypted_inode(dir)) {
 990                err = fscrypt_get_encryption_info(dir);
 991                if (err < 0) {
 992                        brelse(bh);
 993                        return err;
 994                }
 995                err = fscrypt_fname_alloc_buffer(dir, EXT4_NAME_LEN,
 996                                                     &fname_crypto_str);
 997                if (err < 0) {
 998                        brelse(bh);
 999                        return err;
1000                }
1001        }
1002#endif
1003        for (; de < top; de = ext4_next_entry(de, dir->i_sb->s_blocksize)) {
1004                if (ext4_check_dir_entry(dir, NULL, de, bh,
1005                                bh->b_data, bh->b_size,
1006                                (block<<EXT4_BLOCK_SIZE_BITS(dir->i_sb))
1007                                         + ((char *)de - bh->b_data))) {
1008                        /* silently ignore the rest of the block */
1009                        break;
1010                }
1011                ext4fs_dirhash(de->name, de->name_len, hinfo);
1012                if ((hinfo->hash < start_hash) ||
1013                    ((hinfo->hash == start_hash) &&
1014                     (hinfo->minor_hash < start_minor_hash)))
1015                        continue;
1016                if (de->inode == 0)
1017                        continue;
1018                if (!ext4_encrypted_inode(dir)) {
1019                        tmp_str.name = de->name;
1020                        tmp_str.len = de->name_len;
1021                        err = ext4_htree_store_dirent(dir_file,
1022                                   hinfo->hash, hinfo->minor_hash, de,
1023                                   &tmp_str);
1024                } else {
1025                        int save_len = fname_crypto_str.len;
1026                        struct fscrypt_str de_name = FSTR_INIT(de->name,
1027                                                                de->name_len);
1028
1029                        /* Directory is encrypted */
1030                        err = fscrypt_fname_disk_to_usr(dir, hinfo->hash,
1031                                        hinfo->minor_hash, &de_name,
1032                                        &fname_crypto_str);
1033                        if (err) {
1034                                count = err;
1035                                goto errout;
1036                        }
1037                        err = ext4_htree_store_dirent(dir_file,
1038                                   hinfo->hash, hinfo->minor_hash, de,
1039                                        &fname_crypto_str);
1040                        fname_crypto_str.len = save_len;
1041                }
1042                if (err != 0) {
1043                        count = err;
1044                        goto errout;
1045                }
1046                count++;
1047        }
1048errout:
1049        brelse(bh);
1050#ifdef CONFIG_EXT4_FS_ENCRYPTION
1051        fscrypt_fname_free_buffer(&fname_crypto_str);
1052#endif
1053        return count;
1054}
1055
1056
1057/*
1058 * This function fills a red-black tree with information from a
1059 * directory.  We start scanning the directory in hash order, starting
1060 * at start_hash and start_minor_hash.
1061 *
1062 * This function returns the number of entries inserted into the tree,
1063 * or a negative error code.
1064 */
1065int ext4_htree_fill_tree(struct file *dir_file, __u32 start_hash,
1066                         __u32 start_minor_hash, __u32 *next_hash)
1067{
1068        struct dx_hash_info hinfo;
1069        struct ext4_dir_entry_2 *de;
1070        struct dx_frame frames[EXT4_HTREE_LEVEL], *frame;
1071        struct inode *dir;
1072        ext4_lblk_t block;
1073        int count = 0;
1074        int ret, err;
1075        __u32 hashval;
1076        struct fscrypt_str tmp_str;
1077
1078        dxtrace(printk(KERN_DEBUG "In htree_fill_tree, start hash: %x:%x\n",
1079                       start_hash, start_minor_hash));
1080        dir = file_inode(dir_file);
1081        if (!(ext4_test_inode_flag(dir, EXT4_INODE_INDEX))) {
1082                hinfo.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version;
1083                if (hinfo.hash_version <= DX_HASH_TEA)
1084                        hinfo.hash_version +=
1085                                EXT4_SB(dir->i_sb)->s_hash_unsigned;
1086                hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed;
1087                if (ext4_has_inline_data(dir)) {
1088                        int has_inline_data = 1;
1089                        count = htree_inlinedir_to_tree(dir_file, dir, 0,
1090                                                        &hinfo, start_hash,
1091                                                        start_minor_hash,
1092                                                        &has_inline_data);
1093                        if (has_inline_data) {
1094                                *next_hash = ~0;
1095                                return count;
1096                        }
1097                }
1098                count = htree_dirblock_to_tree(dir_file, dir, 0, &hinfo,
1099                                               start_hash, start_minor_hash);
1100                *next_hash = ~0;
1101                return count;
1102        }
1103        hinfo.hash = start_hash;
1104        hinfo.minor_hash = 0;
1105        frame = dx_probe(NULL, dir, &hinfo, frames);
1106        if (IS_ERR(frame))
1107                return PTR_ERR(frame);
1108
1109        /* Add '.' and '..' from the htree header */
1110        if (!start_hash && !start_minor_hash) {
1111                de = (struct ext4_dir_entry_2 *) frames[0].bh->b_data;
1112                tmp_str.name = de->name;
1113                tmp_str.len = de->name_len;
1114                err = ext4_htree_store_dirent(dir_file, 0, 0,
1115                                              de, &tmp_str);
1116                if (err != 0)
1117                        goto errout;
1118                count++;
1119        }
1120        if (start_hash < 2 || (start_hash ==2 && start_minor_hash==0)) {
1121                de = (struct ext4_dir_entry_2 *) frames[0].bh->b_data;
1122                de = ext4_next_entry(de, dir->i_sb->s_blocksize);
1123                tmp_str.name = de->name;
1124                tmp_str.len = de->name_len;
1125                err = ext4_htree_store_dirent(dir_file, 2, 0,
1126                                              de, &tmp_str);
1127                if (err != 0)
1128                        goto errout;
1129                count++;
1130        }
1131
1132        while (1) {
1133                if (fatal_signal_pending(current)) {
1134                        err = -ERESTARTSYS;
1135                        goto errout;
1136                }
1137                cond_resched();
1138                block = dx_get_block(frame->at);
1139                ret = htree_dirblock_to_tree(dir_file, dir, block, &hinfo,
1140                                             start_hash, start_minor_hash);
1141                if (ret < 0) {
1142                        err = ret;
1143                        goto errout;
1144                }
1145                count += ret;
1146                hashval = ~0;
1147                ret = ext4_htree_next_block(dir, HASH_NB_ALWAYS,
1148                                            frame, frames, &hashval);
1149                *next_hash = hashval;
1150                if (ret < 0) {
1151                        err = ret;
1152                        goto errout;
1153                }
1154                /*
1155                 * Stop if:  (a) there are no more entries, or
1156                 * (b) we have inserted at least one entry and the
1157                 * next hash value is not a continuation
1158                 */
1159                if ((ret == 0) ||
1160                    (count && ((hashval & 1) == 0)))
1161                        break;
1162        }
1163        dx_release(frames);
1164        dxtrace(printk(KERN_DEBUG "Fill tree: returned %d entries, "
1165                       "next hash: %x\n", count, *next_hash));
1166        return count;
1167errout:
1168        dx_release(frames);
1169        return (err);
1170}
1171
1172static inline int search_dirblock(struct buffer_head *bh,
1173                                  struct inode *dir,
1174                                  struct ext4_filename *fname,
1175                                  unsigned int offset,
1176                                  struct ext4_dir_entry_2 **res_dir)
1177{
1178        return ext4_search_dir(bh, bh->b_data, dir->i_sb->s_blocksize, dir,
1179                               fname, offset, res_dir);
1180}
1181
1182/*
1183 * Directory block splitting, compacting
1184 */
1185
1186/*
1187 * Create map of hash values, offsets, and sizes, stored at end of block.
1188 * Returns number of entries mapped.
1189 */
1190static int dx_make_map(struct inode *dir, struct ext4_dir_entry_2 *de,
1191                       unsigned blocksize, struct dx_hash_info *hinfo,
1192                       struct dx_map_entry *map_tail)
1193{
1194        int count = 0;
1195        char *base = (char *) de;
1196        struct dx_hash_info h = *hinfo;
1197
1198        while ((char *) de < base + blocksize) {
1199                if (de->name_len && de->inode) {
1200                        ext4fs_dirhash(de->name, de->name_len, &h);
1201                        map_tail--;
1202                        map_tail->hash = h.hash;
1203                        map_tail->offs = ((char *) de - base)>>2;
1204                        map_tail->size = le16_to_cpu(de->rec_len);
1205                        count++;
1206                        cond_resched();
1207                }
1208                /* XXX: do we need to check rec_len == 0 case? -Chris */
1209                de = ext4_next_entry(de, blocksize);
1210        }
1211        return count;
1212}
1213
1214/* Sort map by hash value */
1215static void dx_sort_map (struct dx_map_entry *map, unsigned count)
1216{
1217        struct dx_map_entry *p, *q, *top = map + count - 1;
1218        int more;
1219        /* Combsort until bubble sort doesn't suck */
1220        while (count > 2) {
1221                count = count*10/13;
1222                if (count - 9 < 2) /* 9, 10 -> 11 */
1223                        count = 11;
1224                for (p = top, q = p - count; q >= map; p--, q--)
1225                        if (p->hash < q->hash)
1226                                swap(*p, *q);
1227        }
1228        /* Garden variety bubble sort */
1229        do {
1230                more = 0;
1231                q = top;
1232                while (q-- > map) {
1233                        if (q[1].hash >= q[0].hash)
1234                                continue;
1235                        swap(*(q+1), *q);
1236                        more = 1;
1237                }
1238        } while(more);
1239}
1240
1241static void dx_insert_block(struct dx_frame *frame, u32 hash, ext4_lblk_t block)
1242{
1243        struct dx_entry *entries = frame->entries;
1244        struct dx_entry *old = frame->at, *new = old + 1;
1245        int count = dx_get_count(entries);
1246
1247        assert(count < dx_get_limit(entries));
1248        assert(old < entries + count);
1249        memmove(new + 1, new, (char *)(entries + count) - (char *)(new));
1250        dx_set_hash(new, hash);
1251        dx_set_block(new, block);
1252        dx_set_count(entries, count + 1);
1253}
1254
1255/*
1256 * Test whether a directory entry matches the filename being searched for.
1257 *
1258 * Return: %true if the directory entry matches, otherwise %false.
1259 */
1260static inline bool ext4_match(const struct ext4_filename *fname,
1261                              const struct ext4_dir_entry_2 *de)
1262{
1263        struct fscrypt_name f;
1264
1265        if (!de->inode)
1266                return false;
1267
1268        f.usr_fname = fname->usr_fname;
1269        f.disk_name = fname->disk_name;
1270#ifdef CONFIG_EXT4_FS_ENCRYPTION
1271        f.crypto_buf = fname->crypto_buf;
1272#endif
1273        return fscrypt_match_name(&f, de->name, de->name_len);
1274}
1275
1276/*
1277 * Returns 0 if not found, -1 on failure, and 1 on success
1278 */
1279int ext4_search_dir(struct buffer_head *bh, char *search_buf, int buf_size,
1280                    struct inode *dir, struct ext4_filename *fname,
1281                    unsigned int offset, struct ext4_dir_entry_2 **res_dir)
1282{
1283        struct ext4_dir_entry_2 * de;
1284        char * dlimit;
1285        int de_len;
1286
1287        de = (struct ext4_dir_entry_2 *)search_buf;
1288        dlimit = search_buf + buf_size;
1289        while ((char *) de < dlimit) {
1290                /* this code is executed quadratically often */
1291                /* do minimal checking `by hand' */
1292                if ((char *) de + de->name_len <= dlimit &&
1293                    ext4_match(fname, de)) {
1294                        /* found a match - just to be sure, do
1295                         * a full check */
1296                        if (ext4_check_dir_entry(dir, NULL, de, bh, bh->b_data,
1297                                                 bh->b_size, offset))
1298                                return -1;
1299                        *res_dir = de;
1300                        return 1;
1301                }
1302                /* prevent looping on a bad block */
1303                de_len = ext4_rec_len_from_disk(de->rec_len,
1304                                                dir->i_sb->s_blocksize);
1305                if (de_len <= 0)
1306                        return -1;
1307                offset += de_len;
1308                de = (struct ext4_dir_entry_2 *) ((char *) de + de_len);
1309        }
1310        return 0;
1311}
1312
1313static int is_dx_internal_node(struct inode *dir, ext4_lblk_t block,
1314                               struct ext4_dir_entry *de)
1315{
1316        struct super_block *sb = dir->i_sb;
1317
1318        if (!is_dx(dir))
1319                return 0;
1320        if (block == 0)
1321                return 1;
1322        if (de->inode == 0 &&
1323            ext4_rec_len_from_disk(de->rec_len, sb->s_blocksize) ==
1324                        sb->s_blocksize)
1325                return 1;
1326        return 0;
1327}
1328
1329/*
1330 *      ext4_find_entry()
1331 *
1332 * finds an entry in the specified directory with the wanted name. It
1333 * returns the cache buffer in which the entry was found, and the entry
1334 * itself (as a parameter - res_dir). It does NOT read the inode of the
1335 * entry - you'll have to do that yourself if you want to.
1336 *
1337 * The returned buffer_head has ->b_count elevated.  The caller is expected
1338 * to brelse() it when appropriate.
1339 */
1340static struct buffer_head * ext4_find_entry (struct inode *dir,
1341                                        const struct qstr *d_name,
1342                                        struct ext4_dir_entry_2 **res_dir,
1343                                        int *inlined)
1344{
1345        struct super_block *sb;
1346        struct buffer_head *bh_use[NAMEI_RA_SIZE];
1347        struct buffer_head *bh, *ret = NULL;
1348        ext4_lblk_t start, block;
1349        const u8 *name = d_name->name;
1350        size_t ra_max = 0;      /* Number of bh's in the readahead
1351                                   buffer, bh_use[] */
1352        size_t ra_ptr = 0;      /* Current index into readahead
1353                                   buffer */
1354        ext4_lblk_t  nblocks;
1355        int i, namelen, retval;
1356        struct ext4_filename fname;
1357
1358        *res_dir = NULL;
1359        sb = dir->i_sb;
1360        namelen = d_name->len;
1361        if (namelen > EXT4_NAME_LEN)
1362                return NULL;
1363
1364        retval = ext4_fname_setup_filename(dir, d_name, 1, &fname);
1365        if (retval == -ENOENT)
1366                return NULL;
1367        if (retval)
1368                return ERR_PTR(retval);
1369
1370        if (ext4_has_inline_data(dir)) {
1371                int has_inline_data = 1;
1372                ret = ext4_find_inline_entry(dir, &fname, res_dir,
1373                                             &has_inline_data);
1374                if (has_inline_data) {
1375                        if (inlined)
1376                                *inlined = 1;
1377                        goto cleanup_and_exit;
1378                }
1379        }
1380
1381        if ((namelen <= 2) && (name[0] == '.') &&
1382            (name[1] == '.' || name[1] == '\0')) {
1383                /*
1384                 * "." or ".." will only be in the first block
1385                 * NFS may look up ".."; "." should be handled by the VFS
1386                 */
1387                block = start = 0;
1388                nblocks = 1;
1389                goto restart;
1390        }
1391        if (is_dx(dir)) {
1392                ret = ext4_dx_find_entry(dir, &fname, res_dir);
1393                /*
1394                 * On success, or if the error was file not found,
1395                 * return.  Otherwise, fall back to doing a search the
1396                 * old fashioned way.
1397                 */
1398                if (!IS_ERR(ret) || PTR_ERR(ret) != ERR_BAD_DX_DIR)
1399                        goto cleanup_and_exit;
1400                dxtrace(printk(KERN_DEBUG "ext4_find_entry: dx failed, "
1401                               "falling back\n"));
1402                ret = NULL;
1403        }
1404        nblocks = dir->i_size >> EXT4_BLOCK_SIZE_BITS(sb);
1405        if (!nblocks) {
1406                ret = NULL;
1407                goto cleanup_and_exit;
1408        }
1409        start = EXT4_I(dir)->i_dir_start_lookup;
1410        if (start >= nblocks)
1411                start = 0;
1412        block = start;
1413restart:
1414        do {
1415                /*
1416                 * We deal with the read-ahead logic here.
1417                 */
1418                if (ra_ptr >= ra_max) {
1419                        /* Refill the readahead buffer */
1420                        ra_ptr = 0;
1421                        if (block < start)
1422                                ra_max = start - block;
1423                        else
1424                                ra_max = nblocks - block;
1425                        ra_max = min(ra_max, ARRAY_SIZE(bh_use));
1426                        retval = ext4_bread_batch(dir, block, ra_max,
1427                                                  false /* wait */, bh_use);
1428                        if (retval) {
1429                                ret = ERR_PTR(retval);
1430                                ra_max = 0;
1431                                goto cleanup_and_exit;
1432                        }
1433                }
1434                if ((bh = bh_use[ra_ptr++]) == NULL)
1435                        goto next;
1436                wait_on_buffer(bh);
1437                if (!buffer_uptodate(bh)) {
1438                        EXT4_ERROR_INODE(dir, "reading directory lblock %lu",
1439                                         (unsigned long) block);
1440                        brelse(bh);
1441                        ret = ERR_PTR(-EIO);
1442                        goto cleanup_and_exit;
1443                }
1444                if (!buffer_verified(bh) &&
1445                    !is_dx_internal_node(dir, block,
1446                                         (struct ext4_dir_entry *)bh->b_data) &&
1447                    !ext4_dirent_csum_verify(dir,
1448                                (struct ext4_dir_entry *)bh->b_data)) {
1449                        EXT4_ERROR_INODE(dir, "checksumming directory "
1450                                         "block %lu", (unsigned long)block);
1451                        brelse(bh);
1452                        ret = ERR_PTR(-EFSBADCRC);
1453                        goto cleanup_and_exit;
1454                }
1455                set_buffer_verified(bh);
1456                i = search_dirblock(bh, dir, &fname,
1457                            block << EXT4_BLOCK_SIZE_BITS(sb), res_dir);
1458                if (i == 1) {
1459                        EXT4_I(dir)->i_dir_start_lookup = block;
1460                        ret = bh;
1461                        goto cleanup_and_exit;
1462                } else {
1463                        brelse(bh);
1464                        if (i < 0)
1465                                goto cleanup_and_exit;
1466                }
1467        next:
1468                if (++block >= nblocks)
1469                        block = 0;
1470        } while (block != start);
1471
1472        /*
1473         * If the directory has grown while we were searching, then
1474         * search the last part of the directory before giving up.
1475         */
1476        block = nblocks;
1477        nblocks = dir->i_size >> EXT4_BLOCK_SIZE_BITS(sb);
1478        if (block < nblocks) {
1479                start = 0;
1480                goto restart;
1481        }
1482
1483cleanup_and_exit:
1484        /* Clean up the read-ahead blocks */
1485        for (; ra_ptr < ra_max; ra_ptr++)
1486                brelse(bh_use[ra_ptr]);
1487        ext4_fname_free_filename(&fname);
1488        return ret;
1489}
1490
1491static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
1492                        struct ext4_filename *fname,
1493                        struct ext4_dir_entry_2 **res_dir)
1494{
1495        struct super_block * sb = dir->i_sb;
1496        struct dx_frame frames[EXT4_HTREE_LEVEL], *frame;
1497        struct buffer_head *bh;
1498        ext4_lblk_t block;
1499        int retval;
1500
1501#ifdef CONFIG_EXT4_FS_ENCRYPTION
1502        *res_dir = NULL;
1503#endif
1504        frame = dx_probe(fname, dir, NULL, frames);
1505        if (IS_ERR(frame))
1506                return (struct buffer_head *) frame;
1507        do {
1508                block = dx_get_block(frame->at);
1509                bh = ext4_read_dirblock(dir, block, DIRENT);
1510                if (IS_ERR(bh))
1511                        goto errout;
1512
1513                retval = search_dirblock(bh, dir, fname,
1514                                         block << EXT4_BLOCK_SIZE_BITS(sb),
1515                                         res_dir);
1516                if (retval == 1)
1517                        goto success;
1518                brelse(bh);
1519                if (retval == -1) {
1520                        bh = ERR_PTR(ERR_BAD_DX_DIR);
1521                        goto errout;
1522                }
1523
1524                /* Check to see if we should continue to search */
1525                retval = ext4_htree_next_block(dir, fname->hinfo.hash, frame,
1526                                               frames, NULL);
1527                if (retval < 0) {
1528                        ext4_warning_inode(dir,
1529                                "error %d reading directory index block",
1530                                retval);
1531                        bh = ERR_PTR(retval);
1532                        goto errout;
1533                }
1534        } while (retval == 1);
1535
1536        bh = NULL;
1537errout:
1538        dxtrace(printk(KERN_DEBUG "%s not found\n", fname->usr_fname->name));
1539success:
1540        dx_release(frames);
1541        return bh;
1542}
1543
1544static struct dentry *ext4_lookup(struct inode *dir, struct dentry *dentry, unsigned int flags)
1545{
1546        struct inode *inode;
1547        struct ext4_dir_entry_2 *de;
1548        struct buffer_head *bh;
1549        int err;
1550
1551        err = fscrypt_prepare_lookup(dir, dentry, flags);
1552        if (err)
1553                return ERR_PTR(err);
1554
1555        if (dentry->d_name.len > EXT4_NAME_LEN)
1556                return ERR_PTR(-ENAMETOOLONG);
1557
1558        bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL);
1559        if (IS_ERR(bh))
1560                return ERR_CAST(bh);
1561        inode = NULL;
1562        if (bh) {
1563                __u32 ino = le32_to_cpu(de->inode);
1564                brelse(bh);
1565                if (!ext4_valid_inum(dir->i_sb, ino)) {
1566                        EXT4_ERROR_INODE(dir, "bad inode number: %u", ino);
1567                        return ERR_PTR(-EFSCORRUPTED);
1568                }
1569                if (unlikely(ino == dir->i_ino)) {
1570                        EXT4_ERROR_INODE(dir, "'%pd' linked to parent dir",
1571                                         dentry);
1572                        return ERR_PTR(-EFSCORRUPTED);
1573                }
1574                inode = ext4_iget(dir->i_sb, ino, EXT4_IGET_NORMAL);
1575                if (inode == ERR_PTR(-ESTALE)) {
1576                        EXT4_ERROR_INODE(dir,
1577                                         "deleted inode referenced: %u",
1578                                         ino);
1579                        return ERR_PTR(-EFSCORRUPTED);
1580                }
1581                if (!IS_ERR(inode) && ext4_encrypted_inode(dir) &&
1582                    (S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode)) &&
1583                    !fscrypt_has_permitted_context(dir, inode)) {
1584                        ext4_warning(inode->i_sb,
1585                                     "Inconsistent encryption contexts: %lu/%lu",
1586                                     dir->i_ino, inode->i_ino);
1587                        iput(inode);
1588                        return ERR_PTR(-EPERM);
1589                }
1590        }
1591        return d_splice_alias(inode, dentry);
1592}
1593
1594
1595struct dentry *ext4_get_parent(struct dentry *child)
1596{
1597        __u32 ino;
1598        static const struct qstr dotdot = QSTR_INIT("..", 2);
1599        struct ext4_dir_entry_2 * de;
1600        struct buffer_head *bh;
1601
1602        bh = ext4_find_entry(d_inode(child), &dotdot, &de, NULL);
1603        if (IS_ERR(bh))
1604                return ERR_CAST(bh);
1605        if (!bh)
1606                return ERR_PTR(-ENOENT);
1607        ino = le32_to_cpu(de->inode);
1608        brelse(bh);
1609
1610        if (!ext4_valid_inum(child->d_sb, ino)) {
1611                EXT4_ERROR_INODE(d_inode(child),
1612                                 "bad parent inode number: %u", ino);
1613                return ERR_PTR(-EFSCORRUPTED);
1614        }
1615
1616        return d_obtain_alias(ext4_iget(child->d_sb, ino, EXT4_IGET_NORMAL));
1617}
1618
1619/*
1620 * Move count entries from end of map between two memory locations.
1621 * Returns pointer to last entry moved.
1622 */
1623static struct ext4_dir_entry_2 *
1624dx_move_dirents(char *from, char *to, struct dx_map_entry *map, int count,
1625                unsigned blocksize)
1626{
1627        unsigned rec_len = 0;
1628
1629        while (count--) {
1630                struct ext4_dir_entry_2 *de = (struct ext4_dir_entry_2 *)
1631                                                (from + (map->offs<<2));
1632                rec_len = EXT4_DIR_REC_LEN(de->name_len);
1633                memcpy (to, de, rec_len);
1634                ((struct ext4_dir_entry_2 *) to)->rec_len =
1635                                ext4_rec_len_to_disk(rec_len, blocksize);
1636                de->inode = 0;
1637                map++;
1638                to += rec_len;
1639        }
1640        return (struct ext4_dir_entry_2 *) (to - rec_len);
1641}
1642
1643/*
1644 * Compact each dir entry in the range to the minimal rec_len.
1645 * Returns pointer to last entry in range.
1646 */
1647static struct ext4_dir_entry_2* dx_pack_dirents(char *base, unsigned blocksize)
1648{
1649        struct ext4_dir_entry_2 *next, *to, *prev, *de = (struct ext4_dir_entry_2 *) base;
1650        unsigned rec_len = 0;
1651
1652        prev = to = de;
1653        while ((char*)de < base + blocksize) {
1654                next = ext4_next_entry(de, blocksize);
1655                if (de->inode && de->name_len) {
1656                        rec_len = EXT4_DIR_REC_LEN(de->name_len);
1657                        if (de > to)
1658                                memmove(to, de, rec_len);
1659                        to->rec_len = ext4_rec_len_to_disk(rec_len, blocksize);
1660                        prev = to;
1661                        to = (struct ext4_dir_entry_2 *) (((char *) to) + rec_len);
1662                }
1663                de = next;
1664        }
1665        return prev;
1666}
1667
1668/*
1669 * Split a full leaf block to make room for a new dir entry.
1670 * Allocate a new block, and move entries so that they are approx. equally full.
1671 * Returns pointer to de in block into which the new entry will be inserted.
1672 */
1673static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
1674                        struct buffer_head **bh,struct dx_frame *frame,
1675                        struct dx_hash_info *hinfo)
1676{
1677        unsigned blocksize = dir->i_sb->s_blocksize;
1678        unsigned count, continued;
1679        struct buffer_head *bh2;
1680        ext4_lblk_t newblock;
1681        u32 hash2;
1682        struct dx_map_entry *map;
1683        char *data1 = (*bh)->b_data, *data2;
1684        unsigned split, move, size;
1685        struct ext4_dir_entry_2 *de = NULL, *de2;
1686        struct ext4_dir_entry_tail *t;
1687        int     csum_size = 0;
1688        int     err = 0, i;
1689
1690        if (ext4_has_metadata_csum(dir->i_sb))
1691                csum_size = sizeof(struct ext4_dir_entry_tail);
1692
1693        bh2 = ext4_append(handle, dir, &newblock);
1694        if (IS_ERR(bh2)) {
1695                brelse(*bh);
1696                *bh = NULL;
1697                return (struct ext4_dir_entry_2 *) bh2;
1698        }
1699
1700        BUFFER_TRACE(*bh, "get_write_access");
1701        err = ext4_journal_get_write_access(handle, *bh);
1702        if (err)
1703                goto journal_error;
1704
1705        BUFFER_TRACE(frame->bh, "get_write_access");
1706        err = ext4_journal_get_write_access(handle, frame->bh);
1707        if (err)
1708                goto journal_error;
1709
1710        data2 = bh2->b_data;
1711
1712        /* create map in the end of data2 block */
1713        map = (struct dx_map_entry *) (data2 + blocksize);
1714        count = dx_make_map(dir, (struct ext4_dir_entry_2 *) data1,
1715                             blocksize, hinfo, map);
1716        map -= count;
1717        dx_sort_map(map, count);
1718        /* Split the existing block in the middle, size-wise */
1719        size = 0;
1720        move = 0;
1721        for (i = count-1; i >= 0; i--) {
1722                /* is more than half of this entry in 2nd half of the block? */
1723                if (size + map[i].size/2 > blocksize/2)
1724                        break;
1725                size += map[i].size;
1726                move++;
1727        }
1728        /* map index at which we will split */
1729        split = count - move;
1730        hash2 = map[split].hash;
1731        continued = hash2 == map[split - 1].hash;
1732        dxtrace(printk(KERN_INFO "Split block %lu at %x, %i/%i\n",
1733                        (unsigned long)dx_get_block(frame->at),
1734                                        hash2, split, count-split));
1735
1736        /* Fancy dance to stay within two buffers */
1737        de2 = dx_move_dirents(data1, data2, map + split, count - split,
1738                              blocksize);
1739        de = dx_pack_dirents(data1, blocksize);
1740        de->rec_len = ext4_rec_len_to_disk(data1 + (blocksize - csum_size) -
1741                                           (char *) de,
1742                                           blocksize);
1743        de2->rec_len = ext4_rec_len_to_disk(data2 + (blocksize - csum_size) -
1744                                            (char *) de2,
1745                                            blocksize);
1746        if (csum_size) {
1747                t = EXT4_DIRENT_TAIL(data2, blocksize);
1748                initialize_dirent_tail(t, blocksize);
1749
1750                t = EXT4_DIRENT_TAIL(data1, blocksize);
1751                initialize_dirent_tail(t, blocksize);
1752        }
1753
1754        dxtrace(dx_show_leaf(dir, hinfo, (struct ext4_dir_entry_2 *) data1,
1755                        blocksize, 1));
1756        dxtrace(dx_show_leaf(dir, hinfo, (struct ext4_dir_entry_2 *) data2,
1757                        blocksize, 1));
1758
1759        /* Which block gets the new entry? */
1760        if (hinfo->hash >= hash2) {
1761                swap(*bh, bh2);
1762                de = de2;
1763        }
1764        dx_insert_block(frame, hash2 + continued, newblock);
1765        err = ext4_handle_dirty_dirent_node(handle, dir, bh2);
1766        if (err)
1767                goto journal_error;
1768        err = ext4_handle_dirty_dx_node(handle, dir, frame->bh);
1769        if (err)
1770                goto journal_error;
1771        brelse(bh2);
1772        dxtrace(dx_show_index("frame", frame->entries));
1773        return de;
1774
1775journal_error:
1776        brelse(*bh);
1777        brelse(bh2);
1778        *bh = NULL;
1779        ext4_std_error(dir->i_sb, err);
1780        return ERR_PTR(err);
1781}
1782
1783int ext4_find_dest_de(struct inode *dir, struct inode *inode,
1784                      struct buffer_head *bh,
1785                      void *buf, int buf_size,
1786                      struct ext4_filename *fname,
1787                      struct ext4_dir_entry_2 **dest_de)
1788{
1789        struct ext4_dir_entry_2 *de;
1790        unsigned short reclen = EXT4_DIR_REC_LEN(fname_len(fname));
1791        int nlen, rlen;
1792        unsigned int offset = 0;
1793        char *top;
1794
1795        de = (struct ext4_dir_entry_2 *)buf;
1796        top = buf + buf_size - reclen;
1797        while ((char *) de <= top) {
1798                if (ext4_check_dir_entry(dir, NULL, de, bh,
1799                                         buf, buf_size, offset))
1800                        return -EFSCORRUPTED;
1801                if (ext4_match(fname, de))
1802                        return -EEXIST;
1803                nlen = EXT4_DIR_REC_LEN(de->name_len);
1804                rlen = ext4_rec_len_from_disk(de->rec_len, buf_size);
1805                if ((de->inode ? rlen - nlen : rlen) >= reclen)
1806                        break;
1807                de = (struct ext4_dir_entry_2 *)((char *)de + rlen);
1808                offset += rlen;
1809        }
1810        if ((char *) de > top)
1811                return -ENOSPC;
1812
1813        *dest_de = de;
1814        return 0;
1815}
1816
1817void ext4_insert_dentry(struct inode *inode,
1818                        struct ext4_dir_entry_2 *de,
1819                        int buf_size,
1820                        struct ext4_filename *fname)
1821{
1822
1823        int nlen, rlen;
1824
1825        nlen = EXT4_DIR_REC_LEN(de->name_len);
1826        rlen = ext4_rec_len_from_disk(de->rec_len, buf_size);
1827        if (de->inode) {
1828                struct ext4_dir_entry_2 *de1 =
1829                        (struct ext4_dir_entry_2 *)((char *)de + nlen);
1830                de1->rec_len = ext4_rec_len_to_disk(rlen - nlen, buf_size);
1831                de->rec_len = ext4_rec_len_to_disk(nlen, buf_size);
1832                de = de1;
1833        }
1834        de->file_type = EXT4_FT_UNKNOWN;
1835        de->inode = cpu_to_le32(inode->i_ino);
1836        ext4_set_de_type(inode->i_sb, de, inode->i_mode);
1837        de->name_len = fname_len(fname);
1838        memcpy(de->name, fname_name(fname), fname_len(fname));
1839}
1840
1841/*
1842 * Add a new entry into a directory (leaf) block.  If de is non-NULL,
1843 * it points to a directory entry which is guaranteed to be large
1844 * enough for new directory entry.  If de is NULL, then
1845 * add_dirent_to_buf will attempt search the directory block for
1846 * space.  It will return -ENOSPC if no space is available, and -EIO
1847 * and -EEXIST if directory entry already exists.
1848 */
1849static int add_dirent_to_buf(handle_t *handle, struct ext4_filename *fname,
1850                             struct inode *dir,
1851                             struct inode *inode, struct ext4_dir_entry_2 *de,
1852                             struct buffer_head *bh)
1853{
1854        unsigned int    blocksize = dir->i_sb->s_blocksize;
1855        int             csum_size = 0;
1856        int             err;
1857
1858        if (ext4_has_metadata_csum(inode->i_sb))
1859                csum_size = sizeof(struct ext4_dir_entry_tail);
1860
1861        if (!de) {
1862                err = ext4_find_dest_de(dir, inode, bh, bh->b_data,
1863                                        blocksize - csum_size, fname, &de);
1864                if (err)
1865                        return err;
1866        }
1867        BUFFER_TRACE(bh, "get_write_access");
1868        err = ext4_journal_get_write_access(handle, bh);
1869        if (err) {
1870                ext4_std_error(dir->i_sb, err);
1871                return err;
1872        }
1873
1874        /* By now the buffer is marked for journaling */
1875        ext4_insert_dentry(inode, de, blocksize, fname);
1876
1877        /*
1878         * XXX shouldn't update any times until successful
1879         * completion of syscall, but too many callers depend
1880         * on this.
1881         *
1882         * XXX similarly, too many callers depend on
1883         * ext4_new_inode() setting the times, but error
1884         * recovery deletes the inode, so the worst that can
1885         * happen is that the times are slightly out of date
1886         * and/or different from the directory change time.
1887         */
1888        dir->i_mtime = dir->i_ctime = current_time(dir);
1889        ext4_update_dx_flag(dir);
1890        inode_inc_iversion(dir);
1891        ext4_mark_inode_dirty(handle, dir);
1892        BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata");
1893        err = ext4_handle_dirty_dirent_node(handle, dir, bh);
1894        if (err)
1895                ext4_std_error(dir->i_sb, err);
1896        return 0;
1897}
1898
1899/*
1900 * This converts a one block unindexed directory to a 3 block indexed
1901 * directory, and adds the dentry to the indexed directory.
1902 */
1903static int make_indexed_dir(handle_t *handle, struct ext4_filename *fname,
1904                            struct inode *dir,
1905                            struct inode *inode, struct buffer_head *bh)
1906{
1907        struct buffer_head *bh2;
1908        struct dx_root  *root;
1909        struct dx_frame frames[EXT4_HTREE_LEVEL], *frame;
1910        struct dx_entry *entries;
1911        struct ext4_dir_entry_2 *de, *de2;
1912        struct ext4_dir_entry_tail *t;
1913        char            *data1, *top;
1914        unsigned        len;
1915        int             retval;
1916        unsigned        blocksize;
1917        ext4_lblk_t  block;
1918        struct fake_dirent *fde;
1919        int csum_size = 0;
1920
1921        if (ext4_has_metadata_csum(inode->i_sb))
1922                csum_size = sizeof(struct ext4_dir_entry_tail);
1923
1924        blocksize =  dir->i_sb->s_blocksize;
1925        dxtrace(printk(KERN_DEBUG "Creating index: inode %lu\n", dir->i_ino));
1926        BUFFER_TRACE(bh, "get_write_access");
1927        retval = ext4_journal_get_write_access(handle, bh);
1928        if (retval) {
1929                ext4_std_error(dir->i_sb, retval);
1930                brelse(bh);
1931                return retval;
1932        }
1933        root = (struct dx_root *) bh->b_data;
1934
1935        /* The 0th block becomes the root, move the dirents out */
1936        fde = &root->dotdot;
1937        de = (struct ext4_dir_entry_2 *)((char *)fde +
1938                ext4_rec_len_from_disk(fde->rec_len, blocksize));
1939        if ((char *) de >= (((char *) root) + blocksize)) {
1940                EXT4_ERROR_INODE(dir, "invalid rec_len for '..'");
1941                brelse(bh);
1942                return -EFSCORRUPTED;
1943        }
1944        len = ((char *) root) + (blocksize - csum_size) - (char *) de;
1945
1946        /* Allocate new block for the 0th block's dirents */
1947        bh2 = ext4_append(handle, dir, &block);
1948        if (IS_ERR(bh2)) {
1949                brelse(bh);
1950                return PTR_ERR(bh2);
1951        }
1952        ext4_set_inode_flag(dir, EXT4_INODE_INDEX);
1953        data1 = bh2->b_data;
1954
1955        memcpy (data1, de, len);
1956        de = (struct ext4_dir_entry_2 *) data1;
1957        top = data1 + len;
1958        while ((char *)(de2 = ext4_next_entry(de, blocksize)) < top)
1959                de = de2;
1960        de->rec_len = ext4_rec_len_to_disk(data1 + (blocksize - csum_size) -
1961                                           (char *) de,
1962                                           blocksize);
1963
1964        if (csum_size) {
1965                t = EXT4_DIRENT_TAIL(data1, blocksize);
1966                initialize_dirent_tail(t, blocksize);
1967        }
1968
1969        /* Initialize the root; the dot dirents already exist */
1970        de = (struct ext4_dir_entry_2 *) (&root->dotdot);
1971        de->rec_len = ext4_rec_len_to_disk(blocksize - EXT4_DIR_REC_LEN(2),
1972                                           blocksize);
1973        memset (&root->info, 0, sizeof(root->info));
1974        root->info.info_length = sizeof(root->info);
1975        root->info.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version;
1976        entries = root->entries;
1977        dx_set_block(entries, 1);
1978        dx_set_count(entries, 1);
1979        dx_set_limit(entries, dx_root_limit(dir, sizeof(root->info)));
1980
1981        /* Initialize as for dx_probe */
1982        fname->hinfo.hash_version = root->info.hash_version;
1983        if (fname->hinfo.hash_version <= DX_HASH_TEA)
1984                fname->hinfo.hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned;
1985        fname->hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed;
1986        ext4fs_dirhash(fname_name(fname), fname_len(fname), &fname->hinfo);
1987
1988        memset(frames, 0, sizeof(frames));
1989        frame = frames;
1990        frame->entries = entries;
1991        frame->at = entries;
1992        frame->bh = bh;
1993
1994        retval = ext4_handle_dirty_dx_node(handle, dir, frame->bh);
1995        if (retval)
1996                goto out_frames;        
1997        retval = ext4_handle_dirty_dirent_node(handle, dir, bh2);
1998        if (retval)
1999                goto out_frames;        
2000
2001        de = do_split(handle,dir, &bh2, frame, &fname->hinfo);
2002        if (IS_ERR(de)) {
2003                retval = PTR_ERR(de);
2004                goto out_frames;
2005        }
2006
2007        retval = add_dirent_to_buf(handle, fname, dir, inode, de, bh2);
2008out_frames:
2009        /*
2010         * Even if the block split failed, we have to properly write
2011         * out all the changes we did so far. Otherwise we can end up
2012         * with corrupted filesystem.
2013         */
2014        if (retval)
2015                ext4_mark_inode_dirty(handle, dir);
2016        dx_release(frames);
2017        brelse(bh2);
2018        return retval;
2019}
2020
2021/*
2022 *      ext4_add_entry()
2023 *
2024 * adds a file entry to the specified directory, using the same
2025 * semantics as ext4_find_entry(). It returns NULL if it failed.
2026 *
2027 * NOTE!! The inode part of 'de' is left at 0 - which means you
2028 * may not sleep between calling this and putting something into
2029 * the entry, as someone else might have used it while you slept.
2030 */
2031static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
2032                          struct inode *inode)
2033{
2034        struct inode *dir = d_inode(dentry->d_parent);
2035        struct buffer_head *bh = NULL;
2036        struct ext4_dir_entry_2 *de;
2037        struct ext4_dir_entry_tail *t;
2038        struct super_block *sb;
2039        struct ext4_filename fname;
2040        int     retval;
2041        int     dx_fallback=0;
2042        unsigned blocksize;
2043        ext4_lblk_t block, blocks;
2044        int     csum_size = 0;
2045
2046        if (ext4_has_metadata_csum(inode->i_sb))
2047                csum_size = sizeof(struct ext4_dir_entry_tail);
2048
2049        sb = dir->i_sb;
2050        blocksize = sb->s_blocksize;
2051        if (!dentry->d_name.len)
2052                return -EINVAL;
2053
2054        retval = ext4_fname_setup_filename(dir, &dentry->d_name, 0, &fname);
2055        if (retval)
2056                return retval;
2057
2058        if (ext4_has_inline_data(dir)) {
2059                retval = ext4_try_add_inline_entry(handle, &fname, dir, inode);
2060                if (retval < 0)
2061                        goto out;
2062                if (retval == 1) {
2063                        retval = 0;
2064                        goto out;
2065                }
2066        }
2067
2068        if (is_dx(dir)) {
2069                retval = ext4_dx_add_entry(handle, &fname, dir, inode);
2070                if (!retval || (retval != ERR_BAD_DX_DIR))
2071                        goto out;
2072                ext4_clear_inode_flag(dir, EXT4_INODE_INDEX);
2073                dx_fallback++;
2074                ext4_mark_inode_dirty(handle, dir);
2075        }
2076        blocks = dir->i_size >> sb->s_blocksize_bits;
2077        for (block = 0; block < blocks; block++) {
2078                bh = ext4_read_dirblock(dir, block, DIRENT);
2079                if (IS_ERR(bh)) {
2080                        retval = PTR_ERR(bh);
2081                        bh = NULL;
2082                        goto out;
2083                }
2084                retval = add_dirent_to_buf(handle, &fname, dir, inode,
2085                                           NULL, bh);
2086                if (retval != -ENOSPC)
2087                        goto out;
2088
2089                if (blocks == 1 && !dx_fallback &&
2090                    ext4_has_feature_dir_index(sb)) {
2091                        retval = make_indexed_dir(handle, &fname, dir,
2092                                                  inode, bh);
2093                        bh = NULL; /* make_indexed_dir releases bh */
2094                        goto out;
2095                }
2096                brelse(bh);
2097        }
2098        bh = ext4_append(handle, dir, &block);
2099        if (IS_ERR(bh)) {
2100                retval = PTR_ERR(bh);
2101                bh = NULL;
2102                goto out;
2103        }
2104        de = (struct ext4_dir_entry_2 *) bh->b_data;
2105        de->inode = 0;
2106        de->rec_len = ext4_rec_len_to_disk(blocksize - csum_size, blocksize);
2107
2108        if (csum_size) {
2109                t = EXT4_DIRENT_TAIL(bh->b_data, blocksize);
2110                initialize_dirent_tail(t, blocksize);
2111        }
2112
2113        retval = add_dirent_to_buf(handle, &fname, dir, inode, de, bh);
2114out:
2115        ext4_fname_free_filename(&fname);
2116        brelse(bh);
2117        if (retval == 0)
2118                ext4_set_inode_state(inode, EXT4_STATE_NEWENTRY);
2119        return retval;
2120}
2121
2122/*
2123 * Returns 0 for success, or a negative error value
2124 */
2125static int ext4_dx_add_entry(handle_t *handle, struct ext4_filename *fname,
2126                             struct inode *dir, struct inode *inode)
2127{
2128        struct dx_frame frames[EXT4_HTREE_LEVEL], *frame;
2129        struct dx_entry *entries, *at;
2130        struct buffer_head *bh;
2131        struct super_block *sb = dir->i_sb;
2132        struct ext4_dir_entry_2 *de;
2133        int restart;
2134        int err;
2135
2136again:
2137        restart = 0;
2138        frame = dx_probe(fname, dir, NULL, frames);
2139        if (IS_ERR(frame))
2140                return PTR_ERR(frame);
2141        entries = frame->entries;
2142        at = frame->at;
2143        bh = ext4_read_dirblock(dir, dx_get_block(frame->at), DIRENT);
2144        if (IS_ERR(bh)) {
2145                err = PTR_ERR(bh);
2146                bh = NULL;
2147                goto cleanup;
2148        }
2149
2150        BUFFER_TRACE(bh, "get_write_access");
2151        err = ext4_journal_get_write_access(handle, bh);
2152        if (err)
2153                goto journal_error;
2154
2155        err = add_dirent_to_buf(handle, fname, dir, inode, NULL, bh);
2156        if (err != -ENOSPC)
2157                goto cleanup;
2158
2159        err = 0;
2160        /* Block full, should compress but for now just split */
2161        dxtrace(printk(KERN_DEBUG "using %u of %u node entries\n",
2162                       dx_get_count(entries), dx_get_limit(entries)));
2163        /* Need to split index? */
2164        if (dx_get_count(entries) == dx_get_limit(entries)) {
2165                ext4_lblk_t newblock;
2166                int levels = frame - frames + 1;
2167                unsigned int icount;
2168                int add_level = 1;
2169                struct dx_entry *entries2;
2170                struct dx_node *node2;
2171                struct buffer_head *bh2;
2172
2173                while (frame > frames) {
2174                        if (dx_get_count((frame - 1)->entries) <
2175                            dx_get_limit((frame - 1)->entries)) {
2176                                add_level = 0;
2177                                break;
2178                        }
2179                        frame--; /* split higher index block */
2180                        at = frame->at;
2181                        entries = frame->entries;
2182                        restart = 1;
2183                }
2184                if (add_level && levels == ext4_dir_htree_level(sb)) {
2185                        ext4_warning(sb, "Directory (ino: %lu) index full, "
2186                                         "reach max htree level :%d",
2187                                         dir->i_ino, levels);
2188                        if (ext4_dir_htree_level(sb) < EXT4_HTREE_LEVEL) {
2189                                ext4_warning(sb, "Large directory feature is "
2190                                                 "not enabled on this "
2191                                                 "filesystem");
2192                        }
2193                        err = -ENOSPC;
2194                        goto cleanup;
2195                }
2196                icount = dx_get_count(entries);
2197                bh2 = ext4_append(handle, dir, &newblock);
2198                if (IS_ERR(bh2)) {
2199                        err = PTR_ERR(bh2);
2200                        goto cleanup;
2201                }
2202                node2 = (struct dx_node *)(bh2->b_data);
2203                entries2 = node2->entries;
2204                memset(&node2->fake, 0, sizeof(struct fake_dirent));
2205                node2->fake.rec_len = ext4_rec_len_to_disk(sb->s_blocksize,
2206                                                           sb->s_blocksize);
2207                BUFFER_TRACE(frame->bh, "get_write_access");
2208                err = ext4_journal_get_write_access(handle, frame->bh);
2209                if (err)
2210                        goto journal_error;
2211                if (!add_level) {
2212                        unsigned icount1 = icount/2, icount2 = icount - icount1;
2213                        unsigned hash2 = dx_get_hash(entries + icount1);
2214                        dxtrace(printk(KERN_DEBUG "Split index %i/%i\n",
2215                                       icount1, icount2));
2216
2217                        BUFFER_TRACE(frame->bh, "get_write_access"); /* index root */
2218                        err = ext4_journal_get_write_access(handle,
2219                                                             (frame - 1)->bh);
2220                        if (err)
2221                                goto journal_error;
2222
2223                        memcpy((char *) entries2, (char *) (entries + icount1),
2224                               icount2 * sizeof(struct dx_entry));
2225                        dx_set_count(entries, icount1);
2226                        dx_set_count(entries2, icount2);
2227                        dx_set_limit(entries2, dx_node_limit(dir));
2228
2229                        /* Which index block gets the new entry? */
2230                        if (at - entries >= icount1) {
2231                                frame->at = at = at - entries - icount1 + entries2;
2232                                frame->entries = entries = entries2;
2233                                swap(frame->bh, bh2);
2234                        }
2235                        dx_insert_block((frame - 1), hash2, newblock);
2236                        dxtrace(dx_show_index("node", frame->entries));
2237                        dxtrace(dx_show_index("node",
2238                               ((struct dx_node *) bh2->b_data)->entries));
2239                        err = ext4_handle_dirty_dx_node(handle, dir, bh2);
2240                        if (err)
2241                                goto journal_error;
2242                        brelse (bh2);
2243                        err = ext4_handle_dirty_dx_node(handle, dir,
2244                                                   (frame - 1)->bh);
2245                        if (err)
2246                                goto journal_error;
2247                        if (restart) {
2248                                err = ext4_handle_dirty_dx_node(handle, dir,
2249                                                           frame->bh);
2250                                goto journal_error;
2251                        }
2252                } else {
2253                        struct dx_root *dxroot;
2254                        memcpy((char *) entries2, (char *) entries,
2255                               icount * sizeof(struct dx_entry));
2256                        dx_set_limit(entries2, dx_node_limit(dir));
2257
2258                        /* Set up root */
2259                        dx_set_count(entries, 1);
2260                        dx_set_block(entries + 0, newblock);
2261                        dxroot = (struct dx_root *)frames[0].bh->b_data;
2262                        dxroot->info.indirect_levels += 1;
2263                        dxtrace(printk(KERN_DEBUG
2264                                       "Creating %d level index...\n",
2265                                       dxroot->info.indirect_levels));
2266                        err = ext4_handle_dirty_dx_node(handle, dir, frame->bh);
2267                        if (err)
2268                                goto journal_error;
2269                        err = ext4_handle_dirty_dx_node(handle, dir, bh2);
2270                        brelse(bh2);
2271                        restart = 1;
2272                        goto journal_error;
2273                }
2274        }
2275        de = do_split(handle, dir, &bh, frame, &fname->hinfo);
2276        if (IS_ERR(de)) {
2277                err = PTR_ERR(de);
2278                goto cleanup;
2279        }
2280        err = add_dirent_to_buf(handle, fname, dir, inode, de, bh);
2281        goto cleanup;
2282
2283journal_error:
2284        ext4_std_error(dir->i_sb, err); /* this is a no-op if err == 0 */
2285cleanup:
2286        brelse(bh);
2287        dx_release(frames);
2288        /* @restart is true means htree-path has been changed, we need to
2289         * repeat dx_probe() to find out valid htree-path
2290         */
2291        if (restart && err == 0)
2292                goto again;
2293        return err;
2294}
2295
2296/*
2297 * ext4_generic_delete_entry deletes a directory entry by merging it
2298 * with the previous entry
2299 */
2300int ext4_generic_delete_entry(handle_t *handle,
2301                              struct inode *dir,
2302                              struct ext4_dir_entry_2 *de_del,
2303                              struct buffer_head *bh,
2304                              void *entry_buf,
2305                              int buf_size,
2306                              int csum_size)
2307{
2308        struct ext4_dir_entry_2 *de, *pde;
2309        unsigned int blocksize = dir->i_sb->s_blocksize;
2310        int i;
2311
2312        i = 0;
2313        pde = NULL;
2314        de = (struct ext4_dir_entry_2 *)entry_buf;
2315        while (i < buf_size - csum_size) {
2316                if (ext4_check_dir_entry(dir, NULL, de, bh,
2317                                         bh->b_data, bh->b_size, i))
2318                        return -EFSCORRUPTED;
2319                if (de == de_del)  {
2320                        if (pde)
2321                                pde->rec_len = ext4_rec_len_to_disk(
2322                                        ext4_rec_len_from_disk(pde->rec_len,
2323                                                               blocksize) +
2324                                        ext4_rec_len_from_disk(de->rec_len,
2325                                                               blocksize),
2326                                        blocksize);
2327                        else
2328                                de->inode = 0;
2329                        inode_inc_iversion(dir);
2330                        return 0;
2331                }
2332                i += ext4_rec_len_from_disk(de->rec_len, blocksize);
2333                pde = de;
2334                de = ext4_next_entry(de, blocksize);
2335        }
2336        return -ENOENT;
2337}
2338
2339static int ext4_delete_entry(handle_t *handle,
2340                             struct inode *dir,
2341                             struct ext4_dir_entry_2 *de_del,
2342                             struct buffer_head *bh)
2343{
2344        int err, csum_size = 0;
2345
2346        if (ext4_has_inline_data(dir)) {
2347                int has_inline_data = 1;
2348                err = ext4_delete_inline_entry(handle, dir, de_del, bh,
2349                                               &has_inline_data);
2350                if (has_inline_data)
2351                        return err;
2352        }
2353
2354        if (ext4_has_metadata_csum(dir->i_sb))
2355                csum_size = sizeof(struct ext4_dir_entry_tail);
2356
2357        BUFFER_TRACE(bh, "get_write_access");
2358        err = ext4_journal_get_write_access(handle, bh);
2359        if (unlikely(err))
2360                goto out;
2361
2362        err = ext4_generic_delete_entry(handle, dir, de_del,
2363                                        bh, bh->b_data,
2364                                        dir->i_sb->s_blocksize, csum_size);
2365        if (err)
2366                goto out;
2367
2368        BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata");
2369        err = ext4_handle_dirty_dirent_node(handle, dir, bh);
2370        if (unlikely(err))
2371                goto out;
2372
2373        return 0;
2374out:
2375        if (err != -ENOENT)
2376                ext4_std_error(dir->i_sb, err);
2377        return err;
2378}
2379
2380/*
2381 * Set directory link count to 1 if nlinks > EXT4_LINK_MAX, or if nlinks == 2
2382 * since this indicates that nlinks count was previously 1 to avoid overflowing
2383 * the 16-bit i_links_count field on disk.  Directories with i_nlink == 1 mean
2384 * that subdirectory link counts are not being maintained accurately.
2385 *
2386 * The caller has already checked for i_nlink overflow in case the DIR_LINK
2387 * feature is not enabled and returned -EMLINK.  The is_dx() check is a proxy
2388 * for checking S_ISDIR(inode) (since the INODE_INDEX feature will not be set
2389 * on regular files) and to avoid creating huge/slow non-HTREE directories.
2390 */
2391static void ext4_inc_count(handle_t *handle, struct inode *inode)
2392{
2393        inc_nlink(inode);
2394        if (is_dx(inode) &&
2395            (inode->i_nlink > EXT4_LINK_MAX || inode->i_nlink == 2))
2396                set_nlink(inode, 1);
2397}
2398
2399/*
2400 * If a directory had nlink == 1, then we should let it be 1. This indicates
2401 * directory has >EXT4_LINK_MAX subdirs.
2402 */
2403static void ext4_dec_count(handle_t *handle, struct inode *inode)
2404{
2405        if (!S_ISDIR(inode->i_mode) || inode->i_nlink > 2)
2406                drop_nlink(inode);
2407}
2408
2409
2410static int ext4_add_nondir(handle_t *handle,
2411                struct dentry *dentry, struct inode *inode)
2412{
2413        int err = ext4_add_entry(handle, dentry, inode);
2414        if (!err) {
2415                ext4_mark_inode_dirty(handle, inode);
2416                d_instantiate_new(dentry, inode);
2417                return 0;
2418        }
2419        drop_nlink(inode);
2420        unlock_new_inode(inode);
2421        iput(inode);
2422        return err;
2423}
2424
2425/*
2426 * By the time this is called, we already have created
2427 * the directory cache entry for the new file, but it
2428 * is so far negative - it has no inode.
2429 *
2430 * If the create succeeds, we fill in the inode information
2431 * with d_instantiate().
2432 */
2433static int ext4_create(struct inode *dir, struct dentry *dentry, umode_t mode,
2434                       bool excl)
2435{
2436        handle_t *handle;
2437        struct inode *inode;
2438        int err, credits, retries = 0;
2439
2440        err = dquot_initialize(dir);
2441        if (err)
2442                return err;
2443
2444        credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
2445                   EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3);
2446retry:
2447        inode = ext4_new_inode_start_handle(dir, mode, &dentry->d_name, 0,
2448                                            NULL, EXT4_HT_DIR, credits);
2449        handle = ext4_journal_current_handle();
2450        err = PTR_ERR(inode);
2451        if (!IS_ERR(inode)) {
2452                inode->i_op = &ext4_file_inode_operations;
2453                inode->i_fop = &ext4_file_operations;
2454                ext4_set_aops(inode);
2455                err = ext4_add_nondir(handle, dentry, inode);
2456                if (!err && IS_DIRSYNC(dir))
2457                        ext4_handle_sync(handle);
2458        }
2459        if (handle)
2460                ext4_journal_stop(handle);
2461        if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries))
2462                goto retry;
2463        return err;
2464}
2465
2466static int ext4_mknod(struct inode *dir, struct dentry *dentry,
2467                      umode_t mode, dev_t rdev)
2468{
2469        handle_t *handle;
2470        struct inode *inode;
2471        int err, credits, retries = 0;
2472
2473        err = dquot_initialize(dir);
2474        if (err)
2475                return err;
2476
2477        credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
2478                   EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3);
2479retry:
2480        inode = ext4_new_inode_start_handle(dir, mode, &dentry->d_name, 0,
2481                                            NULL, EXT4_HT_DIR, credits);
2482        handle = ext4_journal_current_handle();
2483        err = PTR_ERR(inode);
2484        if (!IS_ERR(inode)) {
2485                init_special_inode(inode, inode->i_mode, rdev);
2486                inode->i_op = &ext4_special_inode_operations;
2487                err = ext4_add_nondir(handle, dentry, inode);
2488                if (!err && IS_DIRSYNC(dir))
2489                        ext4_handle_sync(handle);
2490        }
2491        if (handle)
2492                ext4_journal_stop(handle);
2493        if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries))
2494                goto retry;
2495        return err;
2496}
2497
2498static int ext4_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode)
2499{
2500        handle_t *handle;
2501        struct inode *inode;
2502        int err, retries = 0;
2503
2504        err = dquot_initialize(dir);
2505        if (err)
2506                return err;
2507
2508retry:
2509        inode = ext4_new_inode_start_handle(dir, mode,
2510                                            NULL, 0, NULL,
2511                                            EXT4_HT_DIR,
2512                        EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb) +
2513                          4 + EXT4_XATTR_TRANS_BLOCKS);
2514        handle = ext4_journal_current_handle();
2515        err = PTR_ERR(inode);
2516        if (!IS_ERR(inode)) {
2517                inode->i_op = &ext4_file_inode_operations;
2518                inode->i_fop = &ext4_file_operations;
2519                ext4_set_aops(inode);
2520                d_tmpfile(dentry, inode);
2521                err = ext4_orphan_add(handle, inode);
2522                if (err)
2523                        goto err_unlock_inode;
2524                mark_inode_dirty(inode);
2525                unlock_new_inode(inode);
2526        }
2527        if (handle)
2528                ext4_journal_stop(handle);
2529        if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries))
2530                goto retry;
2531        return err;
2532err_unlock_inode:
2533        ext4_journal_stop(handle);
2534        unlock_new_inode(inode);
2535        return err;
2536}
2537
2538struct ext4_dir_entry_2 *ext4_init_dot_dotdot(struct inode *inode,
2539                          struct ext4_dir_entry_2 *de,
2540                          int blocksize, int csum_size,
2541                          unsigned int parent_ino, int dotdot_real_len)
2542{
2543        de->inode = cpu_to_le32(inode->i_ino);
2544        de->name_len = 1;
2545        de->rec_len = ext4_rec_len_to_disk(EXT4_DIR_REC_LEN(de->name_len),
2546                                           blocksize);
2547        strcpy(de->name, ".");
2548        ext4_set_de_type(inode->i_sb, de, S_IFDIR);
2549
2550        de = ext4_next_entry(de, blocksize);
2551        de->inode = cpu_to_le32(parent_ino);
2552        de->name_len = 2;
2553        if (!dotdot_real_len)
2554                de->rec_len = ext4_rec_len_to_disk(blocksize -
2555                                        (csum_size + EXT4_DIR_REC_LEN(1)),
2556                                        blocksize);
2557        else
2558                de->rec_len = ext4_rec_len_to_disk(
2559                                EXT4_DIR_REC_LEN(de->name_len), blocksize);
2560        strcpy(de->name, "..");
2561        ext4_set_de_type(inode->i_sb, de, S_IFDIR);
2562
2563        return ext4_next_entry(de, blocksize);
2564}
2565
2566static int ext4_init_new_dir(handle_t *handle, struct inode *dir,
2567                             struct inode *inode)
2568{
2569        struct buffer_head *dir_block = NULL;
2570        struct ext4_dir_entry_2 *de;
2571        struct ext4_dir_entry_tail *t;
2572        ext4_lblk_t block = 0;
2573        unsigned int blocksize = dir->i_sb->s_blocksize;
2574        int csum_size = 0;
2575        int err;
2576
2577        if (ext4_has_metadata_csum(dir->i_sb))
2578                csum_size = sizeof(struct ext4_dir_entry_tail);
2579
2580        if (ext4_test_inode_state(inode, EXT4_STATE_MAY_INLINE_DATA)) {
2581                err = ext4_try_create_inline_dir(handle, dir, inode);
2582                if (err < 0 && err != -ENOSPC)
2583                        goto out;
2584                if (!err)
2585                        goto out;
2586        }
2587
2588        inode->i_size = 0;
2589        dir_block = ext4_append(handle, inode, &block);
2590        if (IS_ERR(dir_block))
2591                return PTR_ERR(dir_block);
2592        de = (struct ext4_dir_entry_2 *)dir_block->b_data;
2593        ext4_init_dot_dotdot(inode, de, blocksize, csum_size, dir->i_ino, 0);
2594        set_nlink(inode, 2);
2595        if (csum_size) {
2596                t = EXT4_DIRENT_TAIL(dir_block->b_data, blocksize);
2597                initialize_dirent_tail(t, blocksize);
2598        }
2599
2600        BUFFER_TRACE(dir_block, "call ext4_handle_dirty_metadata");
2601        err = ext4_handle_dirty_dirent_node(handle, inode, dir_block);
2602        if (err)
2603                goto out;
2604        set_buffer_verified(dir_block);
2605out:
2606        brelse(dir_block);
2607        return err;
2608}
2609
2610static int ext4_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
2611{
2612        handle_t *handle;
2613        struct inode *inode;
2614        int err, credits, retries = 0;
2615
2616        if (EXT4_DIR_LINK_MAX(dir))
2617                return -EMLINK;
2618
2619        err = dquot_initialize(dir);
2620        if (err)
2621                return err;
2622
2623        credits = (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
2624                   EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3);
2625retry:
2626        inode = ext4_new_inode_start_handle(dir, S_IFDIR | mode,
2627                                            &dentry->d_name,
2628                                            0, NULL, EXT4_HT_DIR, credits);
2629        handle = ext4_journal_current_handle();
2630        err = PTR_ERR(inode);
2631        if (IS_ERR(inode))
2632                goto out_stop;
2633
2634        inode->i_op = &ext4_dir_inode_operations;
2635        inode->i_fop = &ext4_dir_operations;
2636        err = ext4_init_new_dir(handle, dir, inode);
2637        if (err)
2638                goto out_clear_inode;
2639        err = ext4_mark_inode_dirty(handle, inode);
2640        if (!err)
2641                err = ext4_add_entry(handle, dentry, inode);
2642        if (err) {
2643out_clear_inode:
2644                clear_nlink(inode);
2645                unlock_new_inode(inode);
2646                ext4_mark_inode_dirty(handle, inode);
2647                iput(inode);
2648                goto out_stop;
2649        }
2650        ext4_inc_count(handle, dir);
2651        ext4_update_dx_flag(dir);
2652        err = ext4_mark_inode_dirty(handle, dir);
2653        if (err)
2654                goto out_clear_inode;
2655        d_instantiate_new(dentry, inode);
2656        if (IS_DIRSYNC(dir))
2657                ext4_handle_sync(handle);
2658
2659out_stop:
2660        if (handle)
2661                ext4_journal_stop(handle);
2662        if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries))
2663                goto retry;
2664        return err;
2665}
2666
2667/*
2668 * routine to check that the specified directory is empty (for rmdir)
2669 */
2670bool ext4_empty_dir(struct inode *inode)
2671{
2672        unsigned int offset;
2673        struct buffer_head *bh;
2674        struct ext4_dir_entry_2 *de, *de1;
2675        struct super_block *sb;
2676
2677        if (ext4_has_inline_data(inode)) {
2678                int has_inline_data = 1;
2679                int ret;
2680
2681                ret = empty_inline_dir(inode, &has_inline_data);
2682                if (has_inline_data)
2683                        return ret;
2684        }
2685
2686        sb = inode->i_sb;
2687        if (inode->i_size < EXT4_DIR_REC_LEN(1) + EXT4_DIR_REC_LEN(2)) {
2688                EXT4_ERROR_INODE(inode, "invalid size");
2689                return true;
2690        }
2691        bh = ext4_read_dirblock(inode, 0, EITHER);
2692        if (IS_ERR(bh))
2693                return true;
2694
2695        de = (struct ext4_dir_entry_2 *) bh->b_data;
2696        de1 = ext4_next_entry(de, sb->s_blocksize);
2697        if (le32_to_cpu(de->inode) != inode->i_ino ||
2698                        le32_to_cpu(de1->inode) == 0 ||
2699                        strcmp(".", de->name) || strcmp("..", de1->name)) {
2700                ext4_warning_inode(inode, "directory missing '.' and/or '..'");
2701                brelse(bh);
2702                return true;
2703        }
2704        offset = ext4_rec_len_from_disk(de->rec_len, sb->s_blocksize) +
2705                 ext4_rec_len_from_disk(de1->rec_len, sb->s_blocksize);
2706        de = ext4_next_entry(de1, sb->s_blocksize);
2707        while (offset < inode->i_size) {
2708                if ((void *) de >= (void *) (bh->b_data+sb->s_blocksize)) {
2709                        unsigned int lblock;
2710                        brelse(bh);
2711                        lblock = offset >> EXT4_BLOCK_SIZE_BITS(sb);
2712                        bh = ext4_read_dirblock(inode, lblock, EITHER);
2713                        if (IS_ERR(bh))
2714                                return true;
2715                        de = (struct ext4_dir_entry_2 *) bh->b_data;
2716                }
2717                if (ext4_check_dir_entry(inode, NULL, de, bh,
2718                                         bh->b_data, bh->b_size, offset)) {
2719                        de = (struct ext4_dir_entry_2 *)(bh->b_data +
2720                                                         sb->s_blocksize);
2721                        offset = (offset | (sb->s_blocksize - 1)) + 1;
2722                        continue;
2723                }
2724                if (le32_to_cpu(de->inode)) {
2725                        brelse(bh);
2726                        return false;
2727                }
2728                offset += ext4_rec_len_from_disk(de->rec_len, sb->s_blocksize);
2729                de = ext4_next_entry(de, sb->s_blocksize);
2730        }
2731        brelse(bh);
2732        return true;
2733}
2734
2735/*
2736 * ext4_orphan_add() links an unlinked or truncated inode into a list of
2737 * such inodes, starting at the superblock, in case we crash before the
2738 * file is closed/deleted, or in case the inode truncate spans multiple
2739 * transactions and the last transaction is not recovered after a crash.
2740 *
2741 * At filesystem recovery time, we walk this list deleting unlinked
2742 * inodes and truncating linked inodes in ext4_orphan_cleanup().
2743 *
2744 * Orphan list manipulation functions must be called under i_mutex unless
2745 * we are just creating the inode or deleting it.
2746 */
2747int ext4_orphan_add(handle_t *handle, struct inode *inode)
2748{
2749        struct super_block *sb = inode->i_sb;
2750        struct ext4_sb_info *sbi = EXT4_SB(sb);
2751        struct ext4_iloc iloc;
2752        int err = 0, rc;
2753        bool dirty = false;
2754
2755        if (!sbi->s_journal || is_bad_inode(inode))
2756                return 0;
2757
2758        WARN_ON_ONCE(!(inode->i_state & (I_NEW | I_FREEING)) &&
2759                     !inode_is_locked(inode));
2760        /*
2761         * Exit early if inode already is on orphan list. This is a big speedup
2762         * since we don't have to contend on the global s_orphan_lock.
2763         */
2764        if (!list_empty(&EXT4_I(inode)->i_orphan))
2765                return 0;
2766
2767        /*
2768         * Orphan handling is only valid for files with data blocks
2769         * being truncated, or files being unlinked. Note that we either
2770         * hold i_mutex, or the inode can not be referenced from outside,
2771         * so i_nlink should not be bumped due to race
2772         */
2773        J_ASSERT((S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
2774                  S_ISLNK(inode->i_mode)) || inode->i_nlink == 0);
2775
2776        BUFFER_TRACE(sbi->s_sbh, "get_write_access");
2777        err = ext4_journal_get_write_access(handle, sbi->s_sbh);
2778        if (err)
2779                goto out;
2780
2781        err = ext4_reserve_inode_write(handle, inode, &iloc);
2782        if (err)
2783                goto out;
2784
2785        mutex_lock(&sbi->s_orphan_lock);
2786        /*
2787         * Due to previous errors inode may be already a part of on-disk
2788         * orphan list. If so skip on-disk list modification.
2789         */
2790        if (!NEXT_ORPHAN(inode) || NEXT_ORPHAN(inode) >
2791            (le32_to_cpu(sbi->s_es->s_inodes_count))) {
2792                /* Insert this inode at the head of the on-disk orphan list */
2793                NEXT_ORPHAN(inode) = le32_to_cpu(sbi->s_es->s_last_orphan);
2794                sbi->s_es->s_last_orphan = cpu_to_le32(inode->i_ino);
2795                dirty = true;
2796        }
2797        list_add(&EXT4_I(inode)->i_orphan, &sbi->s_orphan);
2798        mutex_unlock(&sbi->s_orphan_lock);
2799
2800        if (dirty) {
2801                err = ext4_handle_dirty_super(handle, sb);
2802                rc = ext4_mark_iloc_dirty(handle, inode, &iloc);
2803                if (!err)
2804                        err = rc;
2805                if (err) {
2806                        /*
2807                         * We have to remove inode from in-memory list if
2808                         * addition to on disk orphan list failed. Stray orphan
2809                         * list entries can cause panics at unmount time.
2810                         */
2811                        mutex_lock(&sbi->s_orphan_lock);
2812                        list_del_init(&EXT4_I(inode)->i_orphan);
2813                        mutex_unlock(&sbi->s_orphan_lock);
2814                }
2815        } else
2816                brelse(iloc.bh);
2817
2818        jbd_debug(4, "superblock will point to %lu\n", inode->i_ino);
2819        jbd_debug(4, "orphan inode %lu will point to %d\n",
2820                        inode->i_ino, NEXT_ORPHAN(inode));
2821out:
2822        ext4_std_error(sb, err);
2823        return err;
2824}
2825
2826/*
2827 * ext4_orphan_del() removes an unlinked or truncated inode from the list
2828 * of such inodes stored on disk, because it is finally being cleaned up.
2829 */
2830int ext4_orphan_del(handle_t *handle, struct inode *inode)
2831{
2832        struct list_head *prev;
2833        struct ext4_inode_info *ei = EXT4_I(inode);
2834        struct ext4_sb_info *sbi = EXT4_SB(inode->i_sb);
2835        __u32 ino_next;
2836        struct ext4_iloc iloc;
2837        int err = 0;
2838
2839        if (!sbi->s_journal && !(sbi->s_mount_state & EXT4_ORPHAN_FS))
2840                return 0;
2841
2842        WARN_ON_ONCE(!(inode->i_state & (I_NEW | I_FREEING)) &&
2843                     !inode_is_locked(inode));
2844        /* Do this quick check before taking global s_orphan_lock. */
2845        if (list_empty(&ei->i_orphan))
2846                return 0;
2847
2848        if (handle) {
2849                /* Grab inode buffer early before taking global s_orphan_lock */
2850                err = ext4_reserve_inode_write(handle, inode, &iloc);
2851        }
2852
2853        mutex_lock(&sbi->s_orphan_lock);
2854        jbd_debug(4, "remove inode %lu from orphan list\n", inode->i_ino);
2855
2856        prev = ei->i_orphan.prev;
2857        list_del_init(&ei->i_orphan);
2858
2859        /* If we're on an error path, we may not have a valid
2860         * transaction handle with which to update the orphan list on
2861         * disk, but we still need to remove the inode from the linked
2862         * list in memory. */
2863        if (!handle || err) {
2864                mutex_unlock(&sbi->s_orphan_lock);
2865                goto out_err;
2866        }
2867
2868        ino_next = NEXT_ORPHAN(inode);
2869        if (prev == &sbi->s_orphan) {
2870                jbd_debug(4, "superblock will point to %u\n", ino_next);
2871                BUFFER_TRACE(sbi->s_sbh, "get_write_access");
2872                err = ext4_journal_get_write_access(handle, sbi->s_sbh);
2873                if (err) {
2874                        mutex_unlock(&sbi->s_orphan_lock);
2875                        goto out_brelse;
2876                }
2877                sbi->s_es->s_last_orphan = cpu_to_le32(ino_next);
2878                mutex_unlock(&sbi->s_orphan_lock);
2879                err = ext4_handle_dirty_super(handle, inode->i_sb);
2880        } else {
2881                struct ext4_iloc iloc2;
2882                struct inode *i_prev =
2883                        &list_entry(prev, struct ext4_inode_info, i_orphan)->vfs_inode;
2884
2885                jbd_debug(4, "orphan inode %lu will point to %u\n",
2886                          i_prev->i_ino, ino_next);
2887                err = ext4_reserve_inode_write(handle, i_prev, &iloc2);
2888                if (err) {
2889                        mutex_unlock(&sbi->s_orphan_lock);
2890                        goto out_brelse;
2891                }
2892                NEXT_ORPHAN(i_prev) = ino_next;
2893                err = ext4_mark_iloc_dirty(handle, i_prev, &iloc2);
2894                mutex_unlock(&sbi->s_orphan_lock);
2895        }
2896        if (err)
2897                goto out_brelse;
2898        NEXT_ORPHAN(inode) = 0;
2899        err = ext4_mark_iloc_dirty(handle, inode, &iloc);
2900out_err:
2901        ext4_std_error(inode->i_sb, err);
2902        return err;
2903
2904out_brelse:
2905        brelse(iloc.bh);
2906        goto out_err;
2907}
2908
2909static int ext4_rmdir(struct inode *dir, struct dentry *dentry)
2910{
2911        int retval;
2912        struct inode *inode;
2913        struct buffer_head *bh;
2914        struct ext4_dir_entry_2 *de;
2915        handle_t *handle = NULL;
2916
2917        if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb))))
2918                return -EIO;
2919
2920        /* Initialize quotas before so that eventual writes go in
2921         * separate transaction */
2922        retval = dquot_initialize(dir);
2923        if (retval)
2924                return retval;
2925        retval = dquot_initialize(d_inode(dentry));
2926        if (retval)
2927                return retval;
2928
2929        retval = -ENOENT;
2930        bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL);
2931        if (IS_ERR(bh))
2932                return PTR_ERR(bh);
2933        if (!bh)
2934                goto end_rmdir;
2935
2936        inode = d_inode(dentry);
2937
2938        retval = -EFSCORRUPTED;
2939        if (le32_to_cpu(de->inode) != inode->i_ino)
2940                goto end_rmdir;
2941
2942        retval = -ENOTEMPTY;
2943        if (!ext4_empty_dir(inode))
2944                goto end_rmdir;
2945
2946        handle = ext4_journal_start(dir, EXT4_HT_DIR,
2947                                    EXT4_DATA_TRANS_BLOCKS(dir->i_sb));
2948        if (IS_ERR(handle)) {
2949                retval = PTR_ERR(handle);
2950                handle = NULL;
2951                goto end_rmdir;
2952        }
2953
2954        if (IS_DIRSYNC(dir))
2955                ext4_handle_sync(handle);
2956
2957        retval = ext4_delete_entry(handle, dir, de, bh);
2958        if (retval)
2959                goto end_rmdir;
2960        if (!EXT4_DIR_LINK_EMPTY(inode))
2961                ext4_warning_inode(inode,
2962                             "empty directory '%.*s' has too many links (%u)",
2963                             dentry->d_name.len, dentry->d_name.name,
2964                             inode->i_nlink);
2965        inode_inc_iversion(inode);
2966        clear_nlink(inode);
2967        /* There's no need to set i_disksize: the fact that i_nlink is
2968         * zero will ensure that the right thing happens during any
2969         * recovery. */
2970        inode->i_size = 0;
2971        ext4_orphan_add(handle, inode);
2972        inode->i_ctime = dir->i_ctime = dir->i_mtime = current_time(inode);
2973        ext4_mark_inode_dirty(handle, inode);
2974        ext4_dec_count(handle, dir);
2975        ext4_update_dx_flag(dir);
2976        ext4_mark_inode_dirty(handle, dir);
2977
2978end_rmdir:
2979        brelse(bh);
2980        if (handle)
2981                ext4_journal_stop(handle);
2982        return retval;
2983}
2984
2985static int ext4_unlink(struct inode *dir, struct dentry *dentry)
2986{
2987        int retval;
2988        struct inode *inode;
2989        struct buffer_head *bh;
2990        struct ext4_dir_entry_2 *de;
2991        handle_t *handle = NULL;
2992
2993        if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb))))
2994                return -EIO;
2995
2996        trace_ext4_unlink_enter(dir, dentry);
2997        /* Initialize quotas before so that eventual writes go
2998         * in separate transaction */
2999        retval = dquot_initialize(dir);
3000        if (retval)
3001                return retval;
3002        retval = dquot_initialize(d_inode(dentry));
3003        if (retval)
3004                return retval;
3005
3006        retval = -ENOENT;
3007        bh = ext4_find_entry(dir, &dentry->d_name, &de, NULL);
3008        if (IS_ERR(bh))
3009                return PTR_ERR(bh);
3010        if (!bh)
3011                goto end_unlink;
3012
3013        inode = d_inode(dentry);
3014
3015        retval = -EFSCORRUPTED;
3016        if (le32_to_cpu(de->inode) != inode->i_ino)
3017                goto end_unlink;
3018
3019        handle = ext4_journal_start(dir, EXT4_HT_DIR,
3020                                    EXT4_DATA_TRANS_BLOCKS(dir->i_sb));
3021        if (IS_ERR(handle)) {
3022                retval = PTR_ERR(handle);
3023                handle = NULL;
3024                goto end_unlink;
3025        }
3026
3027        if (IS_DIRSYNC(dir))
3028                ext4_handle_sync(handle);
3029
3030        if (inode->i_nlink == 0) {
3031                ext4_warning_inode(inode, "Deleting file '%.*s' with no links",
3032                                   dentry->d_name.len, dentry->d_name.name);
3033                set_nlink(inode, 1);
3034        }
3035        retval = ext4_delete_entry(handle, dir, de, bh);
3036        if (retval)
3037                goto end_unlink;
3038        dir->i_ctime = dir->i_mtime = current_time(dir);
3039        ext4_update_dx_flag(dir);
3040        ext4_mark_inode_dirty(handle, dir);
3041        drop_nlink(inode);
3042        if (!inode->i_nlink)
3043                ext4_orphan_add(handle, inode);
3044        inode->i_ctime = current_time(inode);
3045        ext4_mark_inode_dirty(handle, inode);
3046
3047end_unlink:
3048        brelse(bh);
3049        if (handle)
3050                ext4_journal_stop(handle);
3051        trace_ext4_unlink_exit(dentry, retval);
3052        return retval;
3053}
3054
3055static int ext4_symlink(struct inode *dir,
3056                        struct dentry *dentry, const char *symname)
3057{
3058        handle_t *handle;
3059        struct inode *inode;
3060        int err, len = strlen(symname);
3061        int credits;
3062        struct fscrypt_str disk_link;
3063
3064        if (unlikely(ext4_forced_shutdown(EXT4_SB(dir->i_sb))))
3065                return -EIO;
3066
3067        err = fscrypt_prepare_symlink(dir, symname, len, dir->i_sb->s_blocksize,
3068                                      &disk_link);
3069        if (err)
3070                return err;
3071
3072        err = dquot_initialize(dir);
3073        if (err)
3074                return err;
3075
3076        if ((disk_link.len > EXT4_N_BLOCKS * 4)) {
3077                /*
3078                 * For non-fast symlinks, we just allocate inode and put it on
3079                 * orphan list in the first transaction => we need bitmap,
3080                 * group descriptor, sb, inode block, quota blocks, and
3081                 * possibly selinux xattr blocks.
3082                 */
3083                credits = 4 + EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb) +
3084                          EXT4_XATTR_TRANS_BLOCKS;
3085        } else {
3086                /*
3087                 * Fast symlink. We have to add entry to directory
3088                 * (EXT4_DATA_TRANS_BLOCKS + EXT4_INDEX_EXTRA_TRANS_BLOCKS),
3089                 * allocate new inode (bitmap, group descriptor, inode block,
3090                 * quota blocks, sb is already counted in previous macros).
3091                 */
3092                credits = EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
3093                          EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3;
3094        }
3095
3096        inode = ext4_new_inode_start_handle(dir, S_IFLNK|S_IRWXUGO,
3097                                            &dentry->d_name, 0, NULL,
3098                                            EXT4_HT_DIR, credits);
3099        handle = ext4_journal_current_handle();
3100        if (IS_ERR(inode)) {
3101                if (handle)
3102                        ext4_journal_stop(handle);
3103                return PTR_ERR(inode);
3104        }
3105
3106        if (IS_ENCRYPTED(inode)) {
3107                err = fscrypt_encrypt_symlink(inode, symname, len, &disk_link);
3108                if (err)
3109                        goto err_drop_inode;
3110                inode->i_op = &ext4_encrypted_symlink_inode_operations;
3111        }
3112
3113        if ((disk_link.len > EXT4_N_BLOCKS * 4)) {
3114                if (!IS_ENCRYPTED(inode))
3115                        inode->i_op = &ext4_symlink_inode_operations;
3116                inode_nohighmem(inode);
3117                ext4_set_aops(inode);
3118                /*
3119                 * We cannot call page_symlink() with transaction started
3120                 * because it calls into ext4_write_begin() which can wait
3121                 * for transaction commit if we are running out of space
3122                 * and thus we deadlock. So we have to stop transaction now
3123                 * and restart it when symlink contents is written.
3124                 * 
3125                 * To keep fs consistent in case of crash, we have to put inode
3126                 * to orphan list in the mean time.
3127                 */
3128                drop_nlink(inode);
3129                err = ext4_orphan_add(handle, inode);
3130                ext4_journal_stop(handle);
3131                handle = NULL;
3132                if (err)
3133                        goto err_drop_inode;
3134                err = __page_symlink(inode, disk_link.name, disk_link.len, 1);
3135                if (err)
3136                        goto err_drop_inode;
3137                /*
3138                 * Now inode is being linked into dir (EXT4_DATA_TRANS_BLOCKS
3139                 * + EXT4_INDEX_EXTRA_TRANS_BLOCKS), inode is also modified
3140                 */
3141                handle = ext4_journal_start(dir, EXT4_HT_DIR,
3142                                EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
3143                                EXT4_INDEX_EXTRA_TRANS_BLOCKS + 1);
3144                if (IS_ERR(handle)) {
3145                        err = PTR_ERR(handle);
3146                        handle = NULL;
3147                        goto err_drop_inode;
3148                }
3149                set_nlink(inode, 1);
3150                err = ext4_orphan_del(handle, inode);
3151                if (err)
3152                        goto err_drop_inode;
3153        } else {
3154                /* clear the extent format for fast symlink */
3155                ext4_clear_inode_flag(inode, EXT4_INODE_EXTENTS);
3156                if (!IS_ENCRYPTED(inode)) {
3157                        inode->i_op = &ext4_fast_symlink_inode_operations;
3158                        inode->i_link = (char *)&EXT4_I(inode)->i_data;
3159                }
3160                memcpy((char *)&EXT4_I(inode)->i_data, disk_link.name,
3161                       disk_link.len);
3162                inode->i_size = disk_link.len - 1;
3163        }
3164        EXT4_I(inode)->i_disksize = inode->i_size;
3165        err = ext4_add_nondir(handle, dentry, inode);
3166        if (!err && IS_DIRSYNC(dir))
3167                ext4_handle_sync(handle);
3168
3169        if (handle)
3170                ext4_journal_stop(handle);
3171        goto out_free_encrypted_link;
3172
3173err_drop_inode:
3174        if (handle)
3175                ext4_journal_stop(handle);
3176        clear_nlink(inode);
3177        unlock_new_inode(inode);
3178        iput(inode);
3179out_free_encrypted_link:
3180        if (disk_link.name != (unsigned char *)symname)
3181                kfree(disk_link.name);
3182        return err;
3183}
3184
3185static int ext4_link(struct dentry *old_dentry,
3186                     struct inode *dir, struct dentry *dentry)
3187{
3188        handle_t *handle;
3189        struct inode *inode = d_inode(old_dentry);
3190        int err, retries = 0;
3191
3192        if (inode->i_nlink >= EXT4_LINK_MAX)
3193                return -EMLINK;
3194
3195        err = fscrypt_prepare_link(old_dentry, dir, dentry);
3196        if (err)
3197                return err;
3198
3199        if ((ext4_test_inode_flag(dir, EXT4_INODE_PROJINHERIT)) &&
3200            (!projid_eq(EXT4_I(dir)->i_projid,
3201                        EXT4_I(old_dentry->d_inode)->i_projid)))
3202                return -EXDEV;
3203
3204        err = dquot_initialize(dir);
3205        if (err)
3206                return err;
3207
3208retry:
3209        handle = ext4_journal_start(dir, EXT4_HT_DIR,
3210                (EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
3211                 EXT4_INDEX_EXTRA_TRANS_BLOCKS) + 1);
3212        if (IS_ERR(handle))
3213                return PTR_ERR(handle);
3214
3215        if (IS_DIRSYNC(dir))
3216                ext4_handle_sync(handle);
3217
3218        inode->i_ctime = current_time(inode);
3219        ext4_inc_count(handle, inode);
3220        ihold(inode);
3221
3222        err = ext4_add_entry(handle, dentry, inode);
3223        if (!err) {
3224                ext4_mark_inode_dirty(handle, inode);
3225                /* this can happen only for tmpfile being
3226                 * linked the first time
3227                 */
3228                if (inode->i_nlink == 1)
3229                        ext4_orphan_del(handle, inode);
3230                d_instantiate(dentry, inode);
3231        } else {
3232                drop_nlink(inode);
3233                iput(inode);
3234        }
3235        ext4_journal_stop(handle);
3236        if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries))
3237                goto retry;
3238        return err;
3239}
3240
3241
3242/*
3243 * Try to find buffer head where contains the parent block.
3244 * It should be the inode block if it is inlined or the 1st block
3245 * if it is a normal dir.
3246 */
3247static struct buffer_head *ext4_get_first_dir_block(handle_t *handle,
3248                                        struct inode *inode,
3249                                        int *retval,
3250                                        struct ext4_dir_entry_2 **parent_de,
3251                                        int *inlined)
3252{
3253        struct buffer_head *bh;
3254
3255        if (!ext4_has_inline_data(inode)) {
3256                bh = ext4_read_dirblock(inode, 0, EITHER);
3257                if (IS_ERR(bh)) {
3258                        *retval = PTR_ERR(bh);
3259                        return NULL;
3260                }
3261                *parent_de = ext4_next_entry(
3262                                        (struct ext4_dir_entry_2 *)bh->b_data,
3263                                        inode->i_sb->s_blocksize);
3264                return bh;
3265        }
3266
3267        *inlined = 1;
3268        return ext4_get_first_inline_block(inode, parent_de, retval);
3269}
3270
3271struct ext4_renament {
3272        struct inode *dir;
3273        struct dentry *dentry;
3274        struct inode *inode;
3275        bool is_dir;
3276        int dir_nlink_delta;
3277
3278        /* entry for "dentry" */
3279        struct buffer_head *bh;
3280        struct ext4_dir_entry_2 *de;
3281        int inlined;
3282
3283        /* entry for ".." in inode if it's a directory */
3284        struct buffer_head *dir_bh;
3285        struct ext4_dir_entry_2 *parent_de;
3286        int dir_inlined;
3287};
3288
3289static int ext4_rename_dir_prepare(handle_t *handle, struct ext4_renament *ent)
3290{
3291        int retval;
3292
3293        ent->dir_bh = ext4_get_first_dir_block(handle, ent->inode,
3294                                              &retval, &ent->parent_de,
3295                                              &ent->dir_inlined);
3296        if (!ent->dir_bh)
3297                return retval;
3298        if (le32_to_cpu(ent->parent_de->inode) != ent->dir->i_ino)
3299                return -EFSCORRUPTED;
3300        BUFFER_TRACE(ent->dir_bh, "get_write_access");
3301        return ext4_journal_get_write_access(handle, ent->dir_bh);
3302}
3303
3304static int ext4_rename_dir_finish(handle_t *handle, struct ext4_renament *ent,
3305                                  unsigned dir_ino)
3306{
3307        int retval;
3308
3309        ent->parent_de->inode = cpu_to_le32(dir_ino);
3310        BUFFER_TRACE(ent->dir_bh, "call ext4_handle_dirty_metadata");
3311        if (!ent->dir_inlined) {
3312                if (is_dx(ent->inode)) {
3313                        retval = ext4_handle_dirty_dx_node(handle,
3314                                                           ent->inode,
3315                                                           ent->dir_bh);
3316                } else {
3317                        retval = ext4_handle_dirty_dirent_node(handle,
3318                                                               ent->inode,
3319                                                               ent->dir_bh);
3320                }
3321        } else {
3322                retval = ext4_mark_inode_dirty(handle, ent->inode);
3323        }
3324        if (retval) {
3325                ext4_std_error(ent->dir->i_sb, retval);
3326                return retval;
3327        }
3328        return 0;
3329}
3330
3331static int ext4_setent(handle_t *handle, struct ext4_renament *ent,
3332                       unsigned ino, unsigned file_type)
3333{
3334        int retval;
3335
3336        BUFFER_TRACE(ent->bh, "get write access");
3337        retval = ext4_journal_get_write_access(handle, ent->bh);
3338        if (retval)
3339                return retval;
3340        ent->de->inode = cpu_to_le32(ino);
3341        if (ext4_has_feature_filetype(ent->dir->i_sb))
3342                ent->de->file_type = file_type;
3343        inode_inc_iversion(ent->dir);
3344        ent->dir->i_ctime = ent->dir->i_mtime =
3345                current_time(ent->dir);
3346        ext4_mark_inode_dirty(handle, ent->dir);
3347        BUFFER_TRACE(ent->bh, "call ext4_handle_dirty_metadata");
3348        if (!ent->inlined) {
3349                retval = ext4_handle_dirty_dirent_node(handle,
3350                                                       ent->dir, ent->bh);
3351                if (unlikely(retval)) {
3352                        ext4_std_error(ent->dir->i_sb, retval);
3353                        return retval;
3354                }
3355        }
3356        brelse(ent->bh);
3357        ent->bh = NULL;
3358
3359        return 0;
3360}
3361
3362static int ext4_find_delete_entry(handle_t *handle, struct inode *dir,
3363                                  const struct qstr *d_name)
3364{
3365        int retval = -ENOENT;
3366        struct buffer_head *bh;
3367        struct ext4_dir_entry_2 *de;
3368
3369        bh = ext4_find_entry(dir, d_name, &de, NULL);
3370        if (IS_ERR(bh))
3371                return PTR_ERR(bh);
3372        if (bh) {
3373                retval = ext4_delete_entry(handle, dir, de, bh);
3374                brelse(bh);
3375        }
3376        return retval;
3377}
3378
3379static void ext4_rename_delete(handle_t *handle, struct ext4_renament *ent,
3380                               int force_reread)
3381{
3382        int retval;
3383        /*
3384         * ent->de could have moved from under us during htree split, so make
3385         * sure that we are deleting the right entry.  We might also be pointing
3386         * to a stale entry in the unused part of ent->bh so just checking inum
3387         * and the name isn't enough.
3388         */
3389        if (le32_to_cpu(ent->de->inode) != ent->inode->i_ino ||
3390            ent->de->name_len != ent->dentry->d_name.len ||
3391            strncmp(ent->de->name, ent->dentry->d_name.name,
3392                    ent->de->name_len) ||
3393            force_reread) {
3394                retval = ext4_find_delete_entry(handle, ent->dir,
3395                                                &ent->dentry->d_name);
3396        } else {
3397                retval = ext4_delete_entry(handle, ent->dir, ent->de, ent->bh);
3398                if (retval == -ENOENT) {
3399                        retval = ext4_find_delete_entry(handle, ent->dir,
3400                                                        &ent->dentry->d_name);
3401                }
3402        }
3403
3404        if (retval) {
3405                ext4_warning_inode(ent->dir,
3406                                   "Deleting old file: nlink %d, error=%d",
3407                                   ent->dir->i_nlink, retval);
3408        }
3409}
3410
3411static void ext4_update_dir_count(handle_t *handle, struct ext4_renament *ent)
3412{
3413        if (ent->dir_nlink_delta) {
3414                if (ent->dir_nlink_delta == -1)
3415                        ext4_dec_count(handle, ent->dir);
3416                else
3417                        ext4_inc_count(handle, ent->dir);
3418                ext4_mark_inode_dirty(handle, ent->dir);
3419        }
3420}
3421
3422static struct inode *ext4_whiteout_for_rename(struct ext4_renament *ent,
3423                                              int credits, handle_t **h)
3424{
3425        struct inode *wh;
3426        handle_t *handle;
3427        int retries = 0;
3428
3429        /*
3430         * for inode block, sb block, group summaries,
3431         * and inode bitmap
3432         */
3433        credits += (EXT4_MAXQUOTAS_TRANS_BLOCKS(ent->dir->i_sb) +
3434                    EXT4_XATTR_TRANS_BLOCKS + 4);
3435retry:
3436        wh = ext4_new_inode_start_handle(ent->dir, S_IFCHR | WHITEOUT_MODE,
3437                                         &ent->dentry->d_name, 0, NULL,
3438                                         EXT4_HT_DIR, credits);
3439
3440        handle = ext4_journal_current_handle();
3441        if (IS_ERR(wh)) {
3442                if (handle)
3443                        ext4_journal_stop(handle);
3444                if (PTR_ERR(wh) == -ENOSPC &&
3445                    ext4_should_retry_alloc(ent->dir->i_sb, &retries))
3446                        goto retry;
3447        } else {
3448                *h = handle;
3449                init_special_inode(wh, wh->i_mode, WHITEOUT_DEV);
3450                wh->i_op = &ext4_special_inode_operations;
3451        }
3452        return wh;
3453}
3454
3455/*
3456 * Anybody can rename anything with this: the permission checks are left to the
3457 * higher-level routines.
3458 *
3459 * n.b.  old_{dentry,inode) refers to the source dentry/inode
3460 * while new_{dentry,inode) refers to the destination dentry/inode
3461 * This comes from rename(const char *oldpath, const char *newpath)
3462 */
3463static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,
3464                       struct inode *new_dir, struct dentry *new_dentry,
3465                       unsigned int flags)
3466{
3467        handle_t *handle = NULL;
3468        struct ext4_renament old = {
3469                .dir = old_dir,
3470                .dentry = old_dentry,
3471                .inode = d_inode(old_dentry),
3472        };
3473        struct ext4_renament new = {
3474                .dir = new_dir,
3475                .dentry = new_dentry,
3476                .inode = d_inode(new_dentry),
3477        };
3478        int force_reread;
3479        int retval;
3480        struct inode *whiteout = NULL;
3481        int credits;
3482        u8 old_file_type;
3483
3484        if (new.inode && new.inode->i_nlink == 0) {
3485                EXT4_ERROR_INODE(new.inode,
3486                                 "target of rename is already freed");
3487                return -EFSCORRUPTED;
3488        }
3489
3490        if ((ext4_test_inode_flag(new_dir, EXT4_INODE_PROJINHERIT)) &&
3491            (!projid_eq(EXT4_I(new_dir)->i_projid,
3492                        EXT4_I(old_dentry->d_inode)->i_projid)))
3493                return -EXDEV;
3494
3495        retval = dquot_initialize(old.dir);
3496        if (retval)
3497                return retval;
3498        retval = dquot_initialize(new.dir);
3499        if (retval)
3500                return retval;
3501
3502        /* Initialize quotas before so that eventual writes go
3503         * in separate transaction */
3504        if (new.inode) {
3505                retval = dquot_initialize(new.inode);
3506                if (retval)
3507                        return retval;
3508        }
3509
3510        old.bh = ext4_find_entry(old.dir, &old.dentry->d_name, &old.de, NULL);
3511        if (IS_ERR(old.bh))
3512                return PTR_ERR(old.bh);
3513        /*
3514         *  Check for inode number is _not_ due to possible IO errors.
3515         *  We might rmdir the source, keep it as pwd of some process
3516         *  and merrily kill the link to whatever was created under the
3517         *  same name. Goodbye sticky bit ;-<
3518         */
3519        retval = -ENOENT;
3520        if (!old.bh || le32_to_cpu(old.de->inode) != old.inode->i_ino)
3521                goto end_rename;
3522
3523        new.bh = ext4_find_entry(new.dir, &new.dentry->d_name,
3524                                 &new.de, &new.inlined);
3525        if (IS_ERR(new.bh)) {
3526                retval = PTR_ERR(new.bh);
3527                new.bh = NULL;
3528                goto end_rename;
3529        }
3530        if (new.bh) {
3531                if (!new.inode) {
3532                        brelse(new.bh);
3533                        new.bh = NULL;
3534                }
3535        }
3536        if (new.inode && !test_opt(new.dir->i_sb, NO_AUTO_DA_ALLOC))
3537                ext4_alloc_da_blocks(old.inode);
3538
3539        credits = (2 * EXT4_DATA_TRANS_BLOCKS(old.dir->i_sb) +
3540                   EXT4_INDEX_EXTRA_TRANS_BLOCKS + 2);
3541        if (!(flags & RENAME_WHITEOUT)) {
3542                handle = ext4_journal_start(old.dir, EXT4_HT_DIR, credits);
3543                if (IS_ERR(handle)) {
3544                        retval = PTR_ERR(handle);
3545                        handle = NULL;
3546                        goto end_rename;
3547                }
3548        } else {
3549                whiteout = ext4_whiteout_for_rename(&old, credits, &handle);
3550                if (IS_ERR(whiteout)) {
3551                        retval = PTR_ERR(whiteout);
3552                        whiteout = NULL;
3553                        goto end_rename;
3554                }
3555        }
3556
3557        if (IS_DIRSYNC(old.dir) || IS_DIRSYNC(new.dir))
3558                ext4_handle_sync(handle);
3559
3560        if (S_ISDIR(old.inode->i_mode)) {
3561                if (new.inode) {
3562                        retval = -ENOTEMPTY;
3563                        if (!ext4_empty_dir(new.inode))
3564                                goto end_rename;
3565                } else {
3566                        retval = -EMLINK;
3567                        if (new.dir != old.dir && EXT4_DIR_LINK_MAX(new.dir))
3568                                goto end_rename;
3569                }
3570                retval = ext4_rename_dir_prepare(handle, &old);
3571                if (retval)
3572                        goto end_rename;
3573        }
3574        /*
3575         * If we're renaming a file within an inline_data dir and adding or
3576         * setting the new dirent causes a conversion from inline_data to
3577         * extents/blockmap, we need to force the dirent delete code to
3578         * re-read the directory, or else we end up trying to delete a dirent
3579         * from what is now the extent tree root (or a block map).
3580         */
3581        force_reread = (new.dir->i_ino == old.dir->i_ino &&
3582                        ext4_test_inode_flag(new.dir, EXT4_INODE_INLINE_DATA));
3583
3584        old_file_type = old.de->file_type;
3585        if (whiteout) {
3586                /*
3587                 * Do this before adding a new entry, so the old entry is sure
3588                 * to be still pointing to the valid old entry.
3589                 */
3590                retval = ext4_setent(handle, &old, whiteout->i_ino,
3591                                     EXT4_FT_CHRDEV);
3592                if (retval)
3593                        goto end_rename;
3594                ext4_mark_inode_dirty(handle, whiteout);
3595        }
3596        if (!new.bh) {
3597                retval = ext4_add_entry(handle, new.dentry, old.inode);
3598                if (retval)
3599                        goto end_rename;
3600        } else {
3601                retval = ext4_setent(handle, &new,
3602                                     old.inode->i_ino, old_file_type);
3603                if (retval)
3604                        goto end_rename;
3605        }
3606        if (force_reread)
3607                force_reread = !ext4_test_inode_flag(new.dir,
3608                                                     EXT4_INODE_INLINE_DATA);
3609
3610        /*
3611         * Like most other Unix systems, set the ctime for inodes on a
3612         * rename.
3613         */
3614        old.inode->i_ctime = current_time(old.inode);
3615        ext4_mark_inode_dirty(handle, old.inode);
3616
3617        if (!whiteout) {
3618                /*
3619                 * ok, that's it
3620                 */
3621                ext4_rename_delete(handle, &old, force_reread);
3622        }
3623
3624        if (new.inode) {
3625                ext4_dec_count(handle, new.inode);
3626                new.inode->i_ctime = current_time(new.inode);
3627        }
3628        old.dir->i_ctime = old.dir->i_mtime = current_time(old.dir);
3629        ext4_update_dx_flag(old.dir);
3630        if (old.dir_bh) {
3631                retval = ext4_rename_dir_finish(handle, &old, new.dir->i_ino);
3632                if (retval)
3633                        goto end_rename;
3634
3635                ext4_dec_count(handle, old.dir);
3636                if (new.inode) {
3637                        /* checked ext4_empty_dir above, can't have another
3638                         * parent, ext4_dec_count() won't work for many-linked
3639                         * dirs */
3640                        clear_nlink(new.inode);
3641                } else {
3642                        ext4_inc_count(handle, new.dir);
3643                        ext4_update_dx_flag(new.dir);
3644                        ext4_mark_inode_dirty(handle, new.dir);
3645                }
3646        }
3647        ext4_mark_inode_dirty(handle, old.dir);
3648        if (new.inode) {
3649                ext4_mark_inode_dirty(handle, new.inode);
3650                if (!new.inode->i_nlink)
3651                        ext4_orphan_add(handle, new.inode);
3652        }
3653        retval = 0;
3654
3655end_rename:
3656        brelse(old.dir_bh);
3657        brelse(old.bh);
3658        brelse(new.bh);
3659        if (whiteout) {
3660                if (retval)
3661                        drop_nlink(whiteout);
3662                unlock_new_inode(whiteout);
3663                iput(whiteout);
3664        }
3665        if (handle)
3666                ext4_journal_stop(handle);
3667        return retval;
3668}
3669
3670static int ext4_cross_rename(struct inode *old_dir, struct dentry *old_dentry,
3671                             struct inode *new_dir, struct dentry *new_dentry)
3672{
3673        handle_t *handle = NULL;
3674        struct ext4_renament old = {
3675                .dir = old_dir,
3676                .dentry = old_dentry,
3677                .inode = d_inode(old_dentry),
3678        };
3679        struct ext4_renament new = {
3680                .dir = new_dir,
3681                .dentry = new_dentry,
3682                .inode = d_inode(new_dentry),
3683        };
3684        u8 new_file_type;
3685        int retval;
3686        struct timespec64 ctime;
3687
3688        if ((ext4_test_inode_flag(new_dir, EXT4_INODE_PROJINHERIT) &&
3689             !projid_eq(EXT4_I(new_dir)->i_projid,
3690                        EXT4_I(old_dentry->d_inode)->i_projid)) ||
3691            (ext4_test_inode_flag(old_dir, EXT4_INODE_PROJINHERIT) &&
3692             !projid_eq(EXT4_I(old_dir)->i_projid,
3693                        EXT4_I(new_dentry->d_inode)->i_projid)))
3694                return -EXDEV;
3695
3696        retval = dquot_initialize(old.dir);
3697        if (retval)
3698                return retval;
3699        retval = dquot_initialize(new.dir);
3700        if (retval)
3701                return retval;
3702
3703        old.bh = ext4_find_entry(old.dir, &old.dentry->d_name,
3704                                 &old.de, &old.inlined);
3705        if (IS_ERR(old.bh))
3706                return PTR_ERR(old.bh);
3707        /*
3708         *  Check for inode number is _not_ due to possible IO errors.
3709         *  We might rmdir the source, keep it as pwd of some process
3710         *  and merrily kill the link to whatever was created under the
3711         *  same name. Goodbye sticky bit ;-<
3712         */
3713        retval = -ENOENT;
3714        if (!old.bh || le32_to_cpu(old.de->inode) != old.inode->i_ino)
3715                goto end_rename;
3716
3717        new.bh = ext4_find_entry(new.dir, &new.dentry->d_name,
3718                                 &new.de, &new.inlined);
3719        if (IS_ERR(new.bh)) {
3720                retval = PTR_ERR(new.bh);
3721                new.bh = NULL;
3722                goto end_rename;
3723        }
3724
3725        /* RENAME_EXCHANGE case: old *and* new must both exist */
3726        if (!new.bh || le32_to_cpu(new.de->inode) != new.inode->i_ino)
3727                goto end_rename;
3728
3729        handle = ext4_journal_start(old.dir, EXT4_HT_DIR,
3730                (2 * EXT4_DATA_TRANS_BLOCKS(old.dir->i_sb) +
3731                 2 * EXT4_INDEX_EXTRA_TRANS_BLOCKS + 2));
3732        if (IS_ERR(handle)) {
3733                retval = PTR_ERR(handle);
3734                handle = NULL;
3735                goto end_rename;
3736        }
3737
3738        if (IS_DIRSYNC(old.dir) || IS_DIRSYNC(new.dir))
3739                ext4_handle_sync(handle);
3740
3741        if (S_ISDIR(old.inode->i_mode)) {
3742                old.is_dir = true;
3743                retval = ext4_rename_dir_prepare(handle, &old);
3744                if (retval)
3745                        goto end_rename;
3746        }
3747        if (S_ISDIR(new.inode->i_mode)) {
3748                new.is_dir = true;
3749                retval = ext4_rename_dir_prepare(handle, &new);
3750                if (retval)
3751                        goto end_rename;
3752        }
3753
3754        /*
3755         * Other than the special case of overwriting a directory, parents'
3756         * nlink only needs to be modified if this is a cross directory rename.
3757         */
3758        if (old.dir != new.dir && old.is_dir != new.is_dir) {
3759                old.dir_nlink_delta = old.is_dir ? -1 : 1;
3760                new.dir_nlink_delta = -old.dir_nlink_delta;
3761                retval = -EMLINK;
3762                if ((old.dir_nlink_delta > 0 && EXT4_DIR_LINK_MAX(old.dir)) ||
3763                    (new.dir_nlink_delta > 0 && EXT4_DIR_LINK_MAX(new.dir)))
3764                        goto end_rename;
3765        }
3766
3767        new_file_type = new.de->file_type;
3768        retval = ext4_setent(handle, &new, old.inode->i_ino, old.de->file_type);
3769        if (retval)
3770                goto end_rename;
3771
3772        retval = ext4_setent(handle, &old, new.inode->i_ino, new_file_type);
3773        if (retval)
3774                goto end_rename;
3775
3776        /*
3777         * Like most other Unix systems, set the ctime for inodes on a
3778         * rename.
3779         */
3780        ctime = current_time(old.inode);
3781        old.inode->i_ctime = ctime;
3782        new.inode->i_ctime = ctime;
3783        ext4_mark_inode_dirty(handle, old.inode);
3784        ext4_mark_inode_dirty(handle, new.inode);
3785
3786        if (old.dir_bh) {
3787                retval = ext4_rename_dir_finish(handle, &old, new.dir->i_ino);
3788                if (retval)
3789                        goto end_rename;
3790        }
3791        if (new.dir_bh) {
3792                retval = ext4_rename_dir_finish(handle, &new, old.dir->i_ino);
3793                if (retval)
3794                        goto end_rename;
3795        }
3796        ext4_update_dir_count(handle, &old);
3797        ext4_update_dir_count(handle, &new);
3798        retval = 0;
3799
3800end_rename:
3801        brelse(old.dir_bh);
3802        brelse(new.dir_bh);
3803        brelse(old.bh);
3804        brelse(new.bh);
3805        if (handle)
3806                ext4_journal_stop(handle);
3807        return retval;
3808}
3809
3810static int ext4_rename2(struct inode *old_dir, struct dentry *old_dentry,
3811                        struct inode *new_dir, struct dentry *new_dentry,
3812                        unsigned int flags)
3813{
3814        int err;
3815
3816        if (unlikely(ext4_forced_shutdown(EXT4_SB(old_dir->i_sb))))
3817                return -EIO;
3818
3819        if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE | RENAME_WHITEOUT))
3820                return -EINVAL;
3821
3822        err = fscrypt_prepare_rename(old_dir, old_dentry, new_dir, new_dentry,
3823                                     flags);
3824        if (err)
3825                return err;
3826
3827        if (flags & RENAME_EXCHANGE) {
3828                return ext4_cross_rename(old_dir, old_dentry,
3829                                         new_dir, new_dentry);
3830        }
3831
3832        return ext4_rename(old_dir, old_dentry, new_dir, new_dentry, flags);
3833}
3834
3835/*
3836 * directories can handle most operations...
3837 */
3838const struct inode_operations ext4_dir_inode_operations = {
3839        .create         = ext4_create,
3840        .lookup         = ext4_lookup,
3841        .link           = ext4_link,
3842        .unlink         = ext4_unlink,
3843        .symlink        = ext4_symlink,
3844        .mkdir          = ext4_mkdir,
3845        .rmdir          = ext4_rmdir,
3846        .mknod          = ext4_mknod,
3847        .tmpfile        = ext4_tmpfile,
3848        .rename         = ext4_rename2,
3849        .setattr        = ext4_setattr,
3850        .getattr        = ext4_getattr,
3851        .listxattr      = ext4_listxattr,
3852        .get_acl        = ext4_get_acl,
3853        .set_acl        = ext4_set_acl,
3854        .fiemap         = ext4_fiemap,
3855};
3856
3857const struct inode_operations ext4_special_inode_operations = {
3858        .setattr        = ext4_setattr,
3859        .getattr        = ext4_getattr,
3860        .listxattr      = ext4_listxattr,
3861        .get_acl        = ext4_get_acl,
3862        .set_acl        = ext4_set_acl,
3863};
3864