linux/fs/ocfs2/namei.c
<<
>>
Prefs
   1/* -*- mode: c; c-basic-offset: 8; -*-
   2 * vim: noexpandtab sw=8 ts=8 sts=0:
   3 *
   4 * namei.c
   5 *
   6 * Create and rename file, directory, symlinks
   7 *
   8 * Copyright (C) 2002, 2004 Oracle.  All rights reserved.
   9 *
  10 *  Portions of this code from linux/fs/ext3/dir.c
  11 *
  12 *  Copyright (C) 1992, 1993, 1994, 1995
  13 *  Remy Card (card@masi.ibp.fr)
  14 *  Laboratoire MASI - Institut Blaise pascal
  15 *  Universite Pierre et Marie Curie (Paris VI)
  16 *
  17 *   from
  18 *
  19 *   linux/fs/minix/dir.c
  20 *
  21 *   Copyright (C) 1991, 1992 Linux Torvalds
  22 *
  23 * This program is free software; you can redistribute it and/or
  24 * modify it under the terms of the GNU General Public
  25 * License as published by the Free Software Foundation; either
  26 * version 2 of the License, or (at your option) any later version.
  27 *
  28 * This program is distributed in the hope that it will be useful,
  29 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  30 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  31 * General Public License for more details.
  32 *
  33 * You should have received a copy of the GNU General Public
  34 * License along with this program; if not, write to the
  35 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  36 * Boston, MA 021110-1307, USA.
  37 */
  38
  39#include <linux/fs.h>
  40#include <linux/types.h>
  41#include <linux/slab.h>
  42#include <linux/highmem.h>
  43#include <linux/quotaops.h>
  44
  45#define MLOG_MASK_PREFIX ML_NAMEI
  46#include <cluster/masklog.h>
  47
  48#include "ocfs2.h"
  49
  50#include "alloc.h"
  51#include "dcache.h"
  52#include "dir.h"
  53#include "dlmglue.h"
  54#include "extent_map.h"
  55#include "file.h"
  56#include "inode.h"
  57#include "journal.h"
  58#include "namei.h"
  59#include "suballoc.h"
  60#include "super.h"
  61#include "symlink.h"
  62#include "sysfile.h"
  63#include "uptodate.h"
  64#include "xattr.h"
  65#include "acl.h"
  66
  67#include "buffer_head_io.h"
  68
  69static int ocfs2_mknod_locked(struct ocfs2_super *osb,
  70                              struct inode *dir,
  71                              struct inode *inode,
  72                              dev_t dev,
  73                              struct buffer_head **new_fe_bh,
  74                              struct buffer_head *parent_fe_bh,
  75                              handle_t *handle,
  76                              struct ocfs2_alloc_context *inode_ac);
  77
  78static int ocfs2_prepare_orphan_dir(struct ocfs2_super *osb,
  79                                    struct inode **ret_orphan_dir,
  80                                    u64 blkno,
  81                                    char *name,
  82                                    struct ocfs2_dir_lookup_result *lookup);
  83
  84static int ocfs2_orphan_add(struct ocfs2_super *osb,
  85                            handle_t *handle,
  86                            struct inode *inode,
  87                            struct ocfs2_dinode *fe,
  88                            char *name,
  89                            struct ocfs2_dir_lookup_result *lookup,
  90                            struct inode *orphan_dir_inode);
  91
  92static int ocfs2_create_symlink_data(struct ocfs2_super *osb,
  93                                     handle_t *handle,
  94                                     struct inode *inode,
  95                                     const char *symname);
  96
  97/* An orphan dir name is an 8 byte value, printed as a hex string */
  98#define OCFS2_ORPHAN_NAMELEN ((int)(2 * sizeof(u64)))
  99
 100static struct dentry *ocfs2_lookup(struct inode *dir, struct dentry *dentry,
 101                                   struct nameidata *nd)
 102{
 103        int status;
 104        u64 blkno;
 105        struct inode *inode = NULL;
 106        struct dentry *ret;
 107        struct ocfs2_inode_info *oi;
 108
 109        mlog_entry("(0x%p, 0x%p, '%.*s')\n", dir, dentry,
 110                   dentry->d_name.len, dentry->d_name.name);
 111
 112        if (dentry->d_name.len > OCFS2_MAX_FILENAME_LEN) {
 113                ret = ERR_PTR(-ENAMETOOLONG);
 114                goto bail;
 115        }
 116
 117        mlog(0, "find name %.*s in directory %llu\n", dentry->d_name.len,
 118             dentry->d_name.name, (unsigned long long)OCFS2_I(dir)->ip_blkno);
 119
 120        status = ocfs2_inode_lock_nested(dir, NULL, 0, OI_LS_PARENT);
 121        if (status < 0) {
 122                if (status != -ENOENT)
 123                        mlog_errno(status);
 124                ret = ERR_PTR(status);
 125                goto bail;
 126        }
 127
 128        status = ocfs2_lookup_ino_from_name(dir, dentry->d_name.name,
 129                                            dentry->d_name.len, &blkno);
 130        if (status < 0)
 131                goto bail_add;
 132
 133        inode = ocfs2_iget(OCFS2_SB(dir->i_sb), blkno, 0, 0);
 134        if (IS_ERR(inode)) {
 135                ret = ERR_PTR(-EACCES);
 136                goto bail_unlock;
 137        }
 138
 139        oi = OCFS2_I(inode);
 140        /* Clear any orphaned state... If we were able to look up the
 141         * inode from a directory, it certainly can't be orphaned. We
 142         * might have the bad state from a node which intended to
 143         * orphan this inode but crashed before it could commit the
 144         * unlink. */
 145        spin_lock(&oi->ip_lock);
 146        oi->ip_flags &= ~OCFS2_INODE_MAYBE_ORPHANED;
 147        spin_unlock(&oi->ip_lock);
 148
 149bail_add:
 150        dentry->d_op = &ocfs2_dentry_ops;
 151        ret = d_splice_alias(inode, dentry);
 152
 153        if (inode) {
 154                /*
 155                 * If d_splice_alias() finds a DCACHE_DISCONNECTED
 156                 * dentry, it will d_move() it on top of ourse. The
 157                 * return value will indicate this however, so in
 158                 * those cases, we switch them around for the locking
 159                 * code.
 160                 *
 161                 * NOTE: This dentry already has ->d_op set from
 162                 * ocfs2_get_parent() and ocfs2_get_dentry()
 163                 */
 164                if (ret)
 165                        dentry = ret;
 166
 167                status = ocfs2_dentry_attach_lock(dentry, inode,
 168                                                  OCFS2_I(dir)->ip_blkno);
 169                if (status) {
 170                        mlog_errno(status);
 171                        ret = ERR_PTR(status);
 172                        goto bail_unlock;
 173                }
 174        }
 175
 176bail_unlock:
 177        /* Don't drop the cluster lock until *after* the d_add --
 178         * unlink on another node will message us to remove that
 179         * dentry under this lock so otherwise we can race this with
 180         * the downconvert thread and have a stale dentry. */
 181        ocfs2_inode_unlock(dir, 0);
 182
 183bail:
 184
 185        mlog_exit_ptr(ret);
 186
 187        return ret;
 188}
 189
 190static struct inode *ocfs2_get_init_inode(struct inode *dir, int mode)
 191{
 192        struct inode *inode;
 193
 194        inode = new_inode(dir->i_sb);
 195        if (!inode) {
 196                mlog(ML_ERROR, "new_inode failed!\n");
 197                return NULL;
 198        }
 199
 200        /* populate as many fields early on as possible - many of
 201         * these are used by the support functions here and in
 202         * callers. */
 203        if (S_ISDIR(mode))
 204                inode->i_nlink = 2;
 205        else
 206                inode->i_nlink = 1;
 207        inode->i_uid = current_fsuid();
 208        if (dir->i_mode & S_ISGID) {
 209                inode->i_gid = dir->i_gid;
 210                if (S_ISDIR(mode))
 211                        mode |= S_ISGID;
 212        } else
 213                inode->i_gid = current_fsgid();
 214        inode->i_mode = mode;
 215        vfs_dq_init(inode);
 216        return inode;
 217}
 218
 219static int ocfs2_mknod(struct inode *dir,
 220                       struct dentry *dentry,
 221                       int mode,
 222                       dev_t dev)
 223{
 224        int status = 0;
 225        struct buffer_head *parent_fe_bh = NULL;
 226        handle_t *handle = NULL;
 227        struct ocfs2_super *osb;
 228        struct ocfs2_dinode *dirfe;
 229        struct buffer_head *new_fe_bh = NULL;
 230        struct inode *inode = NULL;
 231        struct ocfs2_alloc_context *inode_ac = NULL;
 232        struct ocfs2_alloc_context *data_ac = NULL;
 233        struct ocfs2_alloc_context *meta_ac = NULL;
 234        int want_clusters = 0;
 235        int want_meta = 0;
 236        int xattr_credits = 0;
 237        struct ocfs2_security_xattr_info si = {
 238                .enable = 1,
 239        };
 240        int did_quota_inode = 0;
 241        struct ocfs2_dir_lookup_result lookup = { NULL, };
 242
 243        mlog_entry("(0x%p, 0x%p, %d, %lu, '%.*s')\n", dir, dentry, mode,
 244                   (unsigned long)dev, dentry->d_name.len,
 245                   dentry->d_name.name);
 246
 247        /* get our super block */
 248        osb = OCFS2_SB(dir->i_sb);
 249
 250        status = ocfs2_inode_lock(dir, &parent_fe_bh, 1);
 251        if (status < 0) {
 252                if (status != -ENOENT)
 253                        mlog_errno(status);
 254                return status;
 255        }
 256
 257        if (S_ISDIR(mode) && (dir->i_nlink >= ocfs2_link_max(osb))) {
 258                status = -EMLINK;
 259                goto leave;
 260        }
 261
 262        dirfe = (struct ocfs2_dinode *) parent_fe_bh->b_data;
 263        if (!ocfs2_read_links_count(dirfe)) {
 264                /* can't make a file in a deleted directory. */
 265                status = -ENOENT;
 266                goto leave;
 267        }
 268
 269        status = ocfs2_check_dir_for_entry(dir, dentry->d_name.name,
 270                                           dentry->d_name.len);
 271        if (status)
 272                goto leave;
 273
 274        /* get a spot inside the dir. */
 275        status = ocfs2_prepare_dir_for_insert(osb, dir, parent_fe_bh,
 276                                              dentry->d_name.name,
 277                                              dentry->d_name.len, &lookup);
 278        if (status < 0) {
 279                mlog_errno(status);
 280                goto leave;
 281        }
 282
 283        /* reserve an inode spot */
 284        status = ocfs2_reserve_new_inode(osb, &inode_ac);
 285        if (status < 0) {
 286                if (status != -ENOSPC)
 287                        mlog_errno(status);
 288                goto leave;
 289        }
 290
 291        inode = ocfs2_get_init_inode(dir, mode);
 292        if (!inode) {
 293                status = -ENOMEM;
 294                mlog_errno(status);
 295                goto leave;
 296        }
 297
 298        /* get security xattr */
 299        status = ocfs2_init_security_get(inode, dir, &si);
 300        if (status) {
 301                if (status == -EOPNOTSUPP)
 302                        si.enable = 0;
 303                else {
 304                        mlog_errno(status);
 305                        goto leave;
 306                }
 307        }
 308
 309        /* calculate meta data/clusters for setting security and acl xattr */
 310        status = ocfs2_calc_xattr_init(dir, parent_fe_bh, mode,
 311                                       &si, &want_clusters,
 312                                       &xattr_credits, &want_meta);
 313        if (status < 0) {
 314                mlog_errno(status);
 315                goto leave;
 316        }
 317
 318        /* Reserve a cluster if creating an extent based directory. */
 319        if (S_ISDIR(mode) && !ocfs2_supports_inline_data(osb)) {
 320                want_clusters += 1;
 321
 322                /* Dir indexing requires extra space as well */
 323                if (ocfs2_supports_indexed_dirs(osb))
 324                        want_meta++;
 325        }
 326
 327        status = ocfs2_reserve_new_metadata_blocks(osb, want_meta, &meta_ac);
 328        if (status < 0) {
 329                if (status != -ENOSPC)
 330                        mlog_errno(status);
 331                goto leave;
 332        }
 333
 334        status = ocfs2_reserve_clusters(osb, want_clusters, &data_ac);
 335        if (status < 0) {
 336                if (status != -ENOSPC)
 337                        mlog_errno(status);
 338                goto leave;
 339        }
 340
 341        handle = ocfs2_start_trans(osb, ocfs2_mknod_credits(osb->sb,
 342                                                            S_ISDIR(mode),
 343                                                            xattr_credits));
 344        if (IS_ERR(handle)) {
 345                status = PTR_ERR(handle);
 346                handle = NULL;
 347                mlog_errno(status);
 348                goto leave;
 349        }
 350
 351        /* We don't use standard VFS wrapper because we don't want vfs_dq_init
 352         * to be called. */
 353        if (sb_any_quota_active(osb->sb) &&
 354            osb->sb->dq_op->alloc_inode(inode, 1) == NO_QUOTA) {
 355                status = -EDQUOT;
 356                goto leave;
 357        }
 358        did_quota_inode = 1;
 359
 360        mlog_entry("(0x%p, 0x%p, %d, %lu, '%.*s')\n", dir, dentry,
 361                   inode->i_mode, (unsigned long)dev, dentry->d_name.len,
 362                   dentry->d_name.name);
 363
 364        /* do the real work now. */
 365        status = ocfs2_mknod_locked(osb, dir, inode, dev,
 366                                    &new_fe_bh, parent_fe_bh, handle,
 367                                    inode_ac);
 368        if (status < 0) {
 369                mlog_errno(status);
 370                goto leave;
 371        }
 372
 373        if (S_ISDIR(mode)) {
 374                status = ocfs2_fill_new_dir(osb, handle, dir, inode,
 375                                            new_fe_bh, data_ac, meta_ac);
 376                if (status < 0) {
 377                        mlog_errno(status);
 378                        goto leave;
 379                }
 380
 381                status = ocfs2_journal_access_di(handle, INODE_CACHE(dir),
 382                                                 parent_fe_bh,
 383                                                 OCFS2_JOURNAL_ACCESS_WRITE);
 384                if (status < 0) {
 385                        mlog_errno(status);
 386                        goto leave;
 387                }
 388                ocfs2_add_links_count(dirfe, 1);
 389                status = ocfs2_journal_dirty(handle, parent_fe_bh);
 390                if (status < 0) {
 391                        mlog_errno(status);
 392                        goto leave;
 393                }
 394                inc_nlink(dir);
 395        }
 396
 397        status = ocfs2_init_acl(handle, inode, dir, new_fe_bh, parent_fe_bh,
 398                                meta_ac, data_ac);
 399        if (status < 0) {
 400                mlog_errno(status);
 401                goto leave;
 402        }
 403
 404        if (si.enable) {
 405                status = ocfs2_init_security_set(handle, inode, new_fe_bh, &si,
 406                                                 meta_ac, data_ac);
 407                if (status < 0) {
 408                        mlog_errno(status);
 409                        goto leave;
 410                }
 411        }
 412
 413        status = ocfs2_add_entry(handle, dentry, inode,
 414                                 OCFS2_I(inode)->ip_blkno, parent_fe_bh,
 415                                 &lookup);
 416        if (status < 0) {
 417                mlog_errno(status);
 418                goto leave;
 419        }
 420
 421        status = ocfs2_dentry_attach_lock(dentry, inode,
 422                                          OCFS2_I(dir)->ip_blkno);
 423        if (status) {
 424                mlog_errno(status);
 425                goto leave;
 426        }
 427
 428        insert_inode_hash(inode);
 429        dentry->d_op = &ocfs2_dentry_ops;
 430        d_instantiate(dentry, inode);
 431        status = 0;
 432leave:
 433        if (status < 0 && did_quota_inode)
 434                vfs_dq_free_inode(inode);
 435        if (handle)
 436                ocfs2_commit_trans(osb, handle);
 437
 438        ocfs2_inode_unlock(dir, 1);
 439
 440        if (status == -ENOSPC)
 441                mlog(0, "Disk is full\n");
 442
 443        brelse(new_fe_bh);
 444        brelse(parent_fe_bh);
 445        kfree(si.name);
 446        kfree(si.value);
 447
 448        ocfs2_free_dir_lookup_result(&lookup);
 449
 450        if ((status < 0) && inode) {
 451                clear_nlink(inode);
 452                iput(inode);
 453        }
 454
 455        if (inode_ac)
 456                ocfs2_free_alloc_context(inode_ac);
 457
 458        if (data_ac)
 459                ocfs2_free_alloc_context(data_ac);
 460
 461        if (meta_ac)
 462                ocfs2_free_alloc_context(meta_ac);
 463
 464        mlog_exit(status);
 465
 466        return status;
 467}
 468
 469static int ocfs2_mknod_locked(struct ocfs2_super *osb,
 470                              struct inode *dir,
 471                              struct inode *inode,
 472                              dev_t dev,
 473                              struct buffer_head **new_fe_bh,
 474                              struct buffer_head *parent_fe_bh,
 475                              handle_t *handle,
 476                              struct ocfs2_alloc_context *inode_ac)
 477{
 478        int status = 0;
 479        struct ocfs2_dinode *fe = NULL;
 480        struct ocfs2_extent_list *fel;
 481        u64 fe_blkno = 0;
 482        u16 suballoc_bit;
 483        u16 feat;
 484
 485        *new_fe_bh = NULL;
 486
 487        status = ocfs2_claim_new_inode(osb, handle, dir, parent_fe_bh,
 488                                       inode_ac, &suballoc_bit, &fe_blkno);
 489        if (status < 0) {
 490                mlog_errno(status);
 491                goto leave;
 492        }
 493
 494        /* populate as many fields early on as possible - many of
 495         * these are used by the support functions here and in
 496         * callers. */
 497        inode->i_ino = ino_from_blkno(osb->sb, fe_blkno);
 498        OCFS2_I(inode)->ip_blkno = fe_blkno;
 499        spin_lock(&osb->osb_lock);
 500        inode->i_generation = osb->s_next_generation++;
 501        spin_unlock(&osb->osb_lock);
 502
 503        *new_fe_bh = sb_getblk(osb->sb, fe_blkno);
 504        if (!*new_fe_bh) {
 505                status = -EIO;
 506                mlog_errno(status);
 507                goto leave;
 508        }
 509        ocfs2_set_new_buffer_uptodate(INODE_CACHE(inode), *new_fe_bh);
 510
 511        status = ocfs2_journal_access_di(handle, INODE_CACHE(inode),
 512                                         *new_fe_bh,
 513                                         OCFS2_JOURNAL_ACCESS_CREATE);
 514        if (status < 0) {
 515                mlog_errno(status);
 516                goto leave;
 517        }
 518
 519        fe = (struct ocfs2_dinode *) (*new_fe_bh)->b_data;
 520        memset(fe, 0, osb->sb->s_blocksize);
 521
 522        fe->i_generation = cpu_to_le32(inode->i_generation);
 523        fe->i_fs_generation = cpu_to_le32(osb->fs_generation);
 524        fe->i_blkno = cpu_to_le64(fe_blkno);
 525        fe->i_suballoc_bit = cpu_to_le16(suballoc_bit);
 526        fe->i_suballoc_slot = cpu_to_le16(inode_ac->ac_alloc_slot);
 527        fe->i_uid = cpu_to_le32(inode->i_uid);
 528        fe->i_gid = cpu_to_le32(inode->i_gid);
 529        fe->i_mode = cpu_to_le16(inode->i_mode);
 530        if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
 531                fe->id1.dev1.i_rdev = cpu_to_le64(huge_encode_dev(dev));
 532
 533        ocfs2_set_links_count(fe, inode->i_nlink);
 534
 535        fe->i_last_eb_blk = 0;
 536        strcpy(fe->i_signature, OCFS2_INODE_SIGNATURE);
 537        le32_add_cpu(&fe->i_flags, OCFS2_VALID_FL);
 538        fe->i_atime = fe->i_ctime = fe->i_mtime =
 539                cpu_to_le64(CURRENT_TIME.tv_sec);
 540        fe->i_mtime_nsec = fe->i_ctime_nsec = fe->i_atime_nsec =
 541                cpu_to_le32(CURRENT_TIME.tv_nsec);
 542        fe->i_dtime = 0;
 543
 544        /*
 545         * If supported, directories start with inline data. If inline
 546         * isn't supported, but indexing is, we start them as indexed.
 547         */
 548        feat = le16_to_cpu(fe->i_dyn_features);
 549        if (S_ISDIR(inode->i_mode) && ocfs2_supports_inline_data(osb)) {
 550                fe->i_dyn_features = cpu_to_le16(feat | OCFS2_INLINE_DATA_FL);
 551
 552                fe->id2.i_data.id_count = cpu_to_le16(
 553                                ocfs2_max_inline_data_with_xattr(osb->sb, fe));
 554        } else {
 555                fel = &fe->id2.i_list;
 556                fel->l_tree_depth = 0;
 557                fel->l_next_free_rec = 0;
 558                fel->l_count = cpu_to_le16(ocfs2_extent_recs_per_inode(osb->sb));
 559        }
 560
 561        status = ocfs2_journal_dirty(handle, *new_fe_bh);
 562        if (status < 0) {
 563                mlog_errno(status);
 564                goto leave;
 565        }
 566
 567        ocfs2_populate_inode(inode, fe, 1);
 568        ocfs2_ci_set_new(osb, INODE_CACHE(inode));
 569        if (!ocfs2_mount_local(osb)) {
 570                status = ocfs2_create_new_inode_locks(inode);
 571                if (status < 0)
 572                        mlog_errno(status);
 573        }
 574
 575        status = 0; /* error in ocfs2_create_new_inode_locks is not
 576                     * critical */
 577
 578leave:
 579        if (status < 0) {
 580                if (*new_fe_bh) {
 581                        brelse(*new_fe_bh);
 582                        *new_fe_bh = NULL;
 583                }
 584        }
 585
 586        mlog_exit(status);
 587        return status;
 588}
 589
 590static int ocfs2_mkdir(struct inode *dir,
 591                       struct dentry *dentry,
 592                       int mode)
 593{
 594        int ret;
 595
 596        mlog_entry("(0x%p, 0x%p, %d, '%.*s')\n", dir, dentry, mode,
 597                   dentry->d_name.len, dentry->d_name.name);
 598        ret = ocfs2_mknod(dir, dentry, mode | S_IFDIR, 0);
 599        mlog_exit(ret);
 600
 601        return ret;
 602}
 603
 604static int ocfs2_create(struct inode *dir,
 605                        struct dentry *dentry,
 606                        int mode,
 607                        struct nameidata *nd)
 608{
 609        int ret;
 610
 611        mlog_entry("(0x%p, 0x%p, %d, '%.*s')\n", dir, dentry, mode,
 612                   dentry->d_name.len, dentry->d_name.name);
 613        ret = ocfs2_mknod(dir, dentry, mode | S_IFREG, 0);
 614        mlog_exit(ret);
 615
 616        return ret;
 617}
 618
 619static int ocfs2_link(struct dentry *old_dentry,
 620                      struct inode *dir,
 621                      struct dentry *dentry)
 622{
 623        handle_t *handle;
 624        struct inode *inode = old_dentry->d_inode;
 625        int err;
 626        struct buffer_head *fe_bh = NULL;
 627        struct buffer_head *parent_fe_bh = NULL;
 628        struct ocfs2_dinode *fe = NULL;
 629        struct ocfs2_super *osb = OCFS2_SB(dir->i_sb);
 630        struct ocfs2_dir_lookup_result lookup = { NULL, };
 631
 632        mlog_entry("(inode=%lu, old='%.*s' new='%.*s')\n", inode->i_ino,
 633                   old_dentry->d_name.len, old_dentry->d_name.name,
 634                   dentry->d_name.len, dentry->d_name.name);
 635
 636        if (S_ISDIR(inode->i_mode))
 637                return -EPERM;
 638
 639        err = ocfs2_inode_lock_nested(dir, &parent_fe_bh, 1, OI_LS_PARENT);
 640        if (err < 0) {
 641                if (err != -ENOENT)
 642                        mlog_errno(err);
 643                return err;
 644        }
 645
 646        if (!dir->i_nlink) {
 647                err = -ENOENT;
 648                goto out;
 649        }
 650
 651        err = ocfs2_check_dir_for_entry(dir, dentry->d_name.name,
 652                                        dentry->d_name.len);
 653        if (err)
 654                goto out;
 655
 656        err = ocfs2_prepare_dir_for_insert(osb, dir, parent_fe_bh,
 657                                           dentry->d_name.name,
 658                                           dentry->d_name.len, &lookup);
 659        if (err < 0) {
 660                mlog_errno(err);
 661                goto out;
 662        }
 663
 664        err = ocfs2_inode_lock(inode, &fe_bh, 1);
 665        if (err < 0) {
 666                if (err != -ENOENT)
 667                        mlog_errno(err);
 668                goto out;
 669        }
 670
 671        fe = (struct ocfs2_dinode *) fe_bh->b_data;
 672        if (ocfs2_read_links_count(fe) >= ocfs2_link_max(osb)) {
 673                err = -EMLINK;
 674                goto out_unlock_inode;
 675        }
 676
 677        handle = ocfs2_start_trans(osb, ocfs2_link_credits(osb->sb));
 678        if (IS_ERR(handle)) {
 679                err = PTR_ERR(handle);
 680                handle = NULL;
 681                mlog_errno(err);
 682                goto out_unlock_inode;
 683        }
 684
 685        err = ocfs2_journal_access_di(handle, INODE_CACHE(inode), fe_bh,
 686                                      OCFS2_JOURNAL_ACCESS_WRITE);
 687        if (err < 0) {
 688                mlog_errno(err);
 689                goto out_commit;
 690        }
 691
 692        inc_nlink(inode);
 693        inode->i_ctime = CURRENT_TIME;
 694        ocfs2_set_links_count(fe, inode->i_nlink);
 695        fe->i_ctime = cpu_to_le64(inode->i_ctime.tv_sec);
 696        fe->i_ctime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec);
 697
 698        err = ocfs2_journal_dirty(handle, fe_bh);
 699        if (err < 0) {
 700                ocfs2_add_links_count(fe, -1);
 701                drop_nlink(inode);
 702                mlog_errno(err);
 703                goto out_commit;
 704        }
 705
 706        err = ocfs2_add_entry(handle, dentry, inode,
 707                              OCFS2_I(inode)->ip_blkno,
 708                              parent_fe_bh, &lookup);
 709        if (err) {
 710                ocfs2_add_links_count(fe, -1);
 711                drop_nlink(inode);
 712                mlog_errno(err);
 713                goto out_commit;
 714        }
 715
 716        err = ocfs2_dentry_attach_lock(dentry, inode, OCFS2_I(dir)->ip_blkno);
 717        if (err) {
 718                mlog_errno(err);
 719                goto out_commit;
 720        }
 721
 722        atomic_inc(&inode->i_count);
 723        dentry->d_op = &ocfs2_dentry_ops;
 724        d_instantiate(dentry, inode);
 725
 726out_commit:
 727        ocfs2_commit_trans(osb, handle);
 728out_unlock_inode:
 729        ocfs2_inode_unlock(inode, 1);
 730
 731out:
 732        ocfs2_inode_unlock(dir, 1);
 733
 734        brelse(fe_bh);
 735        brelse(parent_fe_bh);
 736
 737        ocfs2_free_dir_lookup_result(&lookup);
 738
 739        mlog_exit(err);
 740
 741        return err;
 742}
 743
 744/*
 745 * Takes and drops an exclusive lock on the given dentry. This will
 746 * force other nodes to drop it.
 747 */
 748static int ocfs2_remote_dentry_delete(struct dentry *dentry)
 749{
 750        int ret;
 751
 752        ret = ocfs2_dentry_lock(dentry, 1);
 753        if (ret)
 754                mlog_errno(ret);
 755        else
 756                ocfs2_dentry_unlock(dentry, 1);
 757
 758        return ret;
 759}
 760
 761static inline int inode_is_unlinkable(struct inode *inode)
 762{
 763        if (S_ISDIR(inode->i_mode)) {
 764                if (inode->i_nlink == 2)
 765                        return 1;
 766                return 0;
 767        }
 768
 769        if (inode->i_nlink == 1)
 770                return 1;
 771        return 0;
 772}
 773
 774static int ocfs2_unlink(struct inode *dir,
 775                        struct dentry *dentry)
 776{
 777        int status;
 778        int child_locked = 0;
 779        struct inode *inode = dentry->d_inode;
 780        struct inode *orphan_dir = NULL;
 781        struct ocfs2_super *osb = OCFS2_SB(dir->i_sb);
 782        u64 blkno;
 783        struct ocfs2_dinode *fe = NULL;
 784        struct buffer_head *fe_bh = NULL;
 785        struct buffer_head *parent_node_bh = NULL;
 786        handle_t *handle = NULL;
 787        char orphan_name[OCFS2_ORPHAN_NAMELEN + 1];
 788        struct ocfs2_dir_lookup_result lookup = { NULL, };
 789        struct ocfs2_dir_lookup_result orphan_insert = { NULL, };
 790
 791        mlog_entry("(0x%p, 0x%p, '%.*s')\n", dir, dentry,
 792                   dentry->d_name.len, dentry->d_name.name);
 793
 794        BUG_ON(dentry->d_parent->d_inode != dir);
 795
 796        mlog(0, "ino = %llu\n", (unsigned long long)OCFS2_I(inode)->ip_blkno);
 797
 798        if (inode == osb->root_inode) {
 799                mlog(0, "Cannot delete the root directory\n");
 800                return -EPERM;
 801        }
 802
 803        status = ocfs2_inode_lock_nested(dir, &parent_node_bh, 1,
 804                                         OI_LS_PARENT);
 805        if (status < 0) {
 806                if (status != -ENOENT)
 807                        mlog_errno(status);
 808                return status;
 809        }
 810
 811        status = ocfs2_find_files_on_disk(dentry->d_name.name,
 812                                          dentry->d_name.len, &blkno, dir,
 813                                          &lookup);
 814        if (status < 0) {
 815                if (status != -ENOENT)
 816                        mlog_errno(status);
 817                goto leave;
 818        }
 819
 820        if (OCFS2_I(inode)->ip_blkno != blkno) {
 821                status = -ENOENT;
 822
 823                mlog(0, "ip_blkno %llu != dirent blkno %llu ip_flags = %x\n",
 824                     (unsigned long long)OCFS2_I(inode)->ip_blkno,
 825                     (unsigned long long)blkno, OCFS2_I(inode)->ip_flags);
 826                goto leave;
 827        }
 828
 829        status = ocfs2_inode_lock(inode, &fe_bh, 1);
 830        if (status < 0) {
 831                if (status != -ENOENT)
 832                        mlog_errno(status);
 833                goto leave;
 834        }
 835        child_locked = 1;
 836
 837        if (S_ISDIR(inode->i_mode)) {
 838                if (inode->i_nlink != 2 || !ocfs2_empty_dir(inode)) {
 839                        status = -ENOTEMPTY;
 840                        goto leave;
 841                }
 842        }
 843
 844        status = ocfs2_remote_dentry_delete(dentry);
 845        if (status < 0) {
 846                /* This remote delete should succeed under all normal
 847                 * circumstances. */
 848                mlog_errno(status);
 849                goto leave;
 850        }
 851
 852        if (inode_is_unlinkable(inode)) {
 853                status = ocfs2_prepare_orphan_dir(osb, &orphan_dir,
 854                                                  OCFS2_I(inode)->ip_blkno,
 855                                                  orphan_name, &orphan_insert);
 856                if (status < 0) {
 857                        mlog_errno(status);
 858                        goto leave;
 859                }
 860        }
 861
 862        handle = ocfs2_start_trans(osb, ocfs2_unlink_credits(osb->sb));
 863        if (IS_ERR(handle)) {
 864                status = PTR_ERR(handle);
 865                handle = NULL;
 866                mlog_errno(status);
 867                goto leave;
 868        }
 869
 870        status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), fe_bh,
 871                                         OCFS2_JOURNAL_ACCESS_WRITE);
 872        if (status < 0) {
 873                mlog_errno(status);
 874                goto leave;
 875        }
 876
 877        fe = (struct ocfs2_dinode *) fe_bh->b_data;
 878
 879        if (inode_is_unlinkable(inode)) {
 880                status = ocfs2_orphan_add(osb, handle, inode, fe, orphan_name,
 881                                          &orphan_insert, orphan_dir);
 882                if (status < 0) {
 883                        mlog_errno(status);
 884                        goto leave;
 885                }
 886        }
 887
 888        /* delete the name from the parent dir */
 889        status = ocfs2_delete_entry(handle, dir, &lookup);
 890        if (status < 0) {
 891                mlog_errno(status);
 892                goto leave;
 893        }
 894
 895        if (S_ISDIR(inode->i_mode))
 896                drop_nlink(inode);
 897        drop_nlink(inode);
 898        ocfs2_set_links_count(fe, inode->i_nlink);
 899
 900        status = ocfs2_journal_dirty(handle, fe_bh);
 901        if (status < 0) {
 902                mlog_errno(status);
 903                goto leave;
 904        }
 905
 906        dir->i_ctime = dir->i_mtime = CURRENT_TIME;
 907        if (S_ISDIR(inode->i_mode))
 908                drop_nlink(dir);
 909
 910        status = ocfs2_mark_inode_dirty(handle, dir, parent_node_bh);
 911        if (status < 0) {
 912                mlog_errno(status);
 913                if (S_ISDIR(inode->i_mode))
 914                        inc_nlink(dir);
 915        }
 916
 917leave:
 918        if (handle)
 919                ocfs2_commit_trans(osb, handle);
 920
 921        if (child_locked)
 922                ocfs2_inode_unlock(inode, 1);
 923
 924        ocfs2_inode_unlock(dir, 1);
 925
 926        if (orphan_dir) {
 927                /* This was locked for us in ocfs2_prepare_orphan_dir() */
 928                ocfs2_inode_unlock(orphan_dir, 1);
 929                mutex_unlock(&orphan_dir->i_mutex);
 930                iput(orphan_dir);
 931        }
 932
 933        brelse(fe_bh);
 934        brelse(parent_node_bh);
 935
 936        ocfs2_free_dir_lookup_result(&orphan_insert);
 937        ocfs2_free_dir_lookup_result(&lookup);
 938
 939        mlog_exit(status);
 940
 941        return status;
 942}
 943
 944/*
 945 * The only place this should be used is rename!
 946 * if they have the same id, then the 1st one is the only one locked.
 947 */
 948static int ocfs2_double_lock(struct ocfs2_super *osb,
 949                             struct buffer_head **bh1,
 950                             struct inode *inode1,
 951                             struct buffer_head **bh2,
 952                             struct inode *inode2)
 953{
 954        int status;
 955        struct ocfs2_inode_info *oi1 = OCFS2_I(inode1);
 956        struct ocfs2_inode_info *oi2 = OCFS2_I(inode2);
 957        struct buffer_head **tmpbh;
 958        struct inode *tmpinode;
 959
 960        mlog_entry("(inode1 = %llu, inode2 = %llu)\n",
 961                   (unsigned long long)oi1->ip_blkno,
 962                   (unsigned long long)oi2->ip_blkno);
 963
 964        if (*bh1)
 965                *bh1 = NULL;
 966        if (*bh2)
 967                *bh2 = NULL;
 968
 969        /* we always want to lock the one with the lower lockid first. */
 970        if (oi1->ip_blkno != oi2->ip_blkno) {
 971                if (oi1->ip_blkno < oi2->ip_blkno) {
 972                        /* switch id1 and id2 around */
 973                        mlog(0, "switching them around...\n");
 974                        tmpbh = bh2;
 975                        bh2 = bh1;
 976                        bh1 = tmpbh;
 977
 978                        tmpinode = inode2;
 979                        inode2 = inode1;
 980                        inode1 = tmpinode;
 981                }
 982                /* lock id2 */
 983                status = ocfs2_inode_lock_nested(inode2, bh2, 1,
 984                                                 OI_LS_RENAME1);
 985                if (status < 0) {
 986                        if (status != -ENOENT)
 987                                mlog_errno(status);
 988                        goto bail;
 989                }
 990        }
 991
 992        /* lock id1 */
 993        status = ocfs2_inode_lock_nested(inode1, bh1, 1, OI_LS_RENAME2);
 994        if (status < 0) {
 995                /*
 996                 * An error return must mean that no cluster locks
 997                 * were held on function exit.
 998                 */
 999                if (oi1->ip_blkno != oi2->ip_blkno)
1000                        ocfs2_inode_unlock(inode2, 1);
1001
1002                if (status != -ENOENT)
1003                        mlog_errno(status);
1004        }
1005
1006bail:
1007        mlog_exit(status);
1008        return status;
1009}
1010
1011static void ocfs2_double_unlock(struct inode *inode1, struct inode *inode2)
1012{
1013        ocfs2_inode_unlock(inode1, 1);
1014
1015        if (inode1 != inode2)
1016                ocfs2_inode_unlock(inode2, 1);
1017}
1018
1019static int ocfs2_rename(struct inode *old_dir,
1020                        struct dentry *old_dentry,
1021                        struct inode *new_dir,
1022                        struct dentry *new_dentry)
1023{
1024        int status = 0, rename_lock = 0, parents_locked = 0, target_exists = 0;
1025        int old_child_locked = 0, new_child_locked = 0, update_dot_dot = 0;
1026        struct inode *old_inode = old_dentry->d_inode;
1027        struct inode *new_inode = new_dentry->d_inode;
1028        struct inode *orphan_dir = NULL;
1029        struct ocfs2_dinode *newfe = NULL;
1030        char orphan_name[OCFS2_ORPHAN_NAMELEN + 1];
1031        struct buffer_head *newfe_bh = NULL;
1032        struct buffer_head *old_inode_bh = NULL;
1033        struct ocfs2_super *osb = NULL;
1034        u64 newfe_blkno, old_de_ino;
1035        handle_t *handle = NULL;
1036        struct buffer_head *old_dir_bh = NULL;
1037        struct buffer_head *new_dir_bh = NULL;
1038        nlink_t old_dir_nlink = old_dir->i_nlink;
1039        struct ocfs2_dinode *old_di;
1040        struct ocfs2_dir_lookup_result old_inode_dot_dot_res = { NULL, };
1041        struct ocfs2_dir_lookup_result target_lookup_res = { NULL, };
1042        struct ocfs2_dir_lookup_result old_entry_lookup = { NULL, };
1043        struct ocfs2_dir_lookup_result orphan_insert = { NULL, };
1044        struct ocfs2_dir_lookup_result target_insert = { NULL, };
1045
1046        /* At some point it might be nice to break this function up a
1047         * bit. */
1048
1049        mlog_entry("(0x%p, 0x%p, 0x%p, 0x%p, from='%.*s' to='%.*s')\n",
1050                   old_dir, old_dentry, new_dir, new_dentry,
1051                   old_dentry->d_name.len, old_dentry->d_name.name,
1052                   new_dentry->d_name.len, new_dentry->d_name.name);
1053
1054        osb = OCFS2_SB(old_dir->i_sb);
1055
1056        if (new_inode) {
1057                if (!igrab(new_inode))
1058                        BUG();
1059        }
1060
1061        /* Assume a directory hierarchy thusly:
1062         * a/b/c
1063         * a/d
1064         * a,b,c, and d are all directories.
1065         *
1066         * from cwd of 'a' on both nodes:
1067         * node1: mv b/c d
1068         * node2: mv d   b/c
1069         *
1070         * And that's why, just like the VFS, we need a file system
1071         * rename lock. */
1072        if (old_dir != new_dir && S_ISDIR(old_inode->i_mode)) {
1073                status = ocfs2_rename_lock(osb);
1074                if (status < 0) {
1075                        mlog_errno(status);
1076                        goto bail;
1077                }
1078                rename_lock = 1;
1079        }
1080
1081        /* if old and new are the same, this'll just do one lock. */
1082        status = ocfs2_double_lock(osb, &old_dir_bh, old_dir,
1083                                   &new_dir_bh, new_dir);
1084        if (status < 0) {
1085                mlog_errno(status);
1086                goto bail;
1087        }
1088        parents_locked = 1;
1089
1090        /* make sure both dirs have bhs
1091         * get an extra ref on old_dir_bh if old==new */
1092        if (!new_dir_bh) {
1093                if (old_dir_bh) {
1094                        new_dir_bh = old_dir_bh;
1095                        get_bh(new_dir_bh);
1096                } else {
1097                        mlog(ML_ERROR, "no old_dir_bh!\n");
1098                        status = -EIO;
1099                        goto bail;
1100                }
1101        }
1102
1103        /*
1104         * Aside from allowing a meta data update, the locking here
1105         * also ensures that the downconvert thread on other nodes
1106         * won't have to concurrently downconvert the inode and the
1107         * dentry locks.
1108         */
1109        status = ocfs2_inode_lock_nested(old_inode, &old_inode_bh, 1,
1110                                         OI_LS_PARENT);
1111        if (status < 0) {
1112                if (status != -ENOENT)
1113                        mlog_errno(status);
1114                goto bail;
1115        }
1116        old_child_locked = 1;
1117
1118        status = ocfs2_remote_dentry_delete(old_dentry);
1119        if (status < 0) {
1120                mlog_errno(status);
1121                goto bail;
1122        }
1123
1124        if (S_ISDIR(old_inode->i_mode)) {
1125                u64 old_inode_parent;
1126
1127                update_dot_dot = 1;
1128                status = ocfs2_find_files_on_disk("..", 2, &old_inode_parent,
1129                                                  old_inode,
1130                                                  &old_inode_dot_dot_res);
1131                if (status) {
1132                        status = -EIO;
1133                        goto bail;
1134                }
1135
1136                if (old_inode_parent != OCFS2_I(old_dir)->ip_blkno) {
1137                        status = -EIO;
1138                        goto bail;
1139                }
1140
1141                if (!new_inode && new_dir != old_dir &&
1142                    new_dir->i_nlink >= ocfs2_link_max(osb)) {
1143                        status = -EMLINK;
1144                        goto bail;
1145                }
1146        }
1147
1148        status = ocfs2_lookup_ino_from_name(old_dir, old_dentry->d_name.name,
1149                                            old_dentry->d_name.len,
1150                                            &old_de_ino);
1151        if (status) {
1152                status = -ENOENT;
1153                goto bail;
1154        }
1155
1156        /*
1157         *  Check for inode number is _not_ due to possible IO errors.
1158         *  We might rmdir the source, keep it as pwd of some process
1159         *  and merrily kill the link to whatever was created under the
1160         *  same name. Goodbye sticky bit ;-<
1161         */
1162        if (old_de_ino != OCFS2_I(old_inode)->ip_blkno) {
1163                status = -ENOENT;
1164                goto bail;
1165        }
1166
1167        /* check if the target already exists (in which case we need
1168         * to delete it */
1169        status = ocfs2_find_files_on_disk(new_dentry->d_name.name,
1170                                          new_dentry->d_name.len,
1171                                          &newfe_blkno, new_dir,
1172                                          &target_lookup_res);
1173        /* The only error we allow here is -ENOENT because the new
1174         * file not existing is perfectly valid. */
1175        if ((status < 0) && (status != -ENOENT)) {
1176                /* If we cannot find the file specified we should just */
1177                /* return the error... */
1178                mlog_errno(status);
1179                goto bail;
1180        }
1181        if (status == 0)
1182                target_exists = 1;
1183
1184        if (!target_exists && new_inode) {
1185                /*
1186                 * Target was unlinked by another node while we were
1187                 * waiting to get to ocfs2_rename(). There isn't
1188                 * anything we can do here to help the situation, so
1189                 * bubble up the appropriate error.
1190                 */
1191                status = -ENOENT;
1192                goto bail;
1193        }
1194
1195        /* In case we need to overwrite an existing file, we blow it
1196         * away first */
1197        if (target_exists) {
1198                /* VFS didn't think there existed an inode here, but
1199                 * someone else in the cluster must have raced our
1200                 * rename to create one. Today we error cleanly, in
1201                 * the future we should consider calling iget to build
1202                 * a new struct inode for this entry. */
1203                if (!new_inode) {
1204                        status = -EACCES;
1205
1206                        mlog(0, "We found an inode for name %.*s but VFS "
1207                             "didn't give us one.\n", new_dentry->d_name.len,
1208                             new_dentry->d_name.name);
1209                        goto bail;
1210                }
1211
1212                if (OCFS2_I(new_inode)->ip_blkno != newfe_blkno) {
1213                        status = -EACCES;
1214
1215                        mlog(0, "Inode %llu and dir %llu disagree. flags = %x\n",
1216                             (unsigned long long)OCFS2_I(new_inode)->ip_blkno,
1217                             (unsigned long long)newfe_blkno,
1218                             OCFS2_I(new_inode)->ip_flags);
1219                        goto bail;
1220                }
1221
1222                status = ocfs2_inode_lock(new_inode, &newfe_bh, 1);
1223                if (status < 0) {
1224                        if (status != -ENOENT)
1225                                mlog_errno(status);
1226                        goto bail;
1227                }
1228                new_child_locked = 1;
1229
1230                status = ocfs2_remote_dentry_delete(new_dentry);
1231                if (status < 0) {
1232                        mlog_errno(status);
1233                        goto bail;
1234                }
1235
1236                newfe = (struct ocfs2_dinode *) newfe_bh->b_data;
1237
1238                mlog(0, "aha rename over existing... new_blkno=%llu "
1239                     "newfebh=%p bhblocknr=%llu\n",
1240                     (unsigned long long)newfe_blkno, newfe_bh, newfe_bh ?
1241                     (unsigned long long)newfe_bh->b_blocknr : 0ULL);
1242
1243                if (S_ISDIR(new_inode->i_mode) || (new_inode->i_nlink == 1)) {
1244                        status = ocfs2_prepare_orphan_dir(osb, &orphan_dir,
1245                                                OCFS2_I(new_inode)->ip_blkno,
1246                                                orphan_name, &orphan_insert);
1247                        if (status < 0) {
1248                                mlog_errno(status);
1249                                goto bail;
1250                        }
1251                }
1252        } else {
1253                BUG_ON(new_dentry->d_parent->d_inode != new_dir);
1254
1255                status = ocfs2_check_dir_for_entry(new_dir,
1256                                                   new_dentry->d_name.name,
1257                                                   new_dentry->d_name.len);
1258                if (status)
1259                        goto bail;
1260
1261                status = ocfs2_prepare_dir_for_insert(osb, new_dir, new_dir_bh,
1262                                                      new_dentry->d_name.name,
1263                                                      new_dentry->d_name.len,
1264                                                      &target_insert);
1265                if (status < 0) {
1266                        mlog_errno(status);
1267                        goto bail;
1268                }
1269        }
1270
1271        handle = ocfs2_start_trans(osb, ocfs2_rename_credits(osb->sb));
1272        if (IS_ERR(handle)) {
1273                status = PTR_ERR(handle);
1274                handle = NULL;
1275                mlog_errno(status);
1276                goto bail;
1277        }
1278
1279        if (target_exists) {
1280                if (S_ISDIR(new_inode->i_mode)) {
1281                        if (new_inode->i_nlink != 2 ||
1282                            !ocfs2_empty_dir(new_inode)) {
1283                                status = -ENOTEMPTY;
1284                                goto bail;
1285                        }
1286                }
1287                status = ocfs2_journal_access_di(handle, INODE_CACHE(new_inode),
1288                                                 newfe_bh,
1289                                                 OCFS2_JOURNAL_ACCESS_WRITE);
1290                if (status < 0) {
1291                        mlog_errno(status);
1292                        goto bail;
1293                }
1294
1295                if (S_ISDIR(new_inode->i_mode) ||
1296                    (ocfs2_read_links_count(newfe) == 1)) {
1297                        status = ocfs2_orphan_add(osb, handle, new_inode,
1298                                                  newfe, orphan_name,
1299                                                  &orphan_insert, orphan_dir);
1300                        if (status < 0) {
1301                                mlog_errno(status);
1302                                goto bail;
1303                        }
1304                }
1305
1306                /* change the dirent to point to the correct inode */
1307                status = ocfs2_update_entry(new_dir, handle, &target_lookup_res,
1308                                            old_inode);
1309                if (status < 0) {
1310                        mlog_errno(status);
1311                        goto bail;
1312                }
1313                new_dir->i_version++;
1314
1315                if (S_ISDIR(new_inode->i_mode))
1316                        ocfs2_set_links_count(newfe, 0);
1317                else
1318                        ocfs2_add_links_count(newfe, -1);
1319
1320                status = ocfs2_journal_dirty(handle, newfe_bh);
1321                if (status < 0) {
1322                        mlog_errno(status);
1323                        goto bail;
1324                }
1325        } else {
1326                /* if the name was not found in new_dir, add it now */
1327                status = ocfs2_add_entry(handle, new_dentry, old_inode,
1328                                         OCFS2_I(old_inode)->ip_blkno,
1329                                         new_dir_bh, &target_insert);
1330        }
1331
1332        old_inode->i_ctime = CURRENT_TIME;
1333        mark_inode_dirty(old_inode);
1334
1335        status = ocfs2_journal_access_di(handle, INODE_CACHE(old_inode),
1336                                         old_inode_bh,
1337                                         OCFS2_JOURNAL_ACCESS_WRITE);
1338        if (status >= 0) {
1339                old_di = (struct ocfs2_dinode *) old_inode_bh->b_data;
1340
1341                old_di->i_ctime = cpu_to_le64(old_inode->i_ctime.tv_sec);
1342                old_di->i_ctime_nsec = cpu_to_le32(old_inode->i_ctime.tv_nsec);
1343
1344                status = ocfs2_journal_dirty(handle, old_inode_bh);
1345                if (status < 0)
1346                        mlog_errno(status);
1347        } else
1348                mlog_errno(status);
1349
1350        /*
1351         * Now that the name has been added to new_dir, remove the old name.
1352         *
1353         * We don't keep any directory entry context around until now
1354         * because the insert might have changed the type of directory
1355         * we're dealing with.
1356         */
1357        status = ocfs2_find_entry(old_dentry->d_name.name,
1358                                  old_dentry->d_name.len, old_dir,
1359                                  &old_entry_lookup);
1360        if (status)
1361                goto bail;
1362
1363        status = ocfs2_delete_entry(handle, old_dir, &old_entry_lookup);
1364        if (status < 0) {
1365                mlog_errno(status);
1366                goto bail;
1367        }
1368
1369        if (new_inode) {
1370                new_inode->i_nlink--;
1371                new_inode->i_ctime = CURRENT_TIME;
1372        }
1373        old_dir->i_ctime = old_dir->i_mtime = CURRENT_TIME;
1374
1375        if (update_dot_dot) {
1376                status = ocfs2_update_entry(old_inode, handle,
1377                                            &old_inode_dot_dot_res, new_dir);
1378                old_dir->i_nlink--;
1379                if (new_inode) {
1380                        new_inode->i_nlink--;
1381                } else {
1382                        inc_nlink(new_dir);
1383                        mark_inode_dirty(new_dir);
1384                }
1385        }
1386        mark_inode_dirty(old_dir);
1387        ocfs2_mark_inode_dirty(handle, old_dir, old_dir_bh);
1388        if (new_inode) {
1389                mark_inode_dirty(new_inode);
1390                ocfs2_mark_inode_dirty(handle, new_inode, newfe_bh);
1391        }
1392
1393        if (old_dir != new_dir) {
1394                /* Keep the same times on both directories.*/
1395                new_dir->i_ctime = new_dir->i_mtime = old_dir->i_ctime;
1396
1397                /*
1398                 * This will also pick up the i_nlink change from the
1399                 * block above.
1400                 */
1401                ocfs2_mark_inode_dirty(handle, new_dir, new_dir_bh);
1402        }
1403
1404        if (old_dir_nlink != old_dir->i_nlink) {
1405                if (!old_dir_bh) {
1406                        mlog(ML_ERROR, "need to change nlink for old dir "
1407                             "%llu from %d to %d but bh is NULL!\n",
1408                             (unsigned long long)OCFS2_I(old_dir)->ip_blkno,
1409                             (int)old_dir_nlink, old_dir->i_nlink);
1410                } else {
1411                        struct ocfs2_dinode *fe;
1412                        status = ocfs2_journal_access_di(handle,
1413                                                         INODE_CACHE(old_dir),
1414                                                         old_dir_bh,
1415                                                         OCFS2_JOURNAL_ACCESS_WRITE);
1416                        fe = (struct ocfs2_dinode *) old_dir_bh->b_data;
1417                        ocfs2_set_links_count(fe, old_dir->i_nlink);
1418                        status = ocfs2_journal_dirty(handle, old_dir_bh);
1419                }
1420        }
1421        ocfs2_dentry_move(old_dentry, new_dentry, old_dir, new_dir);
1422        status = 0;
1423bail:
1424        if (rename_lock)
1425                ocfs2_rename_unlock(osb);
1426
1427        if (handle)
1428                ocfs2_commit_trans(osb, handle);
1429
1430        if (parents_locked)
1431                ocfs2_double_unlock(old_dir, new_dir);
1432
1433        if (old_child_locked)
1434                ocfs2_inode_unlock(old_inode, 1);
1435
1436        if (new_child_locked)
1437                ocfs2_inode_unlock(new_inode, 1);
1438
1439        if (orphan_dir) {
1440                /* This was locked for us in ocfs2_prepare_orphan_dir() */
1441                ocfs2_inode_unlock(orphan_dir, 1);
1442                mutex_unlock(&orphan_dir->i_mutex);
1443                iput(orphan_dir);
1444        }
1445
1446        if (new_inode)
1447                sync_mapping_buffers(old_inode->i_mapping);
1448
1449        if (new_inode)
1450                iput(new_inode);
1451
1452        ocfs2_free_dir_lookup_result(&target_lookup_res);
1453        ocfs2_free_dir_lookup_result(&old_entry_lookup);
1454        ocfs2_free_dir_lookup_result(&old_inode_dot_dot_res);
1455        ocfs2_free_dir_lookup_result(&orphan_insert);
1456        ocfs2_free_dir_lookup_result(&target_insert);
1457
1458        brelse(newfe_bh);
1459        brelse(old_inode_bh);
1460        brelse(old_dir_bh);
1461        brelse(new_dir_bh);
1462
1463        mlog_exit(status);
1464
1465        return status;
1466}
1467
1468/*
1469 * we expect i_size = strlen(symname). Copy symname into the file
1470 * data, including the null terminator.
1471 */
1472static int ocfs2_create_symlink_data(struct ocfs2_super *osb,
1473                                     handle_t *handle,
1474                                     struct inode *inode,
1475                                     const char *symname)
1476{
1477        struct buffer_head **bhs = NULL;
1478        const char *c;
1479        struct super_block *sb = osb->sb;
1480        u64 p_blkno, p_blocks;
1481        int virtual, blocks, status, i, bytes_left;
1482
1483        bytes_left = i_size_read(inode) + 1;
1484        /* we can't trust i_blocks because we're actually going to
1485         * write i_size + 1 bytes. */
1486        blocks = (bytes_left + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
1487
1488        mlog_entry("i_blocks = %llu, i_size = %llu, blocks = %d\n",
1489                        (unsigned long long)inode->i_blocks,
1490                        i_size_read(inode), blocks);
1491
1492        /* Sanity check -- make sure we're going to fit. */
1493        if (bytes_left >
1494            ocfs2_clusters_to_bytes(sb, OCFS2_I(inode)->ip_clusters)) {
1495                status = -EIO;
1496                mlog_errno(status);
1497                goto bail;
1498        }
1499
1500        bhs = kcalloc(blocks, sizeof(struct buffer_head *), GFP_KERNEL);
1501        if (!bhs) {
1502                status = -ENOMEM;
1503                mlog_errno(status);
1504                goto bail;
1505        }
1506
1507        status = ocfs2_extent_map_get_blocks(inode, 0, &p_blkno, &p_blocks,
1508                                             NULL);
1509        if (status < 0) {
1510                mlog_errno(status);
1511                goto bail;
1512        }
1513
1514        /* links can never be larger than one cluster so we know this
1515         * is all going to be contiguous, but do a sanity check
1516         * anyway. */
1517        if ((p_blocks << sb->s_blocksize_bits) < bytes_left) {
1518                status = -EIO;
1519                mlog_errno(status);
1520                goto bail;
1521        }
1522
1523        virtual = 0;
1524        while(bytes_left > 0) {
1525                c = &symname[virtual * sb->s_blocksize];
1526
1527                bhs[virtual] = sb_getblk(sb, p_blkno);
1528                if (!bhs[virtual]) {
1529                        status = -ENOMEM;
1530                        mlog_errno(status);
1531                        goto bail;
1532                }
1533                ocfs2_set_new_buffer_uptodate(INODE_CACHE(inode),
1534                                              bhs[virtual]);
1535
1536                status = ocfs2_journal_access(handle, INODE_CACHE(inode),
1537                                              bhs[virtual],
1538                                              OCFS2_JOURNAL_ACCESS_CREATE);
1539                if (status < 0) {
1540                        mlog_errno(status);
1541                        goto bail;
1542                }
1543
1544                memset(bhs[virtual]->b_data, 0, sb->s_blocksize);
1545
1546                memcpy(bhs[virtual]->b_data, c,
1547                       (bytes_left > sb->s_blocksize) ? sb->s_blocksize :
1548                       bytes_left);
1549
1550                status = ocfs2_journal_dirty(handle, bhs[virtual]);
1551                if (status < 0) {
1552                        mlog_errno(status);
1553                        goto bail;
1554                }
1555
1556                virtual++;
1557                p_blkno++;
1558                bytes_left -= sb->s_blocksize;
1559        }
1560
1561        status = 0;
1562bail:
1563
1564        if (bhs) {
1565                for(i = 0; i < blocks; i++)
1566                        brelse(bhs[i]);
1567                kfree(bhs);
1568        }
1569
1570        mlog_exit(status);
1571        return status;
1572}
1573
1574static int ocfs2_symlink(struct inode *dir,
1575                         struct dentry *dentry,
1576                         const char *symname)
1577{
1578        int status, l, credits;
1579        u64 newsize;
1580        struct ocfs2_super *osb = NULL;
1581        struct inode *inode = NULL;
1582        struct super_block *sb;
1583        struct buffer_head *new_fe_bh = NULL;
1584        struct buffer_head *parent_fe_bh = NULL;
1585        struct ocfs2_dinode *fe = NULL;
1586        struct ocfs2_dinode *dirfe;
1587        handle_t *handle = NULL;
1588        struct ocfs2_alloc_context *inode_ac = NULL;
1589        struct ocfs2_alloc_context *data_ac = NULL;
1590        struct ocfs2_alloc_context *xattr_ac = NULL;
1591        int want_clusters = 0;
1592        int xattr_credits = 0;
1593        struct ocfs2_security_xattr_info si = {
1594                .enable = 1,
1595        };
1596        int did_quota = 0, did_quota_inode = 0;
1597        struct ocfs2_dir_lookup_result lookup = { NULL, };
1598
1599        mlog_entry("(0x%p, 0x%p, symname='%s' actual='%.*s')\n", dir,
1600                   dentry, symname, dentry->d_name.len, dentry->d_name.name);
1601
1602        sb = dir->i_sb;
1603        osb = OCFS2_SB(sb);
1604
1605        l = strlen(symname) + 1;
1606
1607        credits = ocfs2_calc_symlink_credits(sb);
1608
1609        /* lock the parent directory */
1610        status = ocfs2_inode_lock(dir, &parent_fe_bh, 1);
1611        if (status < 0) {
1612                if (status != -ENOENT)
1613                        mlog_errno(status);
1614                return status;
1615        }
1616
1617        dirfe = (struct ocfs2_dinode *) parent_fe_bh->b_data;
1618        if (!ocfs2_read_links_count(dirfe)) {
1619                /* can't make a file in a deleted directory. */
1620                status = -ENOENT;
1621                goto bail;
1622        }
1623
1624        status = ocfs2_check_dir_for_entry(dir, dentry->d_name.name,
1625                                           dentry->d_name.len);
1626        if (status)
1627                goto bail;
1628
1629        status = ocfs2_prepare_dir_for_insert(osb, dir, parent_fe_bh,
1630                                              dentry->d_name.name,
1631                                              dentry->d_name.len, &lookup);
1632        if (status < 0) {
1633                mlog_errno(status);
1634                goto bail;
1635        }
1636
1637        status = ocfs2_reserve_new_inode(osb, &inode_ac);
1638        if (status < 0) {
1639                if (status != -ENOSPC)
1640                        mlog_errno(status);
1641                goto bail;
1642        }
1643
1644        inode = ocfs2_get_init_inode(dir, S_IFLNK | S_IRWXUGO);
1645        if (!inode) {
1646                status = -ENOMEM;
1647                mlog_errno(status);
1648                goto bail;
1649        }
1650
1651        /* get security xattr */
1652        status = ocfs2_init_security_get(inode, dir, &si);
1653        if (status) {
1654                if (status == -EOPNOTSUPP)
1655                        si.enable = 0;
1656                else {
1657                        mlog_errno(status);
1658                        goto bail;
1659                }
1660        }
1661
1662        /* calculate meta data/clusters for setting security xattr */
1663        if (si.enable) {
1664                status = ocfs2_calc_security_init(dir, &si, &want_clusters,
1665                                                  &xattr_credits, &xattr_ac);
1666                if (status < 0) {
1667                        mlog_errno(status);
1668                        goto bail;
1669                }
1670        }
1671
1672        /* don't reserve bitmap space for fast symlinks. */
1673        if (l > ocfs2_fast_symlink_chars(sb))
1674                want_clusters += 1;
1675
1676        status = ocfs2_reserve_clusters(osb, want_clusters, &data_ac);
1677        if (status < 0) {
1678                if (status != -ENOSPC)
1679                        mlog_errno(status);
1680                goto bail;
1681        }
1682
1683        handle = ocfs2_start_trans(osb, credits + xattr_credits);
1684        if (IS_ERR(handle)) {
1685                status = PTR_ERR(handle);
1686                handle = NULL;
1687                mlog_errno(status);
1688                goto bail;
1689        }
1690
1691        /* We don't use standard VFS wrapper because we don't want vfs_dq_init
1692         * to be called. */
1693        if (sb_any_quota_active(osb->sb) &&
1694            osb->sb->dq_op->alloc_inode(inode, 1) == NO_QUOTA) {
1695                status = -EDQUOT;
1696                goto bail;
1697        }
1698        did_quota_inode = 1;
1699
1700        mlog_entry("(0x%p, 0x%p, %d, '%.*s')\n", dir, dentry,
1701                   inode->i_mode, dentry->d_name.len,
1702                   dentry->d_name.name);
1703
1704        status = ocfs2_mknod_locked(osb, dir, inode,
1705                                    0, &new_fe_bh, parent_fe_bh, handle,
1706                                    inode_ac);
1707        if (status < 0) {
1708                mlog_errno(status);
1709                goto bail;
1710        }
1711
1712        fe = (struct ocfs2_dinode *) new_fe_bh->b_data;
1713        inode->i_rdev = 0;
1714        newsize = l - 1;
1715        if (l > ocfs2_fast_symlink_chars(sb)) {
1716                u32 offset = 0;
1717
1718                inode->i_op = &ocfs2_symlink_inode_operations;
1719                if (vfs_dq_alloc_space_nodirty(inode,
1720                    ocfs2_clusters_to_bytes(osb->sb, 1))) {
1721                        status = -EDQUOT;
1722                        goto bail;
1723                }
1724                did_quota = 1;
1725                status = ocfs2_add_inode_data(osb, inode, &offset, 1, 0,
1726                                              new_fe_bh,
1727                                              handle, data_ac, NULL,
1728                                              NULL);
1729                if (status < 0) {
1730                        if (status != -ENOSPC && status != -EINTR) {
1731                                mlog(ML_ERROR,
1732                                     "Failed to extend file to %llu\n",
1733                                     (unsigned long long)newsize);
1734                                mlog_errno(status);
1735                                status = -ENOSPC;
1736                        }
1737                        goto bail;
1738                }
1739                i_size_write(inode, newsize);
1740                inode->i_blocks = ocfs2_inode_sector_count(inode);
1741        } else {
1742                inode->i_op = &ocfs2_fast_symlink_inode_operations;
1743                memcpy((char *) fe->id2.i_symlink, symname, l);
1744                i_size_write(inode, newsize);
1745                inode->i_blocks = 0;
1746        }
1747
1748        status = ocfs2_mark_inode_dirty(handle, inode, new_fe_bh);
1749        if (status < 0) {
1750                mlog_errno(status);
1751                goto bail;
1752        }
1753
1754        if (!ocfs2_inode_is_fast_symlink(inode)) {
1755                status = ocfs2_create_symlink_data(osb, handle, inode,
1756                                                   symname);
1757                if (status < 0) {
1758                        mlog_errno(status);
1759                        goto bail;
1760                }
1761        }
1762
1763        if (si.enable) {
1764                status = ocfs2_init_security_set(handle, inode, new_fe_bh, &si,
1765                                                 xattr_ac, data_ac);
1766                if (status < 0) {
1767                        mlog_errno(status);
1768                        goto bail;
1769                }
1770        }
1771
1772        status = ocfs2_add_entry(handle, dentry, inode,
1773                                 le64_to_cpu(fe->i_blkno), parent_fe_bh,
1774                                 &lookup);
1775        if (status < 0) {
1776                mlog_errno(status);
1777                goto bail;
1778        }
1779
1780        status = ocfs2_dentry_attach_lock(dentry, inode, OCFS2_I(dir)->ip_blkno);
1781        if (status) {
1782                mlog_errno(status);
1783                goto bail;
1784        }
1785
1786        insert_inode_hash(inode);
1787        dentry->d_op = &ocfs2_dentry_ops;
1788        d_instantiate(dentry, inode);
1789bail:
1790        if (status < 0 && did_quota)
1791                vfs_dq_free_space_nodirty(inode,
1792                                        ocfs2_clusters_to_bytes(osb->sb, 1));
1793        if (status < 0 && did_quota_inode)
1794                vfs_dq_free_inode(inode);
1795        if (handle)
1796                ocfs2_commit_trans(osb, handle);
1797
1798        ocfs2_inode_unlock(dir, 1);
1799
1800        brelse(new_fe_bh);
1801        brelse(parent_fe_bh);
1802        kfree(si.name);
1803        kfree(si.value);
1804        ocfs2_free_dir_lookup_result(&lookup);
1805        if (inode_ac)
1806                ocfs2_free_alloc_context(inode_ac);
1807        if (data_ac)
1808                ocfs2_free_alloc_context(data_ac);
1809        if (xattr_ac)
1810                ocfs2_free_alloc_context(xattr_ac);
1811        if ((status < 0) && inode) {
1812                clear_nlink(inode);
1813                iput(inode);
1814        }
1815
1816        mlog_exit(status);
1817
1818        return status;
1819}
1820
1821static int ocfs2_blkno_stringify(u64 blkno, char *name)
1822{
1823        int status, namelen;
1824
1825        mlog_entry_void();
1826
1827        namelen = snprintf(name, OCFS2_ORPHAN_NAMELEN + 1, "%016llx",
1828                           (long long)blkno);
1829        if (namelen <= 0) {
1830                if (namelen)
1831                        status = namelen;
1832                else
1833                        status = -EINVAL;
1834                mlog_errno(status);
1835                goto bail;
1836        }
1837        if (namelen != OCFS2_ORPHAN_NAMELEN) {
1838                status = -EINVAL;
1839                mlog_errno(status);
1840                goto bail;
1841        }
1842
1843        mlog(0, "built filename '%s' for orphan dir (len=%d)\n", name,
1844             namelen);
1845
1846        status = 0;
1847bail:
1848        mlog_exit(status);
1849        return status;
1850}
1851
1852static int ocfs2_prepare_orphan_dir(struct ocfs2_super *osb,
1853                                    struct inode **ret_orphan_dir,
1854                                    u64 blkno,
1855                                    char *name,
1856                                    struct ocfs2_dir_lookup_result *lookup)
1857{
1858        struct inode *orphan_dir_inode;
1859        struct buffer_head *orphan_dir_bh = NULL;
1860        int status = 0;
1861
1862        status = ocfs2_blkno_stringify(blkno, name);
1863        if (status < 0) {
1864                mlog_errno(status);
1865                return status;
1866        }
1867
1868        orphan_dir_inode = ocfs2_get_system_file_inode(osb,
1869                                                       ORPHAN_DIR_SYSTEM_INODE,
1870                                                       osb->slot_num);
1871        if (!orphan_dir_inode) {
1872                status = -ENOENT;
1873                mlog_errno(status);
1874                return status;
1875        }
1876
1877        mutex_lock(&orphan_dir_inode->i_mutex);
1878
1879        status = ocfs2_inode_lock(orphan_dir_inode, &orphan_dir_bh, 1);
1880        if (status < 0) {
1881                mlog_errno(status);
1882                goto leave;
1883        }
1884
1885        status = ocfs2_prepare_dir_for_insert(osb, orphan_dir_inode,
1886                                              orphan_dir_bh, name,
1887                                              OCFS2_ORPHAN_NAMELEN, lookup);
1888        if (status < 0) {
1889                ocfs2_inode_unlock(orphan_dir_inode, 1);
1890
1891                mlog_errno(status);
1892                goto leave;
1893        }
1894
1895        *ret_orphan_dir = orphan_dir_inode;
1896
1897leave:
1898        if (status) {
1899                mutex_unlock(&orphan_dir_inode->i_mutex);
1900                iput(orphan_dir_inode);
1901        }
1902
1903        brelse(orphan_dir_bh);
1904
1905        mlog_exit(status);
1906        return status;
1907}
1908
1909static int ocfs2_orphan_add(struct ocfs2_super *osb,
1910                            handle_t *handle,
1911                            struct inode *inode,
1912                            struct ocfs2_dinode *fe,
1913                            char *name,
1914                            struct ocfs2_dir_lookup_result *lookup,
1915                            struct inode *orphan_dir_inode)
1916{
1917        struct buffer_head *orphan_dir_bh = NULL;
1918        int status = 0;
1919        struct ocfs2_dinode *orphan_fe;
1920
1921        mlog_entry("(inode->i_ino = %lu)\n", inode->i_ino);
1922
1923        status = ocfs2_read_inode_block(orphan_dir_inode, &orphan_dir_bh);
1924        if (status < 0) {
1925                mlog_errno(status);
1926                goto leave;
1927        }
1928
1929        status = ocfs2_journal_access_di(handle,
1930                                         INODE_CACHE(orphan_dir_inode),
1931                                         orphan_dir_bh,
1932                                         OCFS2_JOURNAL_ACCESS_WRITE);
1933        if (status < 0) {
1934                mlog_errno(status);
1935                goto leave;
1936        }
1937
1938        /* we're a cluster, and nlink can change on disk from
1939         * underneath us... */
1940        orphan_fe = (struct ocfs2_dinode *) orphan_dir_bh->b_data;
1941        if (S_ISDIR(inode->i_mode))
1942                ocfs2_add_links_count(orphan_fe, 1);
1943        orphan_dir_inode->i_nlink = ocfs2_read_links_count(orphan_fe);
1944
1945        status = ocfs2_journal_dirty(handle, orphan_dir_bh);
1946        if (status < 0) {
1947                mlog_errno(status);
1948                goto leave;
1949        }
1950
1951        status = __ocfs2_add_entry(handle, orphan_dir_inode, name,
1952                                   OCFS2_ORPHAN_NAMELEN, inode,
1953                                   OCFS2_I(inode)->ip_blkno,
1954                                   orphan_dir_bh, lookup);
1955        if (status < 0) {
1956                mlog_errno(status);
1957                goto leave;
1958        }
1959
1960        le32_add_cpu(&fe->i_flags, OCFS2_ORPHANED_FL);
1961
1962        /* Record which orphan dir our inode now resides
1963         * in. delete_inode will use this to determine which orphan
1964         * dir to lock. */
1965        fe->i_orphaned_slot = cpu_to_le16(osb->slot_num);
1966
1967        mlog(0, "Inode %llu orphaned in slot %d\n",
1968             (unsigned long long)OCFS2_I(inode)->ip_blkno, osb->slot_num);
1969
1970leave:
1971        brelse(orphan_dir_bh);
1972
1973        mlog_exit(status);
1974        return status;
1975}
1976
1977/* unlike orphan_add, we expect the orphan dir to already be locked here. */
1978int ocfs2_orphan_del(struct ocfs2_super *osb,
1979                     handle_t *handle,
1980                     struct inode *orphan_dir_inode,
1981                     struct inode *inode,
1982                     struct buffer_head *orphan_dir_bh)
1983{
1984        char name[OCFS2_ORPHAN_NAMELEN + 1];
1985        struct ocfs2_dinode *orphan_fe;
1986        int status = 0;
1987        struct ocfs2_dir_lookup_result lookup = { NULL, };
1988
1989        mlog_entry_void();
1990
1991        status = ocfs2_blkno_stringify(OCFS2_I(inode)->ip_blkno, name);
1992        if (status < 0) {
1993                mlog_errno(status);
1994                goto leave;
1995        }
1996
1997        mlog(0, "removing '%s' from orphan dir %llu (namelen=%d)\n",
1998             name, (unsigned long long)OCFS2_I(orphan_dir_inode)->ip_blkno,
1999             OCFS2_ORPHAN_NAMELEN);
2000
2001        /* find it's spot in the orphan directory */
2002        status = ocfs2_find_entry(name, OCFS2_ORPHAN_NAMELEN, orphan_dir_inode,
2003                                  &lookup);
2004        if (status) {
2005                mlog_errno(status);
2006                goto leave;
2007        }
2008
2009        /* remove it from the orphan directory */
2010        status = ocfs2_delete_entry(handle, orphan_dir_inode, &lookup);
2011        if (status < 0) {
2012                mlog_errno(status);
2013                goto leave;
2014        }
2015
2016        status = ocfs2_journal_access_di(handle,
2017                                         INODE_CACHE(orphan_dir_inode),
2018                                         orphan_dir_bh,
2019                                         OCFS2_JOURNAL_ACCESS_WRITE);
2020        if (status < 0) {
2021                mlog_errno(status);
2022                goto leave;
2023        }
2024
2025        /* do the i_nlink dance! :) */
2026        orphan_fe = (struct ocfs2_dinode *) orphan_dir_bh->b_data;
2027        if (S_ISDIR(inode->i_mode))
2028                ocfs2_add_links_count(orphan_fe, -1);
2029        orphan_dir_inode->i_nlink = ocfs2_read_links_count(orphan_fe);
2030
2031        status = ocfs2_journal_dirty(handle, orphan_dir_bh);
2032        if (status < 0) {
2033                mlog_errno(status);
2034                goto leave;
2035        }
2036
2037leave:
2038        ocfs2_free_dir_lookup_result(&lookup);
2039
2040        mlog_exit(status);
2041        return status;
2042}
2043
2044int ocfs2_create_inode_in_orphan(struct inode *dir,
2045                                 int mode,
2046                                 struct inode **new_inode)
2047{
2048        int status, did_quota_inode = 0;
2049        struct inode *inode = NULL;
2050        struct inode *orphan_dir = NULL;
2051        struct ocfs2_super *osb = OCFS2_SB(dir->i_sb);
2052        struct ocfs2_dinode *di = NULL;
2053        handle_t *handle = NULL;
2054        char orphan_name[OCFS2_ORPHAN_NAMELEN + 1];
2055        struct buffer_head *parent_di_bh = NULL;
2056        struct buffer_head *new_di_bh = NULL;
2057        struct ocfs2_alloc_context *inode_ac = NULL;
2058        struct ocfs2_dir_lookup_result orphan_insert = { NULL, };
2059
2060        status = ocfs2_inode_lock(dir, &parent_di_bh, 1);
2061        if (status < 0) {
2062                if (status != -ENOENT)
2063                        mlog_errno(status);
2064                return status;
2065        }
2066
2067        /*
2068         * We give the orphan dir the root blkno to fake an orphan name,
2069         * and allocate enough space for our insertion.
2070         */
2071        status = ocfs2_prepare_orphan_dir(osb, &orphan_dir,
2072                                          osb->root_blkno,
2073                                          orphan_name, &orphan_insert);
2074        if (status < 0) {
2075                mlog_errno(status);
2076                goto leave;
2077        }
2078
2079        /* reserve an inode spot */
2080        status = ocfs2_reserve_new_inode(osb, &inode_ac);
2081        if (status < 0) {
2082                if (status != -ENOSPC)
2083                        mlog_errno(status);
2084                goto leave;
2085        }
2086
2087        inode = ocfs2_get_init_inode(dir, mode);
2088        if (!inode) {
2089                status = -ENOMEM;
2090                mlog_errno(status);
2091                goto leave;
2092        }
2093
2094        handle = ocfs2_start_trans(osb, ocfs2_mknod_credits(osb->sb, 0, 0));
2095        if (IS_ERR(handle)) {
2096                status = PTR_ERR(handle);
2097                handle = NULL;
2098                mlog_errno(status);
2099                goto leave;
2100        }
2101
2102        /* We don't use standard VFS wrapper because we don't want vfs_dq_init
2103         * to be called. */
2104        if (sb_any_quota_active(osb->sb) &&
2105            osb->sb->dq_op->alloc_inode(inode, 1) == NO_QUOTA) {
2106                status = -EDQUOT;
2107                goto leave;
2108        }
2109        did_quota_inode = 1;
2110
2111        /* do the real work now. */
2112        status = ocfs2_mknod_locked(osb, dir, inode,
2113                                    0, &new_di_bh, parent_di_bh, handle,
2114                                    inode_ac);
2115        if (status < 0) {
2116                mlog_errno(status);
2117                goto leave;
2118        }
2119
2120        status = ocfs2_blkno_stringify(OCFS2_I(inode)->ip_blkno, orphan_name);
2121        if (status < 0) {
2122                mlog_errno(status);
2123                goto leave;
2124        }
2125
2126        di = (struct ocfs2_dinode *)new_di_bh->b_data;
2127        status = ocfs2_orphan_add(osb, handle, inode, di, orphan_name,
2128                                  &orphan_insert, orphan_dir);
2129        if (status < 0) {
2130                mlog_errno(status);
2131                goto leave;
2132        }
2133
2134        /* get open lock so that only nodes can't remove it from orphan dir. */
2135        status = ocfs2_open_lock(inode);
2136        if (status < 0)
2137                mlog_errno(status);
2138
2139leave:
2140        if (status < 0 && did_quota_inode)
2141                vfs_dq_free_inode(inode);
2142        if (handle)
2143                ocfs2_commit_trans(osb, handle);
2144
2145        if (orphan_dir) {
2146                /* This was locked for us in ocfs2_prepare_orphan_dir() */
2147                ocfs2_inode_unlock(orphan_dir, 1);
2148                mutex_unlock(&orphan_dir->i_mutex);
2149                iput(orphan_dir);
2150        }
2151
2152        if (status == -ENOSPC)
2153                mlog(0, "Disk is full\n");
2154
2155        if ((status < 0) && inode) {
2156                clear_nlink(inode);
2157                iput(inode);
2158        }
2159
2160        if (inode_ac)
2161                ocfs2_free_alloc_context(inode_ac);
2162
2163        brelse(new_di_bh);
2164
2165        if (!status)
2166                *new_inode = inode;
2167
2168        ocfs2_free_dir_lookup_result(&orphan_insert);
2169
2170        ocfs2_inode_unlock(dir, 1);
2171        brelse(parent_di_bh);
2172        return status;
2173}
2174
2175int ocfs2_mv_orphaned_inode_to_new(struct inode *dir,
2176                                   struct inode *inode,
2177                                   struct dentry *dentry)
2178{
2179        int status = 0;
2180        struct buffer_head *parent_di_bh = NULL;
2181        handle_t *handle = NULL;
2182        struct ocfs2_super *osb = OCFS2_SB(dir->i_sb);
2183        struct ocfs2_dinode *dir_di, *di;
2184        struct inode *orphan_dir_inode = NULL;
2185        struct buffer_head *orphan_dir_bh = NULL;
2186        struct buffer_head *di_bh = NULL;
2187        struct ocfs2_dir_lookup_result lookup = { NULL, };
2188
2189        mlog_entry("(0x%p, 0x%p, %.*s')\n", dir, dentry,
2190                   dentry->d_name.len, dentry->d_name.name);
2191
2192        status = ocfs2_inode_lock(dir, &parent_di_bh, 1);
2193        if (status < 0) {
2194                if (status != -ENOENT)
2195                        mlog_errno(status);
2196                return status;
2197        }
2198
2199        dir_di = (struct ocfs2_dinode *) parent_di_bh->b_data;
2200        if (!dir_di->i_links_count) {
2201                /* can't make a file in a deleted directory. */
2202                status = -ENOENT;
2203                goto leave;
2204        }
2205
2206        status = ocfs2_check_dir_for_entry(dir, dentry->d_name.name,
2207                                           dentry->d_name.len);
2208        if (status)
2209                goto leave;
2210
2211        /* get a spot inside the dir. */
2212        status = ocfs2_prepare_dir_for_insert(osb, dir, parent_di_bh,
2213                                              dentry->d_name.name,
2214                                              dentry->d_name.len, &lookup);
2215        if (status < 0) {
2216                mlog_errno(status);
2217                goto leave;
2218        }
2219
2220        orphan_dir_inode = ocfs2_get_system_file_inode(osb,
2221                                                       ORPHAN_DIR_SYSTEM_INODE,
2222                                                       osb->slot_num);
2223        if (!orphan_dir_inode) {
2224                status = -EEXIST;
2225                mlog_errno(status);
2226                goto leave;
2227        }
2228
2229        mutex_lock(&orphan_dir_inode->i_mutex);
2230
2231        status = ocfs2_inode_lock(orphan_dir_inode, &orphan_dir_bh, 1);
2232        if (status < 0) {
2233                mlog_errno(status);
2234                mutex_unlock(&orphan_dir_inode->i_mutex);
2235                iput(orphan_dir_inode);
2236                goto leave;
2237        }
2238
2239        status = ocfs2_read_inode_block(inode, &di_bh);
2240        if (status < 0) {
2241                mlog_errno(status);
2242                goto orphan_unlock;
2243        }
2244
2245        handle = ocfs2_start_trans(osb, ocfs2_rename_credits(osb->sb));
2246        if (IS_ERR(handle)) {
2247                status = PTR_ERR(handle);
2248                handle = NULL;
2249                mlog_errno(status);
2250                goto orphan_unlock;
2251        }
2252
2253        status = ocfs2_journal_access_di(handle, INODE_CACHE(inode),
2254                                         di_bh, OCFS2_JOURNAL_ACCESS_WRITE);
2255        if (status < 0) {
2256                mlog_errno(status);
2257                goto out_commit;
2258        }
2259
2260        status = ocfs2_orphan_del(osb, handle, orphan_dir_inode, inode,
2261                                  orphan_dir_bh);
2262        if (status < 0) {
2263                mlog_errno(status);
2264                goto out_commit;
2265        }
2266
2267        di = (struct ocfs2_dinode *)di_bh->b_data;
2268        le32_add_cpu(&di->i_flags, -OCFS2_ORPHANED_FL);
2269        di->i_orphaned_slot = 0;
2270        ocfs2_journal_dirty(handle, di_bh);
2271
2272        status = ocfs2_add_entry(handle, dentry, inode,
2273                                 OCFS2_I(inode)->ip_blkno, parent_di_bh,
2274                                 &lookup);
2275        if (status < 0) {
2276                mlog_errno(status);
2277                goto out_commit;
2278        }
2279
2280        status = ocfs2_dentry_attach_lock(dentry, inode,
2281                                          OCFS2_I(dir)->ip_blkno);
2282        if (status) {
2283                mlog_errno(status);
2284                goto out_commit;
2285        }
2286
2287        insert_inode_hash(inode);
2288        dentry->d_op = &ocfs2_dentry_ops;
2289        d_instantiate(dentry, inode);
2290        status = 0;
2291out_commit:
2292        ocfs2_commit_trans(osb, handle);
2293orphan_unlock:
2294        ocfs2_inode_unlock(orphan_dir_inode, 1);
2295        mutex_unlock(&orphan_dir_inode->i_mutex);
2296        iput(orphan_dir_inode);
2297leave:
2298
2299        ocfs2_inode_unlock(dir, 1);
2300
2301        brelse(di_bh);
2302        brelse(parent_di_bh);
2303        brelse(orphan_dir_bh);
2304
2305        ocfs2_free_dir_lookup_result(&lookup);
2306
2307        mlog_exit(status);
2308
2309        return status;
2310}
2311
2312const struct inode_operations ocfs2_dir_iops = {
2313        .create         = ocfs2_create,
2314        .lookup         = ocfs2_lookup,
2315        .link           = ocfs2_link,
2316        .unlink         = ocfs2_unlink,
2317        .rmdir          = ocfs2_unlink,
2318        .symlink        = ocfs2_symlink,
2319        .mkdir          = ocfs2_mkdir,
2320        .mknod          = ocfs2_mknod,
2321        .rename         = ocfs2_rename,
2322        .setattr        = ocfs2_setattr,
2323        .getattr        = ocfs2_getattr,
2324        .permission     = ocfs2_permission,
2325        .setxattr       = generic_setxattr,
2326        .getxattr       = generic_getxattr,
2327        .listxattr      = ocfs2_listxattr,
2328        .removexattr    = generic_removexattr,
2329};
2330