linux/fs/ext3/namei.c
<<
>>
Prefs
   1/*
   2 *  linux/fs/ext3/namei.c
   3 *
   4 * Copyright (C) 1992, 1993, 1994, 1995
   5 * Remy Card (card@masi.ibp.fr)
   6 * Laboratoire MASI - Institut Blaise Pascal
   7 * Universite Pierre et Marie Curie (Paris VI)
   8 *
   9 *  from
  10 *
  11 *  linux/fs/minix/namei.c
  12 *
  13 *  Copyright (C) 1991, 1992  Linus Torvalds
  14 *
  15 *  Big-endian to little-endian byte-swapping/bitmaps by
  16 *        David S. Miller (davem@caip.rutgers.edu), 1995
  17 *  Directory entry file type support and forward compatibility hooks
  18 *      for B-tree directories by Theodore Ts'o (tytso@mit.edu), 1998
  19 *  Hash Tree Directory indexing (c)
  20 *      Daniel Phillips, 2001
  21 *  Hash Tree Directory indexing porting
  22 *      Christopher Li, 2002
  23 *  Hash Tree Directory indexing cleanup
  24 *      Theodore Ts'o, 2002
  25 */
  26
  27#include <linux/fs.h>
  28#include <linux/pagemap.h>
  29#include <linux/jbd.h>
  30#include <linux/time.h>
  31#include <linux/ext3_fs.h>
  32#include <linux/ext3_jbd.h>
  33#include <linux/fcntl.h>
  34#include <linux/stat.h>
  35#include <linux/string.h>
  36#include <linux/quotaops.h>
  37#include <linux/buffer_head.h>
  38#include <linux/bio.h>
  39
  40#include "namei.h"
  41#include "xattr.h"
  42#include "acl.h"
  43
  44/*
  45 * define how far ahead to read directories while searching them.
  46 */
  47#define NAMEI_RA_CHUNKS  2
  48#define NAMEI_RA_BLOCKS  4
  49#define NAMEI_RA_SIZE        (NAMEI_RA_CHUNKS * NAMEI_RA_BLOCKS)
  50#define NAMEI_RA_INDEX(c,b)  (((c) * NAMEI_RA_BLOCKS) + (b))
  51
  52static struct buffer_head *ext3_append(handle_t *handle,
  53                                        struct inode *inode,
  54                                        u32 *block, int *err)
  55{
  56        struct buffer_head *bh;
  57
  58        *block = inode->i_size >> inode->i_sb->s_blocksize_bits;
  59
  60        if ((bh = ext3_bread(handle, inode, *block, 1, err))) {
  61                inode->i_size += inode->i_sb->s_blocksize;
  62                EXT3_I(inode)->i_disksize = inode->i_size;
  63                ext3_journal_get_write_access(handle,bh);
  64        }
  65        return bh;
  66}
  67
  68#ifndef assert
  69#define assert(test) J_ASSERT(test)
  70#endif
  71
  72#ifndef swap
  73#define swap(x, y) do { typeof(x) z = x; x = y; y = z; } while (0)
  74#endif
  75
  76#ifdef DX_DEBUG
  77#define dxtrace(command) command
  78#else
  79#define dxtrace(command)
  80#endif
  81
  82struct fake_dirent
  83{
  84        __le32 inode;
  85        __le16 rec_len;
  86        u8 name_len;
  87        u8 file_type;
  88};
  89
  90struct dx_countlimit
  91{
  92        __le16 limit;
  93        __le16 count;
  94};
  95
  96struct dx_entry
  97{
  98        __le32 hash;
  99        __le32 block;
 100};
 101
 102/*
 103 * dx_root_info is laid out so that if it should somehow get overlaid by a
 104 * dirent the two low bits of the hash version will be zero.  Therefore, the
 105 * hash version mod 4 should never be 0.  Sincerely, the paranoia department.
 106 */
 107
 108struct dx_root
 109{
 110        struct fake_dirent dot;
 111        char dot_name[4];
 112        struct fake_dirent dotdot;
 113        char dotdot_name[4];
 114        struct dx_root_info
 115        {
 116                __le32 reserved_zero;
 117                u8 hash_version;
 118                u8 info_length; /* 8 */
 119                u8 indirect_levels;
 120                u8 unused_flags;
 121        }
 122        info;
 123        struct dx_entry entries[0];
 124};
 125
 126struct dx_node
 127{
 128        struct fake_dirent fake;
 129        struct dx_entry entries[0];
 130};
 131
 132
 133struct dx_frame
 134{
 135        struct buffer_head *bh;
 136        struct dx_entry *entries;
 137        struct dx_entry *at;
 138};
 139
 140struct dx_map_entry
 141{
 142        u32 hash;
 143        u16 offs;
 144        u16 size;
 145};
 146
 147static inline unsigned dx_get_block (struct dx_entry *entry);
 148static void dx_set_block (struct dx_entry *entry, unsigned value);
 149static inline unsigned dx_get_hash (struct dx_entry *entry);
 150static void dx_set_hash (struct dx_entry *entry, unsigned value);
 151static unsigned dx_get_count (struct dx_entry *entries);
 152static unsigned dx_get_limit (struct dx_entry *entries);
 153static void dx_set_count (struct dx_entry *entries, unsigned value);
 154static void dx_set_limit (struct dx_entry *entries, unsigned value);
 155static unsigned dx_root_limit (struct inode *dir, unsigned infosize);
 156static unsigned dx_node_limit (struct inode *dir);
 157static struct dx_frame *dx_probe(struct dentry *dentry,
 158                                 struct inode *dir,
 159                                 struct dx_hash_info *hinfo,
 160                                 struct dx_frame *frame,
 161                                 int *err);
 162static void dx_release (struct dx_frame *frames);
 163static int dx_make_map (struct ext3_dir_entry_2 *de, int size,
 164                        struct dx_hash_info *hinfo, struct dx_map_entry map[]);
 165static void dx_sort_map(struct dx_map_entry *map, unsigned count);
 166static struct ext3_dir_entry_2 *dx_move_dirents (char *from, char *to,
 167                struct dx_map_entry *offsets, int count);
 168static struct ext3_dir_entry_2* dx_pack_dirents (char *base, int size);
 169static void dx_insert_block (struct dx_frame *frame, u32 hash, u32 block);
 170static int ext3_htree_next_block(struct inode *dir, __u32 hash,
 171                                 struct dx_frame *frame,
 172                                 struct dx_frame *frames,
 173                                 __u32 *start_hash);
 174static struct buffer_head * ext3_dx_find_entry(struct dentry *dentry,
 175                       struct ext3_dir_entry_2 **res_dir, int *err);
 176static int ext3_dx_add_entry(handle_t *handle, struct dentry *dentry,
 177                             struct inode *inode);
 178
 179/*
 180 * p is at least 6 bytes before the end of page
 181 */
 182static inline struct ext3_dir_entry_2 *
 183ext3_next_entry(struct ext3_dir_entry_2 *p)
 184{
 185        return (struct ext3_dir_entry_2 *)((char *)p +
 186                ext3_rec_len_from_disk(p->rec_len));
 187}
 188
 189/*
 190 * Future: use high four bits of block for coalesce-on-delete flags
 191 * Mask them off for now.
 192 */
 193
 194static inline unsigned dx_get_block (struct dx_entry *entry)
 195{
 196        return le32_to_cpu(entry->block) & 0x00ffffff;
 197}
 198
 199static inline void dx_set_block (struct dx_entry *entry, unsigned value)
 200{
 201        entry->block = cpu_to_le32(value);
 202}
 203
 204static inline unsigned dx_get_hash (struct dx_entry *entry)
 205{
 206        return le32_to_cpu(entry->hash);
 207}
 208
 209static inline void dx_set_hash (struct dx_entry *entry, unsigned value)
 210{
 211        entry->hash = cpu_to_le32(value);
 212}
 213
 214static inline unsigned dx_get_count (struct dx_entry *entries)
 215{
 216        return le16_to_cpu(((struct dx_countlimit *) entries)->count);
 217}
 218
 219static inline unsigned dx_get_limit (struct dx_entry *entries)
 220{
 221        return le16_to_cpu(((struct dx_countlimit *) entries)->limit);
 222}
 223
 224static inline void dx_set_count (struct dx_entry *entries, unsigned value)
 225{
 226        ((struct dx_countlimit *) entries)->count = cpu_to_le16(value);
 227}
 228
 229static inline void dx_set_limit (struct dx_entry *entries, unsigned value)
 230{
 231        ((struct dx_countlimit *) entries)->limit = cpu_to_le16(value);
 232}
 233
 234static inline unsigned dx_root_limit (struct inode *dir, unsigned infosize)
 235{
 236        unsigned entry_space = dir->i_sb->s_blocksize - EXT3_DIR_REC_LEN(1) -
 237                EXT3_DIR_REC_LEN(2) - infosize;
 238        return 0? 20: entry_space / sizeof(struct dx_entry);
 239}
 240
 241static inline unsigned dx_node_limit (struct inode *dir)
 242{
 243        unsigned entry_space = dir->i_sb->s_blocksize - EXT3_DIR_REC_LEN(0);
 244        return 0? 22: entry_space / sizeof(struct dx_entry);
 245}
 246
 247/*
 248 * Debug
 249 */
 250#ifdef DX_DEBUG
 251static void dx_show_index (char * label, struct dx_entry *entries)
 252{
 253        int i, n = dx_get_count (entries);
 254        printk("%s index ", label);
 255        for (i = 0; i < n; i++)
 256        {
 257                printk("%x->%u ", i? dx_get_hash(entries + i): 0, dx_get_block(entries + i));
 258        }
 259        printk("\n");
 260}
 261
 262struct stats
 263{
 264        unsigned names;
 265        unsigned space;
 266        unsigned bcount;
 267};
 268
 269static struct stats dx_show_leaf(struct dx_hash_info *hinfo, struct ext3_dir_entry_2 *de,
 270                                 int size, int show_names)
 271{
 272        unsigned names = 0, space = 0;
 273        char *base = (char *) de;
 274        struct dx_hash_info h = *hinfo;
 275
 276        printk("names: ");
 277        while ((char *) de < base + size)
 278        {
 279                if (de->inode)
 280                {
 281                        if (show_names)
 282                        {
 283                                int len = de->name_len;
 284                                char *name = de->name;
 285                                while (len--) printk("%c", *name++);
 286                                ext3fs_dirhash(de->name, de->name_len, &h);
 287                                printk(":%x.%u ", h.hash,
 288                                       ((char *) de - base));
 289                        }
 290                        space += EXT3_DIR_REC_LEN(de->name_len);
 291                        names++;
 292                }
 293                de = ext3_next_entry(de);
 294        }
 295        printk("(%i)\n", names);
 296        return (struct stats) { names, space, 1 };
 297}
 298
 299struct stats dx_show_entries(struct dx_hash_info *hinfo, struct inode *dir,
 300                             struct dx_entry *entries, int levels)
 301{
 302        unsigned blocksize = dir->i_sb->s_blocksize;
 303        unsigned count = dx_get_count (entries), names = 0, space = 0, i;
 304        unsigned bcount = 0;
 305        struct buffer_head *bh;
 306        int err;
 307        printk("%i indexed blocks...\n", count);
 308        for (i = 0; i < count; i++, entries++)
 309        {
 310                u32 block = dx_get_block(entries), hash = i? dx_get_hash(entries): 0;
 311                u32 range = i < count - 1? (dx_get_hash(entries + 1) - hash): ~hash;
 312                struct stats stats;
 313                printk("%s%3u:%03u hash %8x/%8x ",levels?"":"   ", i, block, hash, range);
 314                if (!(bh = ext3_bread (NULL,dir, block, 0,&err))) continue;
 315                stats = levels?
 316                   dx_show_entries(hinfo, dir, ((struct dx_node *) bh->b_data)->entries, levels - 1):
 317                   dx_show_leaf(hinfo, (struct ext3_dir_entry_2 *) bh->b_data, blocksize, 0);
 318                names += stats.names;
 319                space += stats.space;
 320                bcount += stats.bcount;
 321                brelse (bh);
 322        }
 323        if (bcount)
 324                printk("%snames %u, fullness %u (%u%%)\n", levels?"":"   ",
 325                        names, space/bcount,(space/bcount)*100/blocksize);
 326        return (struct stats) { names, space, bcount};
 327}
 328#endif /* DX_DEBUG */
 329
 330/*
 331 * Probe for a directory leaf block to search.
 332 *
 333 * dx_probe can return ERR_BAD_DX_DIR, which means there was a format
 334 * error in the directory index, and the caller should fall back to
 335 * searching the directory normally.  The callers of dx_probe **MUST**
 336 * check for this error code, and make sure it never gets reflected
 337 * back to userspace.
 338 */
 339static struct dx_frame *
 340dx_probe(struct dentry *dentry, struct inode *dir,
 341         struct dx_hash_info *hinfo, struct dx_frame *frame_in, int *err)
 342{
 343        unsigned count, indirect;
 344        struct dx_entry *at, *entries, *p, *q, *m;
 345        struct dx_root *root;
 346        struct buffer_head *bh;
 347        struct dx_frame *frame = frame_in;
 348        u32 hash;
 349
 350        frame->bh = NULL;
 351        if (dentry)
 352                dir = dentry->d_parent->d_inode;
 353        if (!(bh = ext3_bread (NULL,dir, 0, 0, err)))
 354                goto fail;
 355        root = (struct dx_root *) bh->b_data;
 356        if (root->info.hash_version != DX_HASH_TEA &&
 357            root->info.hash_version != DX_HASH_HALF_MD4 &&
 358            root->info.hash_version != DX_HASH_LEGACY) {
 359                ext3_warning(dir->i_sb, __FUNCTION__,
 360                             "Unrecognised inode hash code %d",
 361                             root->info.hash_version);
 362                brelse(bh);
 363                *err = ERR_BAD_DX_DIR;
 364                goto fail;
 365        }
 366        hinfo->hash_version = root->info.hash_version;
 367        hinfo->seed = EXT3_SB(dir->i_sb)->s_hash_seed;
 368        if (dentry)
 369                ext3fs_dirhash(dentry->d_name.name, dentry->d_name.len, hinfo);
 370        hash = hinfo->hash;
 371
 372        if (root->info.unused_flags & 1) {
 373                ext3_warning(dir->i_sb, __FUNCTION__,
 374                             "Unimplemented inode hash flags: %#06x",
 375                             root->info.unused_flags);
 376                brelse(bh);
 377                *err = ERR_BAD_DX_DIR;
 378                goto fail;
 379        }
 380
 381        if ((indirect = root->info.indirect_levels) > 1) {
 382                ext3_warning(dir->i_sb, __FUNCTION__,
 383                             "Unimplemented inode hash depth: %#06x",
 384                             root->info.indirect_levels);
 385                brelse(bh);
 386                *err = ERR_BAD_DX_DIR;
 387                goto fail;
 388        }
 389
 390        entries = (struct dx_entry *) (((char *)&root->info) +
 391                                       root->info.info_length);
 392
 393        if (dx_get_limit(entries) != dx_root_limit(dir,
 394                                                   root->info.info_length)) {
 395                ext3_warning(dir->i_sb, __FUNCTION__,
 396                             "dx entry: limit != root limit");
 397                brelse(bh);
 398                *err = ERR_BAD_DX_DIR;
 399                goto fail;
 400        }
 401
 402        dxtrace (printk("Look up %x", hash));
 403        while (1)
 404        {
 405                count = dx_get_count(entries);
 406                if (!count || count > dx_get_limit(entries)) {
 407                        ext3_warning(dir->i_sb, __FUNCTION__,
 408                                     "dx entry: no count or count > limit");
 409                        brelse(bh);
 410                        *err = ERR_BAD_DX_DIR;
 411                        goto fail2;
 412                }
 413
 414                p = entries + 1;
 415                q = entries + count - 1;
 416                while (p <= q)
 417                {
 418                        m = p + (q - p)/2;
 419                        dxtrace(printk("."));
 420                        if (dx_get_hash(m) > hash)
 421                                q = m - 1;
 422                        else
 423                                p = m + 1;
 424                }
 425
 426                if (0) // linear search cross check
 427                {
 428                        unsigned n = count - 1;
 429                        at = entries;
 430                        while (n--)
 431                        {
 432                                dxtrace(printk(","));
 433                                if (dx_get_hash(++at) > hash)
 434                                {
 435                                        at--;
 436                                        break;
 437                                }
 438                        }
 439                        assert (at == p - 1);
 440                }
 441
 442                at = p - 1;
 443                dxtrace(printk(" %x->%u\n", at == entries? 0: dx_get_hash(at), dx_get_block(at)));
 444                frame->bh = bh;
 445                frame->entries = entries;
 446                frame->at = at;
 447                if (!indirect--) return frame;
 448                if (!(bh = ext3_bread (NULL,dir, dx_get_block(at), 0, err)))
 449                        goto fail2;
 450                at = entries = ((struct dx_node *) bh->b_data)->entries;
 451                if (dx_get_limit(entries) != dx_node_limit (dir)) {
 452                        ext3_warning(dir->i_sb, __FUNCTION__,
 453                                     "dx entry: limit != node limit");
 454                        brelse(bh);
 455                        *err = ERR_BAD_DX_DIR;
 456                        goto fail2;
 457                }
 458                frame++;
 459                frame->bh = NULL;
 460        }
 461fail2:
 462        while (frame >= frame_in) {
 463                brelse(frame->bh);
 464                frame--;
 465        }
 466fail:
 467        if (*err == ERR_BAD_DX_DIR)
 468                ext3_warning(dir->i_sb, __FUNCTION__,
 469                             "Corrupt dir inode %ld, running e2fsck is "
 470                             "recommended.", dir->i_ino);
 471        return NULL;
 472}
 473
 474static void dx_release (struct dx_frame *frames)
 475{
 476        if (frames[0].bh == NULL)
 477                return;
 478
 479        if (((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels)
 480                brelse(frames[1].bh);
 481        brelse(frames[0].bh);
 482}
 483
 484/*
 485 * This function increments the frame pointer to search the next leaf
 486 * block, and reads in the necessary intervening nodes if the search
 487 * should be necessary.  Whether or not the search is necessary is
 488 * controlled by the hash parameter.  If the hash value is even, then
 489 * the search is only continued if the next block starts with that
 490 * hash value.  This is used if we are searching for a specific file.
 491 *
 492 * If the hash value is HASH_NB_ALWAYS, then always go to the next block.
 493 *
 494 * This function returns 1 if the caller should continue to search,
 495 * or 0 if it should not.  If there is an error reading one of the
 496 * index blocks, it will a negative error code.
 497 *
 498 * If start_hash is non-null, it will be filled in with the starting
 499 * hash of the next page.
 500 */
 501static int ext3_htree_next_block(struct inode *dir, __u32 hash,
 502                                 struct dx_frame *frame,
 503                                 struct dx_frame *frames,
 504                                 __u32 *start_hash)
 505{
 506        struct dx_frame *p;
 507        struct buffer_head *bh;
 508        int err, num_frames = 0;
 509        __u32 bhash;
 510
 511        p = frame;
 512        /*
 513         * Find the next leaf page by incrementing the frame pointer.
 514         * If we run out of entries in the interior node, loop around and
 515         * increment pointer in the parent node.  When we break out of
 516         * this loop, num_frames indicates the number of interior
 517         * nodes need to be read.
 518         */
 519        while (1) {
 520                if (++(p->at) < p->entries + dx_get_count(p->entries))
 521                        break;
 522                if (p == frames)
 523                        return 0;
 524                num_frames++;
 525                p--;
 526        }
 527
 528        /*
 529         * If the hash is 1, then continue only if the next page has a
 530         * continuation hash of any value.  This is used for readdir
 531         * handling.  Otherwise, check to see if the hash matches the
 532         * desired contiuation hash.  If it doesn't, return since
 533         * there's no point to read in the successive index pages.
 534         */
 535        bhash = dx_get_hash(p->at);
 536        if (start_hash)
 537                *start_hash = bhash;
 538        if ((hash & 1) == 0) {
 539                if ((bhash & ~1) != hash)
 540                        return 0;
 541        }
 542        /*
 543         * If the hash is HASH_NB_ALWAYS, we always go to the next
 544         * block so no check is necessary
 545         */
 546        while (num_frames--) {
 547                if (!(bh = ext3_bread(NULL, dir, dx_get_block(p->at),
 548                                      0, &err)))
 549                        return err; /* Failure */
 550                p++;
 551                brelse (p->bh);
 552                p->bh = bh;
 553                p->at = p->entries = ((struct dx_node *) bh->b_data)->entries;
 554        }
 555        return 1;
 556}
 557
 558
 559/*
 560 * This function fills a red-black tree with information from a
 561 * directory block.  It returns the number directory entries loaded
 562 * into the tree.  If there is an error it is returned in err.
 563 */
 564static int htree_dirblock_to_tree(struct file *dir_file,
 565                                  struct inode *dir, int block,
 566                                  struct dx_hash_info *hinfo,
 567                                  __u32 start_hash, __u32 start_minor_hash)
 568{
 569        struct buffer_head *bh;
 570        struct ext3_dir_entry_2 *de, *top;
 571        int err, count = 0;
 572
 573        dxtrace(printk("In htree dirblock_to_tree: block %d\n", block));
 574        if (!(bh = ext3_bread (NULL, dir, block, 0, &err)))
 575                return err;
 576
 577        de = (struct ext3_dir_entry_2 *) bh->b_data;
 578        top = (struct ext3_dir_entry_2 *) ((char *) de +
 579                                           dir->i_sb->s_blocksize -
 580                                           EXT3_DIR_REC_LEN(0));
 581        for (; de < top; de = ext3_next_entry(de)) {
 582                if (!ext3_check_dir_entry("htree_dirblock_to_tree", dir, de, bh,
 583                                        (block<<EXT3_BLOCK_SIZE_BITS(dir->i_sb))
 584                                                +((char *)de - bh->b_data))) {
 585                        /* On error, skip the f_pos to the next block. */
 586                        dir_file->f_pos = (dir_file->f_pos |
 587                                        (dir->i_sb->s_blocksize - 1)) + 1;
 588                        brelse (bh);
 589                        return count;
 590                }
 591                ext3fs_dirhash(de->name, de->name_len, hinfo);
 592                if ((hinfo->hash < start_hash) ||
 593                    ((hinfo->hash == start_hash) &&
 594                     (hinfo->minor_hash < start_minor_hash)))
 595                        continue;
 596                if (de->inode == 0)
 597                        continue;
 598                if ((err = ext3_htree_store_dirent(dir_file,
 599                                   hinfo->hash, hinfo->minor_hash, de)) != 0) {
 600                        brelse(bh);
 601                        return err;
 602                }
 603                count++;
 604        }
 605        brelse(bh);
 606        return count;
 607}
 608
 609
 610/*
 611 * This function fills a red-black tree with information from a
 612 * directory.  We start scanning the directory in hash order, starting
 613 * at start_hash and start_minor_hash.
 614 *
 615 * This function returns the number of entries inserted into the tree,
 616 * or a negative error code.
 617 */
 618int ext3_htree_fill_tree(struct file *dir_file, __u32 start_hash,
 619                         __u32 start_minor_hash, __u32 *next_hash)
 620{
 621        struct dx_hash_info hinfo;
 622        struct ext3_dir_entry_2 *de;
 623        struct dx_frame frames[2], *frame;
 624        struct inode *dir;
 625        int block, err;
 626        int count = 0;
 627        int ret;
 628        __u32 hashval;
 629
 630        dxtrace(printk("In htree_fill_tree, start hash: %x:%x\n", start_hash,
 631                       start_minor_hash));
 632        dir = dir_file->f_path.dentry->d_inode;
 633        if (!(EXT3_I(dir)->i_flags & EXT3_INDEX_FL)) {
 634                hinfo.hash_version = EXT3_SB(dir->i_sb)->s_def_hash_version;
 635                hinfo.seed = EXT3_SB(dir->i_sb)->s_hash_seed;
 636                count = htree_dirblock_to_tree(dir_file, dir, 0, &hinfo,
 637                                               start_hash, start_minor_hash);
 638                *next_hash = ~0;
 639                return count;
 640        }
 641        hinfo.hash = start_hash;
 642        hinfo.minor_hash = 0;
 643        frame = dx_probe(NULL, dir_file->f_path.dentry->d_inode, &hinfo, frames, &err);
 644        if (!frame)
 645                return err;
 646
 647        /* Add '.' and '..' from the htree header */
 648        if (!start_hash && !start_minor_hash) {
 649                de = (struct ext3_dir_entry_2 *) frames[0].bh->b_data;
 650                if ((err = ext3_htree_store_dirent(dir_file, 0, 0, de)) != 0)
 651                        goto errout;
 652                count++;
 653        }
 654        if (start_hash < 2 || (start_hash ==2 && start_minor_hash==0)) {
 655                de = (struct ext3_dir_entry_2 *) frames[0].bh->b_data;
 656                de = ext3_next_entry(de);
 657                if ((err = ext3_htree_store_dirent(dir_file, 2, 0, de)) != 0)
 658                        goto errout;
 659                count++;
 660        }
 661
 662        while (1) {
 663                block = dx_get_block(frame->at);
 664                ret = htree_dirblock_to_tree(dir_file, dir, block, &hinfo,
 665                                             start_hash, start_minor_hash);
 666                if (ret < 0) {
 667                        err = ret;
 668                        goto errout;
 669                }
 670                count += ret;
 671                hashval = ~0;
 672                ret = ext3_htree_next_block(dir, HASH_NB_ALWAYS,
 673                                            frame, frames, &hashval);
 674                *next_hash = hashval;
 675                if (ret < 0) {
 676                        err = ret;
 677                        goto errout;
 678                }
 679                /*
 680                 * Stop if:  (a) there are no more entries, or
 681                 * (b) we have inserted at least one entry and the
 682                 * next hash value is not a continuation
 683                 */
 684                if ((ret == 0) ||
 685                    (count && ((hashval & 1) == 0)))
 686                        break;
 687        }
 688        dx_release(frames);
 689        dxtrace(printk("Fill tree: returned %d entries, next hash: %x\n",
 690                       count, *next_hash));
 691        return count;
 692errout:
 693        dx_release(frames);
 694        return (err);
 695}
 696
 697
 698/*
 699 * Directory block splitting, compacting
 700 */
 701
 702/*
 703 * Create map of hash values, offsets, and sizes, stored at end of block.
 704 * Returns number of entries mapped.
 705 */
 706static int dx_make_map (struct ext3_dir_entry_2 *de, int size,
 707                        struct dx_hash_info *hinfo, struct dx_map_entry *map_tail)
 708{
 709        int count = 0;
 710        char *base = (char *) de;
 711        struct dx_hash_info h = *hinfo;
 712
 713        while ((char *) de < base + size)
 714        {
 715                if (de->name_len && de->inode) {
 716                        ext3fs_dirhash(de->name, de->name_len, &h);
 717                        map_tail--;
 718                        map_tail->hash = h.hash;
 719                        map_tail->offs = (u16) ((char *) de - base);
 720                        map_tail->size = le16_to_cpu(de->rec_len);
 721                        count++;
 722                        cond_resched();
 723                }
 724                /* XXX: do we need to check rec_len == 0 case? -Chris */
 725                de = ext3_next_entry(de);
 726        }
 727        return count;
 728}
 729
 730/* Sort map by hash value */
 731static void dx_sort_map (struct dx_map_entry *map, unsigned count)
 732{
 733        struct dx_map_entry *p, *q, *top = map + count - 1;
 734        int more;
 735        /* Combsort until bubble sort doesn't suck */
 736        while (count > 2)
 737        {
 738                count = count*10/13;
 739                if (count - 9 < 2) /* 9, 10 -> 11 */
 740                        count = 11;
 741                for (p = top, q = p - count; q >= map; p--, q--)
 742                        if (p->hash < q->hash)
 743                                swap(*p, *q);
 744        }
 745        /* Garden variety bubble sort */
 746        do {
 747                more = 0;
 748                q = top;
 749                while (q-- > map)
 750                {
 751                        if (q[1].hash >= q[0].hash)
 752                                continue;
 753                        swap(*(q+1), *q);
 754                        more = 1;
 755                }
 756        } while(more);
 757}
 758
 759static void dx_insert_block(struct dx_frame *frame, u32 hash, u32 block)
 760{
 761        struct dx_entry *entries = frame->entries;
 762        struct dx_entry *old = frame->at, *new = old + 1;
 763        int count = dx_get_count(entries);
 764
 765        assert(count < dx_get_limit(entries));
 766        assert(old < entries + count);
 767        memmove(new + 1, new, (char *)(entries + count) - (char *)(new));
 768        dx_set_hash(new, hash);
 769        dx_set_block(new, block);
 770        dx_set_count(entries, count + 1);
 771}
 772
 773static void ext3_update_dx_flag(struct inode *inode)
 774{
 775        if (!EXT3_HAS_COMPAT_FEATURE(inode->i_sb,
 776                                     EXT3_FEATURE_COMPAT_DIR_INDEX))
 777                EXT3_I(inode)->i_flags &= ~EXT3_INDEX_FL;
 778}
 779
 780/*
 781 * NOTE! unlike strncmp, ext3_match returns 1 for success, 0 for failure.
 782 *
 783 * `len <= EXT3_NAME_LEN' is guaranteed by caller.
 784 * `de != NULL' is guaranteed by caller.
 785 */
 786static inline int ext3_match (int len, const char * const name,
 787                              struct ext3_dir_entry_2 * de)
 788{
 789        if (len != de->name_len)
 790                return 0;
 791        if (!de->inode)
 792                return 0;
 793        return !memcmp(name, de->name, len);
 794}
 795
 796/*
 797 * Returns 0 if not found, -1 on failure, and 1 on success
 798 */
 799static inline int search_dirblock(struct buffer_head * bh,
 800                                  struct inode *dir,
 801                                  struct dentry *dentry,
 802                                  unsigned long offset,
 803                                  struct ext3_dir_entry_2 ** res_dir)
 804{
 805        struct ext3_dir_entry_2 * de;
 806        char * dlimit;
 807        int de_len;
 808        const char *name = dentry->d_name.name;
 809        int namelen = dentry->d_name.len;
 810
 811        de = (struct ext3_dir_entry_2 *) bh->b_data;
 812        dlimit = bh->b_data + dir->i_sb->s_blocksize;
 813        while ((char *) de < dlimit) {
 814                /* this code is executed quadratically often */
 815                /* do minimal checking `by hand' */
 816
 817                if ((char *) de + namelen <= dlimit &&
 818                    ext3_match (namelen, name, de)) {
 819                        /* found a match - just to be sure, do a full check */
 820                        if (!ext3_check_dir_entry("ext3_find_entry",
 821                                                  dir, de, bh, offset))
 822                                return -1;
 823                        *res_dir = de;
 824                        return 1;
 825                }
 826                /* prevent looping on a bad block */
 827                de_len = ext3_rec_len_from_disk(de->rec_len);
 828                if (de_len <= 0)
 829                        return -1;
 830                offset += de_len;
 831                de = (struct ext3_dir_entry_2 *) ((char *) de + de_len);
 832        }
 833        return 0;
 834}
 835
 836
 837/*
 838 *      ext3_find_entry()
 839 *
 840 * finds an entry in the specified directory with the wanted name. It
 841 * returns the cache buffer in which the entry was found, and the entry
 842 * itself (as a parameter - res_dir). It does NOT read the inode of the
 843 * entry - you'll have to do that yourself if you want to.
 844 *
 845 * The returned buffer_head has ->b_count elevated.  The caller is expected
 846 * to brelse() it when appropriate.
 847 */
 848static struct buffer_head * ext3_find_entry (struct dentry *dentry,
 849                                        struct ext3_dir_entry_2 ** res_dir)
 850{
 851        struct super_block * sb;
 852        struct buffer_head * bh_use[NAMEI_RA_SIZE];
 853        struct buffer_head * bh, *ret = NULL;
 854        unsigned long start, block, b;
 855        int ra_max = 0;         /* Number of bh's in the readahead
 856                                   buffer, bh_use[] */
 857        int ra_ptr = 0;         /* Current index into readahead
 858                                   buffer */
 859        int num = 0;
 860        int nblocks, i, err;
 861        struct inode *dir = dentry->d_parent->d_inode;
 862        int namelen;
 863        const u8 *name;
 864        unsigned blocksize;
 865
 866        *res_dir = NULL;
 867        sb = dir->i_sb;
 868        blocksize = sb->s_blocksize;
 869        namelen = dentry->d_name.len;
 870        name = dentry->d_name.name;
 871        if (namelen > EXT3_NAME_LEN)
 872                return NULL;
 873        if (is_dx(dir)) {
 874                bh = ext3_dx_find_entry(dentry, res_dir, &err);
 875                /*
 876                 * On success, or if the error was file not found,
 877                 * return.  Otherwise, fall back to doing a search the
 878                 * old fashioned way.
 879                 */
 880                if (bh || (err != ERR_BAD_DX_DIR))
 881                        return bh;
 882                dxtrace(printk("ext3_find_entry: dx failed, falling back\n"));
 883        }
 884        nblocks = dir->i_size >> EXT3_BLOCK_SIZE_BITS(sb);
 885        start = EXT3_I(dir)->i_dir_start_lookup;
 886        if (start >= nblocks)
 887                start = 0;
 888        block = start;
 889restart:
 890        do {
 891                /*
 892                 * We deal with the read-ahead logic here.
 893                 */
 894                if (ra_ptr >= ra_max) {
 895                        /* Refill the readahead buffer */
 896                        ra_ptr = 0;
 897                        b = block;
 898                        for (ra_max = 0; ra_max < NAMEI_RA_SIZE; ra_max++) {
 899                                /*
 900                                 * Terminate if we reach the end of the
 901                                 * directory and must wrap, or if our
 902                                 * search has finished at this block.
 903                                 */
 904                                if (b >= nblocks || (num && block == start)) {
 905                                        bh_use[ra_max] = NULL;
 906                                        break;
 907                                }
 908                                num++;
 909                                bh = ext3_getblk(NULL, dir, b++, 0, &err);
 910                                bh_use[ra_max] = bh;
 911                                if (bh)
 912                                        ll_rw_block(READ_META, 1, &bh);
 913                        }
 914                }
 915                if ((bh = bh_use[ra_ptr++]) == NULL)
 916                        goto next;
 917                wait_on_buffer(bh);
 918                if (!buffer_uptodate(bh)) {
 919                        /* read error, skip block & hope for the best */
 920                        ext3_error(sb, __FUNCTION__, "reading directory #%lu "
 921                                   "offset %lu", dir->i_ino, block);
 922                        brelse(bh);
 923                        goto next;
 924                }
 925                i = search_dirblock(bh, dir, dentry,
 926                            block << EXT3_BLOCK_SIZE_BITS(sb), res_dir);
 927                if (i == 1) {
 928                        EXT3_I(dir)->i_dir_start_lookup = block;
 929                        ret = bh;
 930                        goto cleanup_and_exit;
 931                } else {
 932                        brelse(bh);
 933                        if (i < 0)
 934                                goto cleanup_and_exit;
 935                }
 936        next:
 937                if (++block >= nblocks)
 938                        block = 0;
 939        } while (block != start);
 940
 941        /*
 942         * If the directory has grown while we were searching, then
 943         * search the last part of the directory before giving up.
 944         */
 945        block = nblocks;
 946        nblocks = dir->i_size >> EXT3_BLOCK_SIZE_BITS(sb);
 947        if (block < nblocks) {
 948                start = 0;
 949                goto restart;
 950        }
 951
 952cleanup_and_exit:
 953        /* Clean up the read-ahead blocks */
 954        for (; ra_ptr < ra_max; ra_ptr++)
 955                brelse (bh_use[ra_ptr]);
 956        return ret;
 957}
 958
 959static struct buffer_head * ext3_dx_find_entry(struct dentry *dentry,
 960                       struct ext3_dir_entry_2 **res_dir, int *err)
 961{
 962        struct super_block * sb;
 963        struct dx_hash_info     hinfo;
 964        u32 hash;
 965        struct dx_frame frames[2], *frame;
 966        struct ext3_dir_entry_2 *de, *top;
 967        struct buffer_head *bh;
 968        unsigned long block;
 969        int retval;
 970        int namelen = dentry->d_name.len;
 971        const u8 *name = dentry->d_name.name;
 972        struct inode *dir = dentry->d_parent->d_inode;
 973
 974        sb = dir->i_sb;
 975        /* NFS may look up ".." - look at dx_root directory block */
 976        if (namelen > 2 || name[0] != '.'||(name[1] != '.' && name[1] != '\0')){
 977                if (!(frame = dx_probe(dentry, NULL, &hinfo, frames, err)))
 978                        return NULL;
 979        } else {
 980                frame = frames;
 981                frame->bh = NULL;                       /* for dx_release() */
 982                frame->at = (struct dx_entry *)frames;  /* hack for zero entry*/
 983                dx_set_block(frame->at, 0);             /* dx_root block is 0 */
 984        }
 985        hash = hinfo.hash;
 986        do {
 987                block = dx_get_block(frame->at);
 988                if (!(bh = ext3_bread (NULL,dir, block, 0, err)))
 989                        goto errout;
 990                de = (struct ext3_dir_entry_2 *) bh->b_data;
 991                top = (struct ext3_dir_entry_2 *) ((char *) de + sb->s_blocksize -
 992                                       EXT3_DIR_REC_LEN(0));
 993                for (; de < top; de = ext3_next_entry(de))
 994                if (ext3_match (namelen, name, de)) {
 995                        if (!ext3_check_dir_entry("ext3_find_entry",
 996                                                  dir, de, bh,
 997                                  (block<<EXT3_BLOCK_SIZE_BITS(sb))
 998                                          +((char *)de - bh->b_data))) {
 999                                brelse (bh);
1000                                *err = ERR_BAD_DX_DIR;
1001                                goto errout;
1002                        }
1003                        *res_dir = de;
1004                        dx_release (frames);
1005                        return bh;
1006                }
1007                brelse (bh);
1008                /* Check to see if we should continue to search */
1009                retval = ext3_htree_next_block(dir, hash, frame,
1010                                               frames, NULL);
1011                if (retval < 0) {
1012                        ext3_warning(sb, __FUNCTION__,
1013                             "error reading index page in directory #%lu",
1014                             dir->i_ino);
1015                        *err = retval;
1016                        goto errout;
1017                }
1018        } while (retval == 1);
1019
1020        *err = -ENOENT;
1021errout:
1022        dxtrace(printk("%s not found\n", name));
1023        dx_release (frames);
1024        return NULL;
1025}
1026
1027static struct dentry *ext3_lookup(struct inode * dir, struct dentry *dentry, struct nameidata *nd)
1028{
1029        struct inode * inode;
1030        struct ext3_dir_entry_2 * de;
1031        struct buffer_head * bh;
1032
1033        if (dentry->d_name.len > EXT3_NAME_LEN)
1034                return ERR_PTR(-ENAMETOOLONG);
1035
1036        bh = ext3_find_entry(dentry, &de);
1037        inode = NULL;
1038        if (bh) {
1039                unsigned long ino = le32_to_cpu(de->inode);
1040                brelse (bh);
1041                if (!ext3_valid_inum(dir->i_sb, ino)) {
1042                        ext3_error(dir->i_sb, "ext3_lookup",
1043                                   "bad inode number: %lu", ino);
1044                        inode = NULL;
1045                } else
1046                        inode = iget(dir->i_sb, ino);
1047
1048                if (!inode)
1049                        return ERR_PTR(-EACCES);
1050
1051                if (is_bad_inode(inode)) {
1052                        iput(inode);
1053                        return ERR_PTR(-ENOENT);
1054                }
1055        }
1056        return d_splice_alias(inode, dentry);
1057}
1058
1059
1060struct dentry *ext3_get_parent(struct dentry *child)
1061{
1062        unsigned long ino;
1063        struct dentry *parent;
1064        struct inode *inode;
1065        struct dentry dotdot;
1066        struct ext3_dir_entry_2 * de;
1067        struct buffer_head *bh;
1068
1069        dotdot.d_name.name = "..";
1070        dotdot.d_name.len = 2;
1071        dotdot.d_parent = child; /* confusing, isn't it! */
1072
1073        bh = ext3_find_entry(&dotdot, &de);
1074        inode = NULL;
1075        if (!bh)
1076                return ERR_PTR(-ENOENT);
1077        ino = le32_to_cpu(de->inode);
1078        brelse(bh);
1079
1080        if (!ext3_valid_inum(child->d_inode->i_sb, ino)) {
1081                ext3_error(child->d_inode->i_sb, "ext3_get_parent",
1082                           "bad inode number: %lu", ino);
1083                inode = NULL;
1084        } else
1085                inode = iget(child->d_inode->i_sb, ino);
1086
1087        if (!inode)
1088                return ERR_PTR(-EACCES);
1089
1090        if (is_bad_inode(inode)) {
1091                iput(inode);
1092                return ERR_PTR(-ENOENT);
1093        }
1094
1095        parent = d_alloc_anon(inode);
1096        if (!parent) {
1097                iput(inode);
1098                parent = ERR_PTR(-ENOMEM);
1099        }
1100        return parent;
1101}
1102
1103#define S_SHIFT 12
1104static unsigned char ext3_type_by_mode[S_IFMT >> S_SHIFT] = {
1105        [S_IFREG >> S_SHIFT]    = EXT3_FT_REG_FILE,
1106        [S_IFDIR >> S_SHIFT]    = EXT3_FT_DIR,
1107        [S_IFCHR >> S_SHIFT]    = EXT3_FT_CHRDEV,
1108        [S_IFBLK >> S_SHIFT]    = EXT3_FT_BLKDEV,
1109        [S_IFIFO >> S_SHIFT]    = EXT3_FT_FIFO,
1110        [S_IFSOCK >> S_SHIFT]   = EXT3_FT_SOCK,
1111        [S_IFLNK >> S_SHIFT]    = EXT3_FT_SYMLINK,
1112};
1113
1114static inline void ext3_set_de_type(struct super_block *sb,
1115                                struct ext3_dir_entry_2 *de,
1116                                umode_t mode) {
1117        if (EXT3_HAS_INCOMPAT_FEATURE(sb, EXT3_FEATURE_INCOMPAT_FILETYPE))
1118                de->file_type = ext3_type_by_mode[(mode & S_IFMT)>>S_SHIFT];
1119}
1120
1121/*
1122 * Move count entries from end of map between two memory locations.
1123 * Returns pointer to last entry moved.
1124 */
1125static struct ext3_dir_entry_2 *
1126dx_move_dirents(char *from, char *to, struct dx_map_entry *map, int count)
1127{
1128        unsigned rec_len = 0;
1129
1130        while (count--) {
1131                struct ext3_dir_entry_2 *de = (struct ext3_dir_entry_2 *) (from + map->offs);
1132                rec_len = EXT3_DIR_REC_LEN(de->name_len);
1133                memcpy (to, de, rec_len);
1134                ((struct ext3_dir_entry_2 *) to)->rec_len =
1135                                ext3_rec_len_to_disk(rec_len);
1136                de->inode = 0;
1137                map++;
1138                to += rec_len;
1139        }
1140        return (struct ext3_dir_entry_2 *) (to - rec_len);
1141}
1142
1143/*
1144 * Compact each dir entry in the range to the minimal rec_len.
1145 * Returns pointer to last entry in range.
1146 */
1147static struct ext3_dir_entry_2* dx_pack_dirents(char *base, int size)
1148{
1149        struct ext3_dir_entry_2 *next, *to, *prev, *de = (struct ext3_dir_entry_2 *) base;
1150        unsigned rec_len = 0;
1151
1152        prev = to = de;
1153        while ((char*)de < base + size) {
1154                next = ext3_next_entry(de);
1155                if (de->inode && de->name_len) {
1156                        rec_len = EXT3_DIR_REC_LEN(de->name_len);
1157                        if (de > to)
1158                                memmove(to, de, rec_len);
1159                        to->rec_len = ext3_rec_len_to_disk(rec_len);
1160                        prev = to;
1161                        to = (struct ext3_dir_entry_2 *) (((char *) to) + rec_len);
1162                }
1163                de = next;
1164        }
1165        return prev;
1166}
1167
1168/*
1169 * Split a full leaf block to make room for a new dir entry.
1170 * Allocate a new block, and move entries so that they are approx. equally full.
1171 * Returns pointer to de in block into which the new entry will be inserted.
1172 */
1173static struct ext3_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
1174                        struct buffer_head **bh,struct dx_frame *frame,
1175                        struct dx_hash_info *hinfo, int *error)
1176{
1177        unsigned blocksize = dir->i_sb->s_blocksize;
1178        unsigned count, continued;
1179        struct buffer_head *bh2;
1180        u32 newblock;
1181        u32 hash2;
1182        struct dx_map_entry *map;
1183        char *data1 = (*bh)->b_data, *data2;
1184        unsigned split, move, size, i;
1185        struct ext3_dir_entry_2 *de = NULL, *de2;
1186        int     err = 0;
1187
1188        bh2 = ext3_append (handle, dir, &newblock, &err);
1189        if (!(bh2)) {
1190                brelse(*bh);
1191                *bh = NULL;
1192                goto errout;
1193        }
1194
1195        BUFFER_TRACE(*bh, "get_write_access");
1196        err = ext3_journal_get_write_access(handle, *bh);
1197        if (err)
1198                goto journal_error;
1199
1200        BUFFER_TRACE(frame->bh, "get_write_access");
1201        err = ext3_journal_get_write_access(handle, frame->bh);
1202        if (err)
1203                goto journal_error;
1204
1205        data2 = bh2->b_data;
1206
1207        /* create map in the end of data2 block */
1208        map = (struct dx_map_entry *) (data2 + blocksize);
1209        count = dx_make_map ((struct ext3_dir_entry_2 *) data1,
1210                             blocksize, hinfo, map);
1211        map -= count;
1212        dx_sort_map (map, count);
1213        /* Split the existing block in the middle, size-wise */
1214        size = 0;
1215        move = 0;
1216        for (i = count-1; i >= 0; i--) {
1217                /* is more than half of this entry in 2nd half of the block? */
1218                if (size + map[i].size/2 > blocksize/2)
1219                        break;
1220                size += map[i].size;
1221                move++;
1222        }
1223        /* map index at which we will split */
1224        split = count - move;
1225        hash2 = map[split].hash;
1226        continued = hash2 == map[split - 1].hash;
1227        dxtrace(printk("Split block %i at %x, %i/%i\n",
1228                dx_get_block(frame->at), hash2, split, count-split));
1229
1230        /* Fancy dance to stay within two buffers */
1231        de2 = dx_move_dirents(data1, data2, map + split, count - split);
1232        de = dx_pack_dirents(data1,blocksize);
1233        de->rec_len = ext3_rec_len_to_disk(data1 + blocksize - (char *) de);
1234        de2->rec_len = ext3_rec_len_to_disk(data2 + blocksize - (char *) de2);
1235        dxtrace(dx_show_leaf (hinfo, (struct ext3_dir_entry_2 *) data1, blocksize, 1));
1236        dxtrace(dx_show_leaf (hinfo, (struct ext3_dir_entry_2 *) data2, blocksize, 1));
1237
1238        /* Which block gets the new entry? */
1239        if (hinfo->hash >= hash2)
1240        {
1241                swap(*bh, bh2);
1242                de = de2;
1243        }
1244        dx_insert_block (frame, hash2 + continued, newblock);
1245        err = ext3_journal_dirty_metadata (handle, bh2);
1246        if (err)
1247                goto journal_error;
1248        err = ext3_journal_dirty_metadata (handle, frame->bh);
1249        if (err)
1250                goto journal_error;
1251        brelse (bh2);
1252        dxtrace(dx_show_index ("frame", frame->entries));
1253        return de;
1254
1255journal_error:
1256        brelse(*bh);
1257        brelse(bh2);
1258        *bh = NULL;
1259        ext3_std_error(dir->i_sb, err);
1260errout:
1261        *error = err;
1262        return NULL;
1263}
1264
1265
1266/*
1267 * Add a new entry into a directory (leaf) block.  If de is non-NULL,
1268 * it points to a directory entry which is guaranteed to be large
1269 * enough for new directory entry.  If de is NULL, then
1270 * add_dirent_to_buf will attempt search the directory block for
1271 * space.  It will return -ENOSPC if no space is available, and -EIO
1272 * and -EEXIST if directory entry already exists.
1273 *
1274 * NOTE!  bh is NOT released in the case where ENOSPC is returned.  In
1275 * all other cases bh is released.
1276 */
1277static int add_dirent_to_buf(handle_t *handle, struct dentry *dentry,
1278                             struct inode *inode, struct ext3_dir_entry_2 *de,
1279                             struct buffer_head * bh)
1280{
1281        struct inode    *dir = dentry->d_parent->d_inode;
1282        const char      *name = dentry->d_name.name;
1283        int             namelen = dentry->d_name.len;
1284        unsigned long   offset = 0;
1285        unsigned short  reclen;
1286        int             nlen, rlen, err;
1287        char            *top;
1288
1289        reclen = EXT3_DIR_REC_LEN(namelen);
1290        if (!de) {
1291                de = (struct ext3_dir_entry_2 *)bh->b_data;
1292                top = bh->b_data + dir->i_sb->s_blocksize - reclen;
1293                while ((char *) de <= top) {
1294                        if (!ext3_check_dir_entry("ext3_add_entry", dir, de,
1295                                                  bh, offset)) {
1296                                brelse (bh);
1297                                return -EIO;
1298                        }
1299                        if (ext3_match (namelen, name, de)) {
1300                                brelse (bh);
1301                                return -EEXIST;
1302                        }
1303                        nlen = EXT3_DIR_REC_LEN(de->name_len);
1304                        rlen = ext3_rec_len_from_disk(de->rec_len);
1305                        if ((de->inode? rlen - nlen: rlen) >= reclen)
1306                                break;
1307                        de = (struct ext3_dir_entry_2 *)((char *)de + rlen);
1308                        offset += rlen;
1309                }
1310                if ((char *) de > top)
1311                        return -ENOSPC;
1312        }
1313        BUFFER_TRACE(bh, "get_write_access");
1314        err = ext3_journal_get_write_access(handle, bh);
1315        if (err) {
1316                ext3_std_error(dir->i_sb, err);
1317                brelse(bh);
1318                return err;
1319        }
1320
1321        /* By now the buffer is marked for journaling */
1322        nlen = EXT3_DIR_REC_LEN(de->name_len);
1323        rlen = ext3_rec_len_from_disk(de->rec_len);
1324        if (de->inode) {
1325                struct ext3_dir_entry_2 *de1 = (struct ext3_dir_entry_2 *)((char *)de + nlen);
1326                de1->rec_len = ext3_rec_len_to_disk(rlen - nlen);
1327                de->rec_len = ext3_rec_len_to_disk(nlen);
1328                de = de1;
1329        }
1330        de->file_type = EXT3_FT_UNKNOWN;
1331        if (inode) {
1332                de->inode = cpu_to_le32(inode->i_ino);
1333                ext3_set_de_type(dir->i_sb, de, inode->i_mode);
1334        } else
1335                de->inode = 0;
1336        de->name_len = namelen;
1337        memcpy (de->name, name, namelen);
1338        /*
1339         * XXX shouldn't update any times until successful
1340         * completion of syscall, but too many callers depend
1341         * on this.
1342         *
1343         * XXX similarly, too many callers depend on
1344         * ext3_new_inode() setting the times, but error
1345         * recovery deletes the inode, so the worst that can
1346         * happen is that the times are slightly out of date
1347         * and/or different from the directory change time.
1348         */
1349        dir->i_mtime = dir->i_ctime = CURRENT_TIME_SEC;
1350        ext3_update_dx_flag(dir);
1351        dir->i_version++;
1352        ext3_mark_inode_dirty(handle, dir);
1353        BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
1354        err = ext3_journal_dirty_metadata(handle, bh);
1355        if (err)
1356                ext3_std_error(dir->i_sb, err);
1357        brelse(bh);
1358        return 0;
1359}
1360
1361/*
1362 * This converts a one block unindexed directory to a 3 block indexed
1363 * directory, and adds the dentry to the indexed directory.
1364 */
1365static int make_indexed_dir(handle_t *handle, struct dentry *dentry,
1366                            struct inode *inode, struct buffer_head *bh)
1367{
1368        struct inode    *dir = dentry->d_parent->d_inode;
1369        const char      *name = dentry->d_name.name;
1370        int             namelen = dentry->d_name.len;
1371        struct buffer_head *bh2;
1372        struct dx_root  *root;
1373        struct dx_frame frames[2], *frame;
1374        struct dx_entry *entries;
1375        struct ext3_dir_entry_2 *de, *de2;
1376        char            *data1, *top;
1377        unsigned        len;
1378        int             retval;
1379        unsigned        blocksize;
1380        struct dx_hash_info hinfo;
1381        u32             block;
1382        struct fake_dirent *fde;
1383
1384        blocksize =  dir->i_sb->s_blocksize;
1385        dxtrace(printk("Creating index\n"));
1386        retval = ext3_journal_get_write_access(handle, bh);
1387        if (retval) {
1388                ext3_std_error(dir->i_sb, retval);
1389                brelse(bh);
1390                return retval;
1391        }
1392        root = (struct dx_root *) bh->b_data;
1393
1394        bh2 = ext3_append (handle, dir, &block, &retval);
1395        if (!(bh2)) {
1396                brelse(bh);
1397                return retval;
1398        }
1399        EXT3_I(dir)->i_flags |= EXT3_INDEX_FL;
1400        data1 = bh2->b_data;
1401
1402        /* The 0th block becomes the root, move the dirents out */
1403        fde = &root->dotdot;
1404        de = (struct ext3_dir_entry_2 *)((char *)fde +
1405                        ext3_rec_len_from_disk(fde->rec_len));
1406        len = ((char *) root) + blocksize - (char *) de;
1407        memcpy (data1, de, len);
1408        de = (struct ext3_dir_entry_2 *) data1;
1409        top = data1 + len;
1410        while ((char *)(de2 = ext3_next_entry(de)) < top)
1411                de = de2;
1412        de->rec_len = ext3_rec_len_to_disk(data1 + blocksize - (char *) de);
1413        /* Initialize the root; the dot dirents already exist */
1414        de = (struct ext3_dir_entry_2 *) (&root->dotdot);
1415        de->rec_len = ext3_rec_len_to_disk(blocksize - EXT3_DIR_REC_LEN(2));
1416        memset (&root->info, 0, sizeof(root->info));
1417        root->info.info_length = sizeof(root->info);
1418        root->info.hash_version = EXT3_SB(dir->i_sb)->s_def_hash_version;
1419        entries = root->entries;
1420        dx_set_block (entries, 1);
1421        dx_set_count (entries, 1);
1422        dx_set_limit (entries, dx_root_limit(dir, sizeof(root->info)));
1423
1424        /* Initialize as for dx_probe */
1425        hinfo.hash_version = root->info.hash_version;
1426        hinfo.seed = EXT3_SB(dir->i_sb)->s_hash_seed;
1427        ext3fs_dirhash(name, namelen, &hinfo);
1428        frame = frames;
1429        frame->entries = entries;
1430        frame->at = entries;
1431        frame->bh = bh;
1432        bh = bh2;
1433        de = do_split(handle,dir, &bh, frame, &hinfo, &retval);
1434        dx_release (frames);
1435        if (!(de))
1436                return retval;
1437
1438        return add_dirent_to_buf(handle, dentry, inode, de, bh);
1439}
1440
1441/*
1442 *      ext3_add_entry()
1443 *
1444 * adds a file entry to the specified directory, using the same
1445 * semantics as ext3_find_entry(). It returns NULL if it failed.
1446 *
1447 * NOTE!! The inode part of 'de' is left at 0 - which means you
1448 * may not sleep between calling this and putting something into
1449 * the entry, as someone else might have used it while you slept.
1450 */
1451static int ext3_add_entry (handle_t *handle, struct dentry *dentry,
1452        struct inode *inode)
1453{
1454        struct inode *dir = dentry->d_parent->d_inode;
1455        unsigned long offset;
1456        struct buffer_head * bh;
1457        struct ext3_dir_entry_2 *de;
1458        struct super_block * sb;
1459        int     retval;
1460        int     dx_fallback=0;
1461        unsigned blocksize;
1462        u32 block, blocks;
1463
1464        sb = dir->i_sb;
1465        blocksize = sb->s_blocksize;
1466        if (!dentry->d_name.len)
1467                return -EINVAL;
1468        if (is_dx(dir)) {
1469                retval = ext3_dx_add_entry(handle, dentry, inode);
1470                if (!retval || (retval != ERR_BAD_DX_DIR))
1471                        return retval;
1472                EXT3_I(dir)->i_flags &= ~EXT3_INDEX_FL;
1473                dx_fallback++;
1474                ext3_mark_inode_dirty(handle, dir);
1475        }
1476        blocks = dir->i_size >> sb->s_blocksize_bits;
1477        for (block = 0, offset = 0; block < blocks; block++) {
1478                bh = ext3_bread(handle, dir, block, 0, &retval);
1479                if(!bh)
1480                        return retval;
1481                retval = add_dirent_to_buf(handle, dentry, inode, NULL, bh);
1482                if (retval != -ENOSPC)
1483                        return retval;
1484
1485                if (blocks == 1 && !dx_fallback &&
1486                    EXT3_HAS_COMPAT_FEATURE(sb, EXT3_FEATURE_COMPAT_DIR_INDEX))
1487                        return make_indexed_dir(handle, dentry, inode, bh);
1488                brelse(bh);
1489        }
1490        bh = ext3_append(handle, dir, &block, &retval);
1491        if (!bh)
1492                return retval;
1493        de = (struct ext3_dir_entry_2 *) bh->b_data;
1494        de->inode = 0;
1495        de->rec_len = ext3_rec_len_to_disk(blocksize);
1496        return add_dirent_to_buf(handle, dentry, inode, de, bh);
1497}
1498
1499/*
1500 * Returns 0 for success, or a negative error value
1501 */
1502static int ext3_dx_add_entry(handle_t *handle, struct dentry *dentry,
1503                             struct inode *inode)
1504{
1505        struct dx_frame frames[2], *frame;
1506        struct dx_entry *entries, *at;
1507        struct dx_hash_info hinfo;
1508        struct buffer_head * bh;
1509        struct inode *dir = dentry->d_parent->d_inode;
1510        struct super_block * sb = dir->i_sb;
1511        struct ext3_dir_entry_2 *de;
1512        int err;
1513
1514        frame = dx_probe(dentry, NULL, &hinfo, frames, &err);
1515        if (!frame)
1516                return err;
1517        entries = frame->entries;
1518        at = frame->at;
1519
1520        if (!(bh = ext3_bread(handle,dir, dx_get_block(frame->at), 0, &err)))
1521                goto cleanup;
1522
1523        BUFFER_TRACE(bh, "get_write_access");
1524        err = ext3_journal_get_write_access(handle, bh);
1525        if (err)
1526                goto journal_error;
1527
1528        err = add_dirent_to_buf(handle, dentry, inode, NULL, bh);
1529        if (err != -ENOSPC) {
1530                bh = NULL;
1531                goto cleanup;
1532        }
1533
1534        /* Block full, should compress but for now just split */
1535        dxtrace(printk("using %u of %u node entries\n",
1536                       dx_get_count(entries), dx_get_limit(entries)));
1537        /* Need to split index? */
1538        if (dx_get_count(entries) == dx_get_limit(entries)) {
1539                u32 newblock;
1540                unsigned icount = dx_get_count(entries);
1541                int levels = frame - frames;
1542                struct dx_entry *entries2;
1543                struct dx_node *node2;
1544                struct buffer_head *bh2;
1545
1546                if (levels && (dx_get_count(frames->entries) ==
1547                               dx_get_limit(frames->entries))) {
1548                        ext3_warning(sb, __FUNCTION__,
1549                                     "Directory index full!");
1550                        err = -ENOSPC;
1551                        goto cleanup;
1552                }
1553                bh2 = ext3_append (handle, dir, &newblock, &err);
1554                if (!(bh2))
1555                        goto cleanup;
1556                node2 = (struct dx_node *)(bh2->b_data);
1557                entries2 = node2->entries;
1558                node2->fake.rec_len = ext3_rec_len_to_disk(sb->s_blocksize);
1559                node2->fake.inode = 0;
1560                BUFFER_TRACE(frame->bh, "get_write_access");
1561                err = ext3_journal_get_write_access(handle, frame->bh);
1562                if (err)
1563                        goto journal_error;
1564                if (levels) {
1565                        unsigned icount1 = icount/2, icount2 = icount - icount1;
1566                        unsigned hash2 = dx_get_hash(entries + icount1);
1567                        dxtrace(printk("Split index %i/%i\n", icount1, icount2));
1568
1569                        BUFFER_TRACE(frame->bh, "get_write_access"); /* index root */
1570                        err = ext3_journal_get_write_access(handle,
1571                                                             frames[0].bh);
1572                        if (err)
1573                                goto journal_error;
1574
1575                        memcpy ((char *) entries2, (char *) (entries + icount1),
1576                                icount2 * sizeof(struct dx_entry));
1577                        dx_set_count (entries, icount1);
1578                        dx_set_count (entries2, icount2);
1579                        dx_set_limit (entries2, dx_node_limit(dir));
1580
1581                        /* Which index block gets the new entry? */
1582                        if (at - entries >= icount1) {
1583                                frame->at = at = at - entries - icount1 + entries2;
1584                                frame->entries = entries = entries2;
1585                                swap(frame->bh, bh2);
1586                        }
1587                        dx_insert_block (frames + 0, hash2, newblock);
1588                        dxtrace(dx_show_index ("node", frames[1].entries));
1589                        dxtrace(dx_show_index ("node",
1590                               ((struct dx_node *) bh2->b_data)->entries));
1591                        err = ext3_journal_dirty_metadata(handle, bh2);
1592                        if (err)
1593                                goto journal_error;
1594                        brelse (bh2);
1595                } else {
1596                        dxtrace(printk("Creating second level index...\n"));
1597                        memcpy((char *) entries2, (char *) entries,
1598                               icount * sizeof(struct dx_entry));
1599                        dx_set_limit(entries2, dx_node_limit(dir));
1600
1601                        /* Set up root */
1602                        dx_set_count(entries, 1);
1603                        dx_set_block(entries + 0, newblock);
1604                        ((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels = 1;
1605
1606                        /* Add new access path frame */
1607                        frame = frames + 1;
1608                        frame->at = at = at - entries + entries2;
1609                        frame->entries = entries = entries2;
1610                        frame->bh = bh2;
1611                        err = ext3_journal_get_write_access(handle,
1612                                                             frame->bh);
1613                        if (err)
1614                                goto journal_error;
1615                }
1616                ext3_journal_dirty_metadata(handle, frames[0].bh);
1617        }
1618        de = do_split(handle, dir, &bh, frame, &hinfo, &err);
1619        if (!de)
1620                goto cleanup;
1621        err = add_dirent_to_buf(handle, dentry, inode, de, bh);
1622        bh = NULL;
1623        goto cleanup;
1624
1625journal_error:
1626        ext3_std_error(dir->i_sb, err);
1627cleanup:
1628        if (bh)
1629                brelse(bh);
1630        dx_release(frames);
1631        return err;
1632}
1633
1634/*
1635 * ext3_delete_entry deletes a directory entry by merging it with the
1636 * previous entry
1637 */
1638static int ext3_delete_entry (handle_t *handle,
1639                              struct inode * dir,
1640                              struct ext3_dir_entry_2 * de_del,
1641                              struct buffer_head * bh)
1642{
1643        struct ext3_dir_entry_2 * de, * pde;
1644        int i;
1645
1646        i = 0;
1647        pde = NULL;
1648        de = (struct ext3_dir_entry_2 *) bh->b_data;
1649        while (i < bh->b_size) {
1650                if (!ext3_check_dir_entry("ext3_delete_entry", dir, de, bh, i))
1651                        return -EIO;
1652                if (de == de_del)  {
1653                        BUFFER_TRACE(bh, "get_write_access");
1654                        ext3_journal_get_write_access(handle, bh);
1655                        if (pde)
1656                                pde->rec_len = ext3_rec_len_to_disk(
1657                                        ext3_rec_len_from_disk(pde->rec_len) +
1658                                        ext3_rec_len_from_disk(de->rec_len));
1659                        else
1660                                de->inode = 0;
1661                        dir->i_version++;
1662                        BUFFER_TRACE(bh, "call ext3_journal_dirty_metadata");
1663                        ext3_journal_dirty_metadata(handle, bh);
1664                        return 0;
1665                }
1666                i += ext3_rec_len_from_disk(de->rec_len);
1667                pde = de;
1668                de = ext3_next_entry(de);
1669        }
1670        return -ENOENT;
1671}
1672
1673static int ext3_add_nondir(handle_t *handle,
1674                struct dentry *dentry, struct inode *inode)
1675{
1676        int err = ext3_add_entry(handle, dentry, inode);
1677        if (!err) {
1678                ext3_mark_inode_dirty(handle, inode);
1679                d_instantiate(dentry, inode);
1680                return 0;
1681        }
1682        drop_nlink(inode);
1683        iput(inode);
1684        return err;
1685}
1686
1687/*
1688 * By the time this is called, we already have created
1689 * the directory cache entry for the new file, but it
1690 * is so far negative - it has no inode.
1691 *
1692 * If the create succeeds, we fill in the inode information
1693 * with d_instantiate().
1694 */
1695static int ext3_create (struct inode * dir, struct dentry * dentry, int mode,
1696                struct nameidata *nd)
1697{
1698        handle_t *handle;
1699        struct inode * inode;
1700        int err, retries = 0;
1701
1702retry:
1703        handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) +
1704                                        EXT3_INDEX_EXTRA_TRANS_BLOCKS + 3 +
1705                                        2*EXT3_QUOTA_INIT_BLOCKS(dir->i_sb));
1706        if (IS_ERR(handle))
1707                return PTR_ERR(handle);
1708
1709        if (IS_DIRSYNC(dir))
1710                handle->h_sync = 1;
1711
1712        inode = ext3_new_inode (handle, dir, mode);
1713        err = PTR_ERR(inode);
1714        if (!IS_ERR(inode)) {
1715                inode->i_op = &ext3_file_inode_operations;
1716                inode->i_fop = &ext3_file_operations;
1717                ext3_set_aops(inode);
1718                err = ext3_add_nondir(handle, dentry, inode);
1719        }
1720        ext3_journal_stop(handle);
1721        if (err == -ENOSPC && ext3_should_retry_alloc(dir->i_sb, &retries))
1722                goto retry;
1723        return err;
1724}
1725
1726static int ext3_mknod (struct inode * dir, struct dentry *dentry,
1727                        int mode, dev_t rdev)
1728{
1729        handle_t *handle;
1730        struct inode *inode;
1731        int err, retries = 0;
1732
1733        if (!new_valid_dev(rdev))
1734                return -EINVAL;
1735
1736retry:
1737        handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) +
1738                                        EXT3_INDEX_EXTRA_TRANS_BLOCKS + 3 +
1739                                        2*EXT3_QUOTA_INIT_BLOCKS(dir->i_sb));
1740        if (IS_ERR(handle))
1741                return PTR_ERR(handle);
1742
1743        if (IS_DIRSYNC(dir))
1744                handle->h_sync = 1;
1745
1746        inode = ext3_new_inode (handle, dir, mode);
1747        err = PTR_ERR(inode);
1748        if (!IS_ERR(inode)) {
1749                init_special_inode(inode, inode->i_mode, rdev);
1750#ifdef CONFIG_EXT3_FS_XATTR
1751                inode->i_op = &ext3_special_inode_operations;
1752#endif
1753                err = ext3_add_nondir(handle, dentry, inode);
1754        }
1755        ext3_journal_stop(handle);
1756        if (err == -ENOSPC && ext3_should_retry_alloc(dir->i_sb, &retries))
1757                goto retry;
1758        return err;
1759}
1760
1761static int ext3_mkdir(struct inode * dir, struct dentry * dentry, int mode)
1762{
1763        handle_t *handle;
1764        struct inode * inode;
1765        struct buffer_head * dir_block;
1766        struct ext3_dir_entry_2 * de;
1767        int err, retries = 0;
1768
1769        if (dir->i_nlink >= EXT3_LINK_MAX)
1770                return -EMLINK;
1771
1772retry:
1773        handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) +
1774                                        EXT3_INDEX_EXTRA_TRANS_BLOCKS + 3 +
1775                                        2*EXT3_QUOTA_INIT_BLOCKS(dir->i_sb));
1776        if (IS_ERR(handle))
1777                return PTR_ERR(handle);
1778
1779        if (IS_DIRSYNC(dir))
1780                handle->h_sync = 1;
1781
1782        inode = ext3_new_inode (handle, dir, S_IFDIR | mode);
1783        err = PTR_ERR(inode);
1784        if (IS_ERR(inode))
1785                goto out_stop;
1786
1787        inode->i_op = &ext3_dir_inode_operations;
1788        inode->i_fop = &ext3_dir_operations;
1789        inode->i_size = EXT3_I(inode)->i_disksize = inode->i_sb->s_blocksize;
1790        dir_block = ext3_bread (handle, inode, 0, 1, &err);
1791        if (!dir_block) {
1792                drop_nlink(inode); /* is this nlink == 0? */
1793                ext3_mark_inode_dirty(handle, inode);
1794                iput (inode);
1795                goto out_stop;
1796        }
1797        BUFFER_TRACE(dir_block, "get_write_access");
1798        ext3_journal_get_write_access(handle, dir_block);
1799        de = (struct ext3_dir_entry_2 *) dir_block->b_data;
1800        de->inode = cpu_to_le32(inode->i_ino);
1801        de->name_len = 1;
1802        de->rec_len = ext3_rec_len_to_disk(EXT3_DIR_REC_LEN(de->name_len));
1803        strcpy (de->name, ".");
1804        ext3_set_de_type(dir->i_sb, de, S_IFDIR);
1805        de = ext3_next_entry(de);
1806        de->inode = cpu_to_le32(dir->i_ino);
1807        de->rec_len = ext3_rec_len_to_disk(inode->i_sb->s_blocksize -
1808                                        EXT3_DIR_REC_LEN(1));
1809        de->name_len = 2;
1810        strcpy (de->name, "..");
1811        ext3_set_de_type(dir->i_sb, de, S_IFDIR);
1812        inode->i_nlink = 2;
1813        BUFFER_TRACE(dir_block, "call ext3_journal_dirty_metadata");
1814        ext3_journal_dirty_metadata(handle, dir_block);
1815        brelse (dir_block);
1816        ext3_mark_inode_dirty(handle, inode);
1817        err = ext3_add_entry (handle, dentry, inode);
1818        if (err) {
1819                inode->i_nlink = 0;
1820                ext3_mark_inode_dirty(handle, inode);
1821                iput (inode);
1822                goto out_stop;
1823        }
1824        inc_nlink(dir);
1825        ext3_update_dx_flag(dir);
1826        ext3_mark_inode_dirty(handle, dir);
1827        d_instantiate(dentry, inode);
1828out_stop:
1829        ext3_journal_stop(handle);
1830        if (err == -ENOSPC && ext3_should_retry_alloc(dir->i_sb, &retries))
1831                goto retry;
1832        return err;
1833}
1834
1835/*
1836 * routine to check that the specified directory is empty (for rmdir)
1837 */
1838static int empty_dir (struct inode * inode)
1839{
1840        unsigned long offset;
1841        struct buffer_head * bh;
1842        struct ext3_dir_entry_2 * de, * de1;
1843        struct super_block * sb;
1844        int err = 0;
1845
1846        sb = inode->i_sb;
1847        if (inode->i_size < EXT3_DIR_REC_LEN(1) + EXT3_DIR_REC_LEN(2) ||
1848            !(bh = ext3_bread (NULL, inode, 0, 0, &err))) {
1849                if (err)
1850                        ext3_error(inode->i_sb, __FUNCTION__,
1851                                   "error %d reading directory #%lu offset 0",
1852                                   err, inode->i_ino);
1853                else
1854                        ext3_warning(inode->i_sb, __FUNCTION__,
1855                                     "bad directory (dir #%lu) - no data block",
1856                                     inode->i_ino);
1857                return 1;
1858        }
1859        de = (struct ext3_dir_entry_2 *) bh->b_data;
1860        de1 = ext3_next_entry(de);
1861        if (le32_to_cpu(de->inode) != inode->i_ino ||
1862                        !le32_to_cpu(de1->inode) ||
1863                        strcmp (".", de->name) ||
1864                        strcmp ("..", de1->name)) {
1865                ext3_warning (inode->i_sb, "empty_dir",
1866                              "bad directory (dir #%lu) - no `.' or `..'",
1867                              inode->i_ino);
1868                brelse (bh);
1869                return 1;
1870        }
1871        offset = ext3_rec_len_from_disk(de->rec_len) +
1872                        ext3_rec_len_from_disk(de1->rec_len);
1873        de = ext3_next_entry(de1);
1874        while (offset < inode->i_size ) {
1875                if (!bh ||
1876                        (void *) de >= (void *) (bh->b_data+sb->s_blocksize)) {
1877                        err = 0;
1878                        brelse (bh);
1879                        bh = ext3_bread (NULL, inode,
1880                                offset >> EXT3_BLOCK_SIZE_BITS(sb), 0, &err);
1881                        if (!bh) {
1882                                if (err)
1883                                        ext3_error(sb, __FUNCTION__,
1884                                                   "error %d reading directory"
1885                                                   " #%lu offset %lu",
1886                                                   err, inode->i_ino, offset);
1887                                offset += sb->s_blocksize;
1888                                continue;
1889                        }
1890                        de = (struct ext3_dir_entry_2 *) bh->b_data;
1891                }
1892                if (!ext3_check_dir_entry("empty_dir", inode, de, bh, offset)) {
1893                        de = (struct ext3_dir_entry_2 *)(bh->b_data +
1894                                                         sb->s_blocksize);
1895                        offset = (offset | (sb->s_blocksize - 1)) + 1;
1896                        continue;
1897                }
1898                if (le32_to_cpu(de->inode)) {
1899                        brelse (bh);
1900                        return 0;
1901                }
1902                offset += ext3_rec_len_from_disk(de->rec_len);
1903                de = ext3_next_entry(de);
1904        }
1905        brelse (bh);
1906        return 1;
1907}
1908
1909/* ext3_orphan_add() links an unlinked or truncated inode into a list of
1910 * such inodes, starting at the superblock, in case we crash before the
1911 * file is closed/deleted, or in case the inode truncate spans multiple
1912 * transactions and the last transaction is not recovered after a crash.
1913 *
1914 * At filesystem recovery time, we walk this list deleting unlinked
1915 * inodes and truncating linked inodes in ext3_orphan_cleanup().
1916 */
1917int ext3_orphan_add(handle_t *handle, struct inode *inode)
1918{
1919        struct super_block *sb = inode->i_sb;
1920        struct ext3_iloc iloc;
1921        int err = 0, rc;
1922
1923        lock_super(sb);
1924        if (!list_empty(&EXT3_I(inode)->i_orphan))
1925                goto out_unlock;
1926
1927        /* Orphan handling is only valid for files with data blocks
1928         * being truncated, or files being unlinked. */
1929
1930        /* @@@ FIXME: Observation from aviro:
1931         * I think I can trigger J_ASSERT in ext3_orphan_add().  We block
1932         * here (on lock_super()), so race with ext3_link() which might bump
1933         * ->i_nlink. For, say it, character device. Not a regular file,
1934         * not a directory, not a symlink and ->i_nlink > 0.
1935         */
1936        J_ASSERT ((S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
1937                S_ISLNK(inode->i_mode)) || inode->i_nlink == 0);
1938
1939        BUFFER_TRACE(EXT3_SB(sb)->s_sbh, "get_write_access");
1940        err = ext3_journal_get_write_access(handle, EXT3_SB(sb)->s_sbh);
1941        if (err)
1942                goto out_unlock;
1943
1944        err = ext3_reserve_inode_write(handle, inode, &iloc);
1945        if (err)
1946                goto out_unlock;
1947
1948        /* Insert this inode at the head of the on-disk orphan list... */
1949        NEXT_ORPHAN(inode) = le32_to_cpu(EXT3_SB(sb)->s_es->s_last_orphan);
1950        EXT3_SB(sb)->s_es->s_last_orphan = cpu_to_le32(inode->i_ino);
1951        err = ext3_journal_dirty_metadata(handle, EXT3_SB(sb)->s_sbh);
1952        rc = ext3_mark_iloc_dirty(handle, inode, &iloc);
1953        if (!err)
1954                err = rc;
1955
1956        /* Only add to the head of the in-memory list if all the
1957         * previous operations succeeded.  If the orphan_add is going to
1958         * fail (possibly taking the journal offline), we can't risk
1959         * leaving the inode on the orphan list: stray orphan-list
1960         * entries can cause panics at unmount time.
1961         *
1962         * This is safe: on error we're going to ignore the orphan list
1963         * anyway on the next recovery. */
1964        if (!err)
1965                list_add(&EXT3_I(inode)->i_orphan, &EXT3_SB(sb)->s_orphan);
1966
1967        jbd_debug(4, "superblock will point to %lu\n", inode->i_ino);
1968        jbd_debug(4, "orphan inode %lu will point to %d\n",
1969                        inode->i_ino, NEXT_ORPHAN(inode));
1970out_unlock:
1971        unlock_super(sb);
1972        ext3_std_error(inode->i_sb, err);
1973        return err;
1974}
1975
1976/*
1977 * ext3_orphan_del() removes an unlinked or truncated inode from the list
1978 * of such inodes stored on disk, because it is finally being cleaned up.
1979 */
1980int ext3_orphan_del(handle_t *handle, struct inode *inode)
1981{
1982        struct list_head *prev;
1983        struct ext3_inode_info *ei = EXT3_I(inode);
1984        struct ext3_sb_info *sbi;
1985        unsigned long ino_next;
1986        struct ext3_iloc iloc;
1987        int err = 0;
1988
1989        lock_super(inode->i_sb);
1990        if (list_empty(&ei->i_orphan)) {
1991                unlock_super(inode->i_sb);
1992                return 0;
1993        }
1994
1995        ino_next = NEXT_ORPHAN(inode);
1996        prev = ei->i_orphan.prev;
1997        sbi = EXT3_SB(inode->i_sb);
1998
1999        jbd_debug(4, "remove inode %lu from orphan list\n", inode->i_ino);
2000
2001        list_del_init(&ei->i_orphan);
2002
2003        /* If we're on an error path, we may not have a valid
2004         * transaction handle with which to update the orphan list on
2005         * disk, but we still need to remove the inode from the linked
2006         * list in memory. */
2007        if (!handle)
2008                goto out;
2009
2010        err = ext3_reserve_inode_write(handle, inode, &iloc);
2011        if (err)
2012                goto out_err;
2013
2014        if (prev == &sbi->s_orphan) {
2015                jbd_debug(4, "superblock will point to %lu\n", ino_next);
2016                BUFFER_TRACE(sbi->s_sbh, "get_write_access");
2017                err = ext3_journal_get_write_access(handle, sbi->s_sbh);
2018                if (err)
2019                        goto out_brelse;
2020                sbi->s_es->s_last_orphan = cpu_to_le32(ino_next);
2021                err = ext3_journal_dirty_metadata(handle, sbi->s_sbh);
2022        } else {
2023                struct ext3_iloc iloc2;
2024                struct inode *i_prev =
2025                        &list_entry(prev, struct ext3_inode_info, i_orphan)->vfs_inode;
2026
2027                jbd_debug(4, "orphan inode %lu will point to %lu\n",
2028                          i_prev->i_ino, ino_next);
2029                err = ext3_reserve_inode_write(handle, i_prev, &iloc2);
2030                if (err)
2031                        goto out_brelse;
2032                NEXT_ORPHAN(i_prev) = ino_next;
2033                err = ext3_mark_iloc_dirty(handle, i_prev, &iloc2);
2034        }
2035        if (err)
2036                goto out_brelse;
2037        NEXT_ORPHAN(inode) = 0;
2038        err = ext3_mark_iloc_dirty(handle, inode, &iloc);
2039
2040out_err:
2041        ext3_std_error(inode->i_sb, err);
2042out:
2043        unlock_super(inode->i_sb);
2044        return err;
2045
2046out_brelse:
2047        brelse(iloc.bh);
2048        goto out_err;
2049}
2050
2051static int ext3_rmdir (struct inode * dir, struct dentry *dentry)
2052{
2053        int retval;
2054        struct inode * inode;
2055        struct buffer_head * bh;
2056        struct ext3_dir_entry_2 * de;
2057        handle_t *handle;
2058
2059        /* Initialize quotas before so that eventual writes go in
2060         * separate transaction */
2061        DQUOT_INIT(dentry->d_inode);
2062        handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS(dir->i_sb));
2063        if (IS_ERR(handle))
2064                return PTR_ERR(handle);
2065
2066        retval = -ENOENT;
2067        bh = ext3_find_entry (dentry, &de);
2068        if (!bh)
2069                goto end_rmdir;
2070
2071        if (IS_DIRSYNC(dir))
2072                handle->h_sync = 1;
2073
2074        inode = dentry->d_inode;
2075
2076        retval = -EIO;
2077        if (le32_to_cpu(de->inode) != inode->i_ino)
2078                goto end_rmdir;
2079
2080        retval = -ENOTEMPTY;
2081        if (!empty_dir (inode))
2082                goto end_rmdir;
2083
2084        retval = ext3_delete_entry(handle, dir, de, bh);
2085        if (retval)
2086                goto end_rmdir;
2087        if (inode->i_nlink != 2)
2088                ext3_warning (inode->i_sb, "ext3_rmdir",
2089                              "empty directory has nlink!=2 (%d)",
2090                              inode->i_nlink);
2091        inode->i_version++;
2092        clear_nlink(inode);
2093        /* There's no need to set i_disksize: the fact that i_nlink is
2094         * zero will ensure that the right thing happens during any
2095         * recovery. */
2096        inode->i_size = 0;
2097        ext3_orphan_add(handle, inode);
2098        inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME_SEC;
2099        ext3_mark_inode_dirty(handle, inode);
2100        drop_nlink(dir);
2101        ext3_update_dx_flag(dir);
2102        ext3_mark_inode_dirty(handle, dir);
2103
2104end_rmdir:
2105        ext3_journal_stop(handle);
2106        brelse (bh);
2107        return retval;
2108}
2109
2110static int ext3_unlink(struct inode * dir, struct dentry *dentry)
2111{
2112        int retval;
2113        struct inode * inode;
2114        struct buffer_head * bh;
2115        struct ext3_dir_entry_2 * de;
2116        handle_t *handle;
2117
2118        /* Initialize quotas before so that eventual writes go
2119         * in separate transaction */
2120        DQUOT_INIT(dentry->d_inode);
2121        handle = ext3_journal_start(dir, EXT3_DELETE_TRANS_BLOCKS(dir->i_sb));
2122        if (IS_ERR(handle))
2123                return PTR_ERR(handle);
2124
2125        if (IS_DIRSYNC(dir))
2126                handle->h_sync = 1;
2127
2128        retval = -ENOENT;
2129        bh = ext3_find_entry (dentry, &de);
2130        if (!bh)
2131                goto end_unlink;
2132
2133        inode = dentry->d_inode;
2134
2135        retval = -EIO;
2136        if (le32_to_cpu(de->inode) != inode->i_ino)
2137                goto end_unlink;
2138
2139        if (!inode->i_nlink) {
2140                ext3_warning (inode->i_sb, "ext3_unlink",
2141                              "Deleting nonexistent file (%lu), %d",
2142                              inode->i_ino, inode->i_nlink);
2143                inode->i_nlink = 1;
2144        }
2145        retval = ext3_delete_entry(handle, dir, de, bh);
2146        if (retval)
2147                goto end_unlink;
2148        dir->i_ctime = dir->i_mtime = CURRENT_TIME_SEC;
2149        ext3_update_dx_flag(dir);
2150        ext3_mark_inode_dirty(handle, dir);
2151        drop_nlink(inode);
2152        if (!inode->i_nlink)
2153                ext3_orphan_add(handle, inode);
2154        inode->i_ctime = dir->i_ctime;
2155        ext3_mark_inode_dirty(handle, inode);
2156        retval = 0;
2157
2158end_unlink:
2159        ext3_journal_stop(handle);
2160        brelse (bh);
2161        return retval;
2162}
2163
2164static int ext3_symlink (struct inode * dir,
2165                struct dentry *dentry, const char * symname)
2166{
2167        handle_t *handle;
2168        struct inode * inode;
2169        int l, err, retries = 0;
2170
2171        l = strlen(symname)+1;
2172        if (l > dir->i_sb->s_blocksize)
2173                return -ENAMETOOLONG;
2174
2175retry:
2176        handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) +
2177                                        EXT3_INDEX_EXTRA_TRANS_BLOCKS + 5 +
2178                                        2*EXT3_QUOTA_INIT_BLOCKS(dir->i_sb));
2179        if (IS_ERR(handle))
2180                return PTR_ERR(handle);
2181
2182        if (IS_DIRSYNC(dir))
2183                handle->h_sync = 1;
2184
2185        inode = ext3_new_inode (handle, dir, S_IFLNK|S_IRWXUGO);
2186        err = PTR_ERR(inode);
2187        if (IS_ERR(inode))
2188                goto out_stop;
2189
2190        if (l > sizeof (EXT3_I(inode)->i_data)) {
2191                inode->i_op = &ext3_symlink_inode_operations;
2192                ext3_set_aops(inode);
2193                /*
2194                 * page_symlink() calls into ext3_prepare/commit_write.
2195                 * We have a transaction open.  All is sweetness.  It also sets
2196                 * i_size in generic_commit_write().
2197                 */
2198                err = __page_symlink(inode, symname, l,
2199                                mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS);
2200                if (err) {
2201                        drop_nlink(inode);
2202                        ext3_mark_inode_dirty(handle, inode);
2203                        iput (inode);
2204                        goto out_stop;
2205                }
2206        } else {
2207                inode->i_op = &ext3_fast_symlink_inode_operations;
2208                memcpy((char*)&EXT3_I(inode)->i_data,symname,l);
2209                inode->i_size = l-1;
2210        }
2211        EXT3_I(inode)->i_disksize = inode->i_size;
2212        err = ext3_add_nondir(handle, dentry, inode);
2213out_stop:
2214        ext3_journal_stop(handle);
2215        if (err == -ENOSPC && ext3_should_retry_alloc(dir->i_sb, &retries))
2216                goto retry;
2217        return err;
2218}
2219
2220static int ext3_link (struct dentry * old_dentry,
2221                struct inode * dir, struct dentry *dentry)
2222{
2223        handle_t *handle;
2224        struct inode *inode = old_dentry->d_inode;
2225        int err, retries = 0;
2226
2227        if (inode->i_nlink >= EXT3_LINK_MAX)
2228                return -EMLINK;
2229        /*
2230         * Return -ENOENT if we've raced with unlink and i_nlink is 0.  Doing
2231         * otherwise has the potential to corrupt the orphan inode list.
2232         */
2233        if (inode->i_nlink == 0)
2234                return -ENOENT;
2235
2236retry:
2237        handle = ext3_journal_start(dir, EXT3_DATA_TRANS_BLOCKS(dir->i_sb) +
2238                                        EXT3_INDEX_EXTRA_TRANS_BLOCKS);
2239        if (IS_ERR(handle))
2240                return PTR_ERR(handle);
2241
2242        if (IS_DIRSYNC(dir))
2243                handle->h_sync = 1;
2244
2245        inode->i_ctime = CURRENT_TIME_SEC;
2246        inc_nlink(inode);
2247        atomic_inc(&inode->i_count);
2248
2249        err = ext3_add_nondir(handle, dentry, inode);
2250        ext3_journal_stop(handle);
2251        if (err == -ENOSPC && ext3_should_retry_alloc(dir->i_sb, &retries))
2252                goto retry;
2253        return err;
2254}
2255
2256#define PARENT_INO(buffer) \
2257        (ext3_next_entry((struct ext3_dir_entry_2 *)(buffer))->inode)
2258
2259/*
2260 * Anybody can rename anything with this: the permission checks are left to the
2261 * higher-level routines.
2262 */
2263static int ext3_rename (struct inode * old_dir, struct dentry *old_dentry,
2264                           struct inode * new_dir,struct dentry *new_dentry)
2265{
2266        handle_t *handle;
2267        struct inode * old_inode, * new_inode;
2268        struct buffer_head * old_bh, * new_bh, * dir_bh;
2269        struct ext3_dir_entry_2 * old_de, * new_de;
2270        int retval;
2271
2272        old_bh = new_bh = dir_bh = NULL;
2273
2274        /* Initialize quotas before so that eventual writes go
2275         * in separate transaction */
2276        if (new_dentry->d_inode)
2277                DQUOT_INIT(new_dentry->d_inode);
2278        handle = ext3_journal_start(old_dir, 2 *
2279                                        EXT3_DATA_TRANS_BLOCKS(old_dir->i_sb) +
2280                                        EXT3_INDEX_EXTRA_TRANS_BLOCKS + 2);
2281        if (IS_ERR(handle))
2282                return PTR_ERR(handle);
2283
2284        if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir))
2285                handle->h_sync = 1;
2286
2287        old_bh = ext3_find_entry (old_dentry, &old_de);
2288        /*
2289         *  Check for inode number is _not_ due to possible IO errors.
2290         *  We might rmdir the source, keep it as pwd of some process
2291         *  and merrily kill the link to whatever was created under the
2292         *  same name. Goodbye sticky bit ;-<
2293         */
2294        old_inode = old_dentry->d_inode;
2295        retval = -ENOENT;
2296        if (!old_bh || le32_to_cpu(old_de->inode) != old_inode->i_ino)
2297                goto end_rename;
2298
2299        new_inode = new_dentry->d_inode;
2300        new_bh = ext3_find_entry (new_dentry, &new_de);
2301        if (new_bh) {
2302                if (!new_inode) {
2303                        brelse (new_bh);
2304                        new_bh = NULL;
2305                }
2306        }
2307        if (S_ISDIR(old_inode->i_mode)) {
2308                if (new_inode) {
2309                        retval = -ENOTEMPTY;
2310                        if (!empty_dir (new_inode))
2311                                goto end_rename;
2312                }
2313                retval = -EIO;
2314                dir_bh = ext3_bread (handle, old_inode, 0, 0, &retval);
2315                if (!dir_bh)
2316                        goto end_rename;
2317                if (le32_to_cpu(PARENT_INO(dir_bh->b_data)) != old_dir->i_ino)
2318                        goto end_rename;
2319                retval = -EMLINK;
2320                if (!new_inode && new_dir!=old_dir &&
2321                                new_dir->i_nlink >= EXT3_LINK_MAX)
2322                        goto end_rename;
2323        }
2324        if (!new_bh) {
2325                retval = ext3_add_entry (handle, new_dentry, old_inode);
2326                if (retval)
2327                        goto end_rename;
2328        } else {
2329                BUFFER_TRACE(new_bh, "get write access");
2330                ext3_journal_get_write_access(handle, new_bh);
2331                new_de->inode = cpu_to_le32(old_inode->i_ino);
2332                if (EXT3_HAS_INCOMPAT_FEATURE(new_dir->i_sb,
2333                                              EXT3_FEATURE_INCOMPAT_FILETYPE))
2334                        new_de->file_type = old_de->file_type;
2335                new_dir->i_version++;
2336                BUFFER_TRACE(new_bh, "call ext3_journal_dirty_metadata");
2337                ext3_journal_dirty_metadata(handle, new_bh);
2338                brelse(new_bh);
2339                new_bh = NULL;
2340        }
2341
2342        /*
2343         * Like most other Unix systems, set the ctime for inodes on a
2344         * rename.
2345         */
2346        old_inode->i_ctime = CURRENT_TIME_SEC;
2347        ext3_mark_inode_dirty(handle, old_inode);
2348
2349        /*
2350         * ok, that's it
2351         */
2352        if (le32_to_cpu(old_de->inode) != old_inode->i_ino ||
2353            old_de->name_len != old_dentry->d_name.len ||
2354            strncmp(old_de->name, old_dentry->d_name.name, old_de->name_len) ||
2355            (retval = ext3_delete_entry(handle, old_dir,
2356                                        old_de, old_bh)) == -ENOENT) {
2357                /* old_de could have moved from under us during htree split, so
2358                 * make sure that we are deleting the right entry.  We might
2359                 * also be pointing to a stale entry in the unused part of
2360                 * old_bh so just checking inum and the name isn't enough. */
2361                struct buffer_head *old_bh2;
2362                struct ext3_dir_entry_2 *old_de2;
2363
2364                old_bh2 = ext3_find_entry(old_dentry, &old_de2);
2365                if (old_bh2) {
2366                        retval = ext3_delete_entry(handle, old_dir,
2367                                                   old_de2, old_bh2);
2368                        brelse(old_bh2);
2369                }
2370        }
2371        if (retval) {
2372                ext3_warning(old_dir->i_sb, "ext3_rename",
2373                                "Deleting old file (%lu), %d, error=%d",
2374                                old_dir->i_ino, old_dir->i_nlink, retval);
2375        }
2376
2377        if (new_inode) {
2378                drop_nlink(new_inode);
2379                new_inode->i_ctime = CURRENT_TIME_SEC;
2380        }
2381        old_dir->i_ctime = old_dir->i_mtime = CURRENT_TIME_SEC;
2382        ext3_update_dx_flag(old_dir);
2383        if (dir_bh) {
2384                BUFFER_TRACE(dir_bh, "get_write_access");
2385                ext3_journal_get_write_access(handle, dir_bh);
2386                PARENT_INO(dir_bh->b_data) = cpu_to_le32(new_dir->i_ino);
2387                BUFFER_TRACE(dir_bh, "call ext3_journal_dirty_metadata");
2388                ext3_journal_dirty_metadata(handle, dir_bh);
2389                drop_nlink(old_dir);
2390                if (new_inode) {
2391                        drop_nlink(new_inode);
2392                } else {
2393                        inc_nlink(new_dir);
2394                        ext3_update_dx_flag(new_dir);
2395                        ext3_mark_inode_dirty(handle, new_dir);
2396                }
2397        }
2398        ext3_mark_inode_dirty(handle, old_dir);
2399        if (new_inode) {
2400                ext3_mark_inode_dirty(handle, new_inode);
2401                if (!new_inode->i_nlink)
2402                        ext3_orphan_add(handle, new_inode);
2403        }
2404        retval = 0;
2405
2406end_rename:
2407        brelse (dir_bh);
2408        brelse (old_bh);
2409        brelse (new_bh);
2410        ext3_journal_stop(handle);
2411        return retval;
2412}
2413
2414/*
2415 * directories can handle most operations...
2416 */
2417const struct inode_operations ext3_dir_inode_operations = {
2418        .create         = ext3_create,
2419        .lookup         = ext3_lookup,
2420        .link           = ext3_link,
2421        .unlink         = ext3_unlink,
2422        .symlink        = ext3_symlink,
2423        .mkdir          = ext3_mkdir,
2424        .rmdir          = ext3_rmdir,
2425        .mknod          = ext3_mknod,
2426        .rename         = ext3_rename,
2427        .setattr        = ext3_setattr,
2428#ifdef CONFIG_EXT3_FS_XATTR
2429        .setxattr       = generic_setxattr,
2430        .getxattr       = generic_getxattr,
2431        .listxattr      = ext3_listxattr,
2432        .removexattr    = generic_removexattr,
2433#endif
2434        .permission     = ext3_permission,
2435};
2436
2437const struct inode_operations ext3_special_inode_operations = {
2438        .setattr        = ext3_setattr,
2439#ifdef CONFIG_EXT3_FS_XATTR
2440        .setxattr       = generic_setxattr,
2441        .getxattr       = generic_getxattr,
2442        .listxattr      = ext3_listxattr,
2443        .removexattr    = generic_removexattr,
2444#endif
2445        .permission     = ext3_permission,
2446};
2447