cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

namei.c (71187B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * namei.c
      4 *
      5 * Create and rename file, directory, symlinks
      6 *
      7 * Copyright (C) 2002, 2004 Oracle.  All rights reserved.
      8 *
      9 *  Portions of this code from linux/fs/ext3/dir.c
     10 *
     11 *  Copyright (C) 1992, 1993, 1994, 1995
     12 *  Remy Card (card@masi.ibp.fr)
     13 *  Laboratoire MASI - Institut Blaise pascal
     14 *  Universite Pierre et Marie Curie (Paris VI)
     15 *
     16 *   from
     17 *
     18 *   linux/fs/minix/dir.c
     19 *
     20 *   Copyright (C) 1991, 1992 Linux Torvalds
     21 */
     22
     23#include <linux/fs.h>
     24#include <linux/types.h>
     25#include <linux/slab.h>
     26#include <linux/highmem.h>
     27#include <linux/quotaops.h>
     28#include <linux/iversion.h>
     29
     30#include <cluster/masklog.h>
     31
     32#include "ocfs2.h"
     33
     34#include "alloc.h"
     35#include "dcache.h"
     36#include "dir.h"
     37#include "dlmglue.h"
     38#include "extent_map.h"
     39#include "file.h"
     40#include "inode.h"
     41#include "journal.h"
     42#include "namei.h"
     43#include "suballoc.h"
     44#include "super.h"
     45#include "symlink.h"
     46#include "sysfile.h"
     47#include "uptodate.h"
     48#include "xattr.h"
     49#include "acl.h"
     50#include "ocfs2_trace.h"
     51#include "ioctl.h"
     52
     53#include "buffer_head_io.h"
     54
     55static int ocfs2_mknod_locked(struct ocfs2_super *osb,
     56			      struct inode *dir,
     57			      struct inode *inode,
     58			      dev_t dev,
     59			      struct buffer_head **new_fe_bh,
     60			      struct buffer_head *parent_fe_bh,
     61			      handle_t *handle,
     62			      struct ocfs2_alloc_context *inode_ac);
     63
     64static int ocfs2_prepare_orphan_dir(struct ocfs2_super *osb,
     65				    struct inode **ret_orphan_dir,
     66				    u64 blkno,
     67				    char *name,
     68				    struct ocfs2_dir_lookup_result *lookup,
     69				    bool dio);
     70
     71static int ocfs2_orphan_add(struct ocfs2_super *osb,
     72			    handle_t *handle,
     73			    struct inode *inode,
     74			    struct buffer_head *fe_bh,
     75			    char *name,
     76			    struct ocfs2_dir_lookup_result *lookup,
     77			    struct inode *orphan_dir_inode,
     78			    bool dio);
     79
     80static int ocfs2_create_symlink_data(struct ocfs2_super *osb,
     81				     handle_t *handle,
     82				     struct inode *inode,
     83				     const char *symname);
     84
     85static int ocfs2_double_lock(struct ocfs2_super *osb,
     86			     struct buffer_head **bh1,
     87			     struct inode *inode1,
     88			     struct buffer_head **bh2,
     89			     struct inode *inode2,
     90			     int rename);
     91
     92static void ocfs2_double_unlock(struct inode *inode1, struct inode *inode2);
     93/* An orphan dir name is an 8 byte value, printed as a hex string */
     94#define OCFS2_ORPHAN_NAMELEN ((int)(2 * sizeof(u64)))
     95
     96static struct dentry *ocfs2_lookup(struct inode *dir, struct dentry *dentry,
     97				   unsigned int flags)
     98{
     99	int status;
    100	u64 blkno;
    101	struct inode *inode = NULL;
    102	struct dentry *ret;
    103	struct ocfs2_inode_info *oi;
    104
    105	trace_ocfs2_lookup(dir, dentry, dentry->d_name.len,
    106			   dentry->d_name.name,
    107			   (unsigned long long)OCFS2_I(dir)->ip_blkno, 0);
    108
    109	if (dentry->d_name.len > OCFS2_MAX_FILENAME_LEN) {
    110		ret = ERR_PTR(-ENAMETOOLONG);
    111		goto bail;
    112	}
    113
    114	status = ocfs2_inode_lock_nested(dir, NULL, 0, OI_LS_PARENT);
    115	if (status < 0) {
    116		if (status != -ENOENT)
    117			mlog_errno(status);
    118		ret = ERR_PTR(status);
    119		goto bail;
    120	}
    121
    122	status = ocfs2_lookup_ino_from_name(dir, dentry->d_name.name,
    123					    dentry->d_name.len, &blkno);
    124	if (status < 0)
    125		goto bail_add;
    126
    127	inode = ocfs2_iget(OCFS2_SB(dir->i_sb), blkno, 0, 0);
    128	if (IS_ERR(inode)) {
    129		ret = ERR_PTR(-EACCES);
    130		goto bail_unlock;
    131	}
    132
    133	oi = OCFS2_I(inode);
    134	/* Clear any orphaned state... If we were able to look up the
    135	 * inode from a directory, it certainly can't be orphaned. We
    136	 * might have the bad state from a node which intended to
    137	 * orphan this inode but crashed before it could commit the
    138	 * unlink. */
    139	spin_lock(&oi->ip_lock);
    140	oi->ip_flags &= ~OCFS2_INODE_MAYBE_ORPHANED;
    141	spin_unlock(&oi->ip_lock);
    142
    143bail_add:
    144	ret = d_splice_alias(inode, dentry);
    145
    146	if (inode) {
    147		/*
    148		 * If d_splice_alias() finds a DCACHE_DISCONNECTED
    149		 * dentry, it will d_move() it on top of ourse. The
    150		 * return value will indicate this however, so in
    151		 * those cases, we switch them around for the locking
    152		 * code.
    153		 *
    154		 * NOTE: This dentry already has ->d_op set from
    155		 * ocfs2_get_parent() and ocfs2_get_dentry()
    156		 */
    157		if (!IS_ERR_OR_NULL(ret))
    158			dentry = ret;
    159
    160		status = ocfs2_dentry_attach_lock(dentry, inode,
    161						  OCFS2_I(dir)->ip_blkno);
    162		if (status) {
    163			mlog_errno(status);
    164			ret = ERR_PTR(status);
    165			goto bail_unlock;
    166		}
    167	} else
    168		ocfs2_dentry_attach_gen(dentry);
    169
    170bail_unlock:
    171	/* Don't drop the cluster lock until *after* the d_add --
    172	 * unlink on another node will message us to remove that
    173	 * dentry under this lock so otherwise we can race this with
    174	 * the downconvert thread and have a stale dentry. */
    175	ocfs2_inode_unlock(dir, 0);
    176
    177bail:
    178
    179	trace_ocfs2_lookup_ret(ret);
    180
    181	return ret;
    182}
    183
    184static struct inode *ocfs2_get_init_inode(struct inode *dir, umode_t mode)
    185{
    186	struct inode *inode;
    187	int status;
    188
    189	inode = new_inode(dir->i_sb);
    190	if (!inode) {
    191		mlog(ML_ERROR, "new_inode failed!\n");
    192		return ERR_PTR(-ENOMEM);
    193	}
    194
    195	/* populate as many fields early on as possible - many of
    196	 * these are used by the support functions here and in
    197	 * callers. */
    198	if (S_ISDIR(mode))
    199		set_nlink(inode, 2);
    200	inode_init_owner(&init_user_ns, inode, dir, mode);
    201	status = dquot_initialize(inode);
    202	if (status)
    203		return ERR_PTR(status);
    204
    205	return inode;
    206}
    207
    208static void ocfs2_cleanup_add_entry_failure(struct ocfs2_super *osb,
    209		struct dentry *dentry, struct inode *inode)
    210{
    211	struct ocfs2_dentry_lock *dl = dentry->d_fsdata;
    212
    213	ocfs2_simple_drop_lockres(osb, &dl->dl_lockres);
    214	ocfs2_lock_res_free(&dl->dl_lockres);
    215	BUG_ON(dl->dl_count != 1);
    216	spin_lock(&dentry_attach_lock);
    217	dentry->d_fsdata = NULL;
    218	spin_unlock(&dentry_attach_lock);
    219	kfree(dl);
    220	iput(inode);
    221}
    222
    223static int ocfs2_mknod(struct user_namespace *mnt_userns,
    224		       struct inode *dir,
    225		       struct dentry *dentry,
    226		       umode_t mode,
    227		       dev_t dev)
    228{
    229	int status = 0;
    230	struct buffer_head *parent_fe_bh = NULL;
    231	handle_t *handle = NULL;
    232	struct ocfs2_super *osb;
    233	struct ocfs2_dinode *dirfe;
    234	struct buffer_head *new_fe_bh = NULL;
    235	struct inode *inode = NULL;
    236	struct ocfs2_alloc_context *inode_ac = NULL;
    237	struct ocfs2_alloc_context *data_ac = NULL;
    238	struct ocfs2_alloc_context *meta_ac = NULL;
    239	int want_clusters = 0;
    240	int want_meta = 0;
    241	int xattr_credits = 0;
    242	struct ocfs2_security_xattr_info si = {
    243		.enable = 1,
    244	};
    245	int did_quota_inode = 0;
    246	struct ocfs2_dir_lookup_result lookup = { NULL, };
    247	sigset_t oldset;
    248	int did_block_signals = 0;
    249	struct ocfs2_dentry_lock *dl = NULL;
    250
    251	trace_ocfs2_mknod(dir, dentry, dentry->d_name.len, dentry->d_name.name,
    252			  (unsigned long long)OCFS2_I(dir)->ip_blkno,
    253			  (unsigned long)dev, mode);
    254
    255	status = dquot_initialize(dir);
    256	if (status) {
    257		mlog_errno(status);
    258		return status;
    259	}
    260
    261	/* get our super block */
    262	osb = OCFS2_SB(dir->i_sb);
    263
    264	status = ocfs2_inode_lock(dir, &parent_fe_bh, 1);
    265	if (status < 0) {
    266		if (status != -ENOENT)
    267			mlog_errno(status);
    268		return status;
    269	}
    270
    271	if (S_ISDIR(mode) && (dir->i_nlink >= ocfs2_link_max(osb))) {
    272		status = -EMLINK;
    273		goto leave;
    274	}
    275
    276	dirfe = (struct ocfs2_dinode *) parent_fe_bh->b_data;
    277	if (!ocfs2_read_links_count(dirfe)) {
    278		/* can't make a file in a deleted directory. */
    279		status = -ENOENT;
    280		goto leave;
    281	}
    282
    283	status = ocfs2_check_dir_for_entry(dir, dentry->d_name.name,
    284					   dentry->d_name.len);
    285	if (status)
    286		goto leave;
    287
    288	/* get a spot inside the dir. */
    289	status = ocfs2_prepare_dir_for_insert(osb, dir, parent_fe_bh,
    290					      dentry->d_name.name,
    291					      dentry->d_name.len, &lookup);
    292	if (status < 0) {
    293		mlog_errno(status);
    294		goto leave;
    295	}
    296
    297	/* reserve an inode spot */
    298	status = ocfs2_reserve_new_inode(osb, &inode_ac);
    299	if (status < 0) {
    300		if (status != -ENOSPC)
    301			mlog_errno(status);
    302		goto leave;
    303	}
    304
    305	inode = ocfs2_get_init_inode(dir, mode);
    306	if (IS_ERR(inode)) {
    307		status = PTR_ERR(inode);
    308		inode = NULL;
    309		mlog_errno(status);
    310		goto leave;
    311	}
    312
    313	/* get security xattr */
    314	status = ocfs2_init_security_get(inode, dir, &dentry->d_name, &si);
    315	if (status) {
    316		if (status == -EOPNOTSUPP)
    317			si.enable = 0;
    318		else {
    319			mlog_errno(status);
    320			goto leave;
    321		}
    322	}
    323
    324	/* calculate meta data/clusters for setting security and acl xattr */
    325	status = ocfs2_calc_xattr_init(dir, parent_fe_bh, mode,
    326				       &si, &want_clusters,
    327				       &xattr_credits, &want_meta);
    328	if (status < 0) {
    329		mlog_errno(status);
    330		goto leave;
    331	}
    332
    333	/* Reserve a cluster if creating an extent based directory. */
    334	if (S_ISDIR(mode) && !ocfs2_supports_inline_data(osb)) {
    335		want_clusters += 1;
    336
    337		/* Dir indexing requires extra space as well */
    338		if (ocfs2_supports_indexed_dirs(osb))
    339			want_meta++;
    340	}
    341
    342	status = ocfs2_reserve_new_metadata_blocks(osb, want_meta, &meta_ac);
    343	if (status < 0) {
    344		if (status != -ENOSPC)
    345			mlog_errno(status);
    346		goto leave;
    347	}
    348
    349	status = ocfs2_reserve_clusters(osb, want_clusters, &data_ac);
    350	if (status < 0) {
    351		if (status != -ENOSPC)
    352			mlog_errno(status);
    353		goto leave;
    354	}
    355
    356	handle = ocfs2_start_trans(osb, ocfs2_mknod_credits(osb->sb,
    357							    S_ISDIR(mode),
    358							    xattr_credits));
    359	if (IS_ERR(handle)) {
    360		status = PTR_ERR(handle);
    361		handle = NULL;
    362		mlog_errno(status);
    363		goto leave;
    364	}
    365
    366	/* Starting to change things, restart is no longer possible. */
    367	ocfs2_block_signals(&oldset);
    368	did_block_signals = 1;
    369
    370	status = dquot_alloc_inode(inode);
    371	if (status)
    372		goto leave;
    373	did_quota_inode = 1;
    374
    375	/* do the real work now. */
    376	status = ocfs2_mknod_locked(osb, dir, inode, dev,
    377				    &new_fe_bh, parent_fe_bh, handle,
    378				    inode_ac);
    379	if (status < 0) {
    380		mlog_errno(status);
    381		goto leave;
    382	}
    383
    384	if (S_ISDIR(mode)) {
    385		status = ocfs2_fill_new_dir(osb, handle, dir, inode,
    386					    new_fe_bh, data_ac, meta_ac);
    387		if (status < 0) {
    388			mlog_errno(status);
    389			goto leave;
    390		}
    391
    392		status = ocfs2_journal_access_di(handle, INODE_CACHE(dir),
    393						 parent_fe_bh,
    394						 OCFS2_JOURNAL_ACCESS_WRITE);
    395		if (status < 0) {
    396			mlog_errno(status);
    397			goto leave;
    398		}
    399		ocfs2_add_links_count(dirfe, 1);
    400		ocfs2_journal_dirty(handle, parent_fe_bh);
    401		inc_nlink(dir);
    402	}
    403
    404	status = ocfs2_init_acl(handle, inode, dir, new_fe_bh, parent_fe_bh,
    405			 meta_ac, data_ac);
    406
    407	if (status < 0) {
    408		mlog_errno(status);
    409		goto roll_back;
    410	}
    411
    412	if (si.enable) {
    413		status = ocfs2_init_security_set(handle, inode, new_fe_bh, &si,
    414						 meta_ac, data_ac);
    415		if (status < 0) {
    416			mlog_errno(status);
    417			goto roll_back;
    418		}
    419	}
    420
    421	/*
    422	 * Do this before adding the entry to the directory. We add
    423	 * also set d_op after success so that ->d_iput() will cleanup
    424	 * the dentry lock even if ocfs2_add_entry() fails below.
    425	 */
    426	status = ocfs2_dentry_attach_lock(dentry, inode,
    427					  OCFS2_I(dir)->ip_blkno);
    428	if (status) {
    429		mlog_errno(status);
    430		goto roll_back;
    431	}
    432
    433	dl = dentry->d_fsdata;
    434
    435	status = ocfs2_add_entry(handle, dentry, inode,
    436				 OCFS2_I(inode)->ip_blkno, parent_fe_bh,
    437				 &lookup);
    438	if (status < 0) {
    439		mlog_errno(status);
    440		goto roll_back;
    441	}
    442
    443	insert_inode_hash(inode);
    444	d_instantiate(dentry, inode);
    445	status = 0;
    446
    447roll_back:
    448	if (status < 0 && S_ISDIR(mode)) {
    449		ocfs2_add_links_count(dirfe, -1);
    450		drop_nlink(dir);
    451	}
    452
    453leave:
    454	if (status < 0 && did_quota_inode)
    455		dquot_free_inode(inode);
    456	if (handle)
    457		ocfs2_commit_trans(osb, handle);
    458
    459	ocfs2_inode_unlock(dir, 1);
    460	if (did_block_signals)
    461		ocfs2_unblock_signals(&oldset);
    462
    463	brelse(new_fe_bh);
    464	brelse(parent_fe_bh);
    465	kfree(si.value);
    466
    467	ocfs2_free_dir_lookup_result(&lookup);
    468
    469	if (inode_ac)
    470		ocfs2_free_alloc_context(inode_ac);
    471
    472	if (data_ac)
    473		ocfs2_free_alloc_context(data_ac);
    474
    475	if (meta_ac)
    476		ocfs2_free_alloc_context(meta_ac);
    477
    478	/*
    479	 * We should call iput after the i_rwsem of the bitmap been
    480	 * unlocked in ocfs2_free_alloc_context, or the
    481	 * ocfs2_delete_inode will mutex_lock again.
    482	 */
    483	if ((status < 0) && inode) {
    484		if (dl)
    485			ocfs2_cleanup_add_entry_failure(osb, dentry, inode);
    486
    487		OCFS2_I(inode)->ip_flags |= OCFS2_INODE_SKIP_ORPHAN_DIR;
    488		clear_nlink(inode);
    489		iput(inode);
    490	}
    491
    492	if (status)
    493		mlog_errno(status);
    494
    495	return status;
    496}
    497
    498static int __ocfs2_mknod_locked(struct inode *dir,
    499				struct inode *inode,
    500				dev_t dev,
    501				struct buffer_head **new_fe_bh,
    502				struct buffer_head *parent_fe_bh,
    503				handle_t *handle,
    504				struct ocfs2_alloc_context *inode_ac,
    505				u64 fe_blkno, u64 suballoc_loc, u16 suballoc_bit)
    506{
    507	int status = 0;
    508	struct ocfs2_super *osb = OCFS2_SB(dir->i_sb);
    509	struct ocfs2_dinode *fe = NULL;
    510	struct ocfs2_extent_list *fel;
    511	u16 feat;
    512	struct ocfs2_inode_info *oi = OCFS2_I(inode);
    513	struct timespec64 ts;
    514
    515	*new_fe_bh = NULL;
    516
    517	/* populate as many fields early on as possible - many of
    518	 * these are used by the support functions here and in
    519	 * callers. */
    520	inode->i_ino = ino_from_blkno(osb->sb, fe_blkno);
    521	oi->ip_blkno = fe_blkno;
    522	spin_lock(&osb->osb_lock);
    523	inode->i_generation = osb->s_next_generation++;
    524	spin_unlock(&osb->osb_lock);
    525
    526	*new_fe_bh = sb_getblk(osb->sb, fe_blkno);
    527	if (!*new_fe_bh) {
    528		status = -ENOMEM;
    529		mlog_errno(status);
    530		goto leave;
    531	}
    532	ocfs2_set_new_buffer_uptodate(INODE_CACHE(inode), *new_fe_bh);
    533
    534	status = ocfs2_journal_access_di(handle, INODE_CACHE(inode),
    535					 *new_fe_bh,
    536					 OCFS2_JOURNAL_ACCESS_CREATE);
    537	if (status < 0) {
    538		mlog_errno(status);
    539		goto leave;
    540	}
    541
    542	fe = (struct ocfs2_dinode *) (*new_fe_bh)->b_data;
    543	memset(fe, 0, osb->sb->s_blocksize);
    544
    545	fe->i_generation = cpu_to_le32(inode->i_generation);
    546	fe->i_fs_generation = cpu_to_le32(osb->fs_generation);
    547	fe->i_blkno = cpu_to_le64(fe_blkno);
    548	fe->i_suballoc_loc = cpu_to_le64(suballoc_loc);
    549	fe->i_suballoc_bit = cpu_to_le16(suballoc_bit);
    550	fe->i_suballoc_slot = cpu_to_le16(inode_ac->ac_alloc_slot);
    551	fe->i_uid = cpu_to_le32(i_uid_read(inode));
    552	fe->i_gid = cpu_to_le32(i_gid_read(inode));
    553	fe->i_mode = cpu_to_le16(inode->i_mode);
    554	if (S_ISCHR(inode->i_mode) || S_ISBLK(inode->i_mode))
    555		fe->id1.dev1.i_rdev = cpu_to_le64(huge_encode_dev(dev));
    556
    557	ocfs2_set_links_count(fe, inode->i_nlink);
    558
    559	fe->i_last_eb_blk = 0;
    560	strcpy(fe->i_signature, OCFS2_INODE_SIGNATURE);
    561	fe->i_flags |= cpu_to_le32(OCFS2_VALID_FL);
    562	ktime_get_real_ts64(&ts);
    563	fe->i_atime = fe->i_ctime = fe->i_mtime =
    564		cpu_to_le64(ts.tv_sec);
    565	fe->i_mtime_nsec = fe->i_ctime_nsec = fe->i_atime_nsec =
    566		cpu_to_le32(ts.tv_nsec);
    567	fe->i_dtime = 0;
    568
    569	/*
    570	 * If supported, directories start with inline data. If inline
    571	 * isn't supported, but indexing is, we start them as indexed.
    572	 */
    573	feat = le16_to_cpu(fe->i_dyn_features);
    574	if (S_ISDIR(inode->i_mode) && ocfs2_supports_inline_data(osb)) {
    575		fe->i_dyn_features = cpu_to_le16(feat | OCFS2_INLINE_DATA_FL);
    576
    577		fe->id2.i_data.id_count = cpu_to_le16(
    578				ocfs2_max_inline_data_with_xattr(osb->sb, fe));
    579	} else {
    580		fel = &fe->id2.i_list;
    581		fel->l_tree_depth = 0;
    582		fel->l_next_free_rec = 0;
    583		fel->l_count = cpu_to_le16(ocfs2_extent_recs_per_inode(osb->sb));
    584	}
    585
    586	ocfs2_journal_dirty(handle, *new_fe_bh);
    587
    588	ocfs2_populate_inode(inode, fe, 1);
    589	ocfs2_ci_set_new(osb, INODE_CACHE(inode));
    590	if (!ocfs2_mount_local(osb)) {
    591		status = ocfs2_create_new_inode_locks(inode);
    592		if (status < 0)
    593			mlog_errno(status);
    594	}
    595
    596	ocfs2_update_inode_fsync_trans(handle, inode, 1);
    597
    598leave:
    599	if (status < 0) {
    600		if (*new_fe_bh) {
    601			brelse(*new_fe_bh);
    602			*new_fe_bh = NULL;
    603		}
    604	}
    605
    606	if (status)
    607		mlog_errno(status);
    608	return status;
    609}
    610
    611static int ocfs2_mknod_locked(struct ocfs2_super *osb,
    612			      struct inode *dir,
    613			      struct inode *inode,
    614			      dev_t dev,
    615			      struct buffer_head **new_fe_bh,
    616			      struct buffer_head *parent_fe_bh,
    617			      handle_t *handle,
    618			      struct ocfs2_alloc_context *inode_ac)
    619{
    620	int status = 0;
    621	u64 suballoc_loc, fe_blkno = 0;
    622	u16 suballoc_bit;
    623
    624	*new_fe_bh = NULL;
    625
    626	status = ocfs2_claim_new_inode(handle, dir, parent_fe_bh,
    627				       inode_ac, &suballoc_loc,
    628				       &suballoc_bit, &fe_blkno);
    629	if (status < 0) {
    630		mlog_errno(status);
    631		return status;
    632	}
    633
    634	status = __ocfs2_mknod_locked(dir, inode, dev, new_fe_bh,
    635				    parent_fe_bh, handle, inode_ac,
    636				    fe_blkno, suballoc_loc, suballoc_bit);
    637	if (status < 0) {
    638		u64 bg_blkno = ocfs2_which_suballoc_group(fe_blkno, suballoc_bit);
    639		int tmp = ocfs2_free_suballoc_bits(handle, inode_ac->ac_inode,
    640				inode_ac->ac_bh, suballoc_bit, bg_blkno, 1);
    641		if (tmp)
    642			mlog_errno(tmp);
    643	}
    644
    645	return status;
    646}
    647
    648static int ocfs2_mkdir(struct user_namespace *mnt_userns,
    649		       struct inode *dir,
    650		       struct dentry *dentry,
    651		       umode_t mode)
    652{
    653	int ret;
    654
    655	trace_ocfs2_mkdir(dir, dentry, dentry->d_name.len, dentry->d_name.name,
    656			  OCFS2_I(dir)->ip_blkno, mode);
    657	ret = ocfs2_mknod(&init_user_ns, dir, dentry, mode | S_IFDIR, 0);
    658	if (ret)
    659		mlog_errno(ret);
    660
    661	return ret;
    662}
    663
    664static int ocfs2_create(struct user_namespace *mnt_userns,
    665			struct inode *dir,
    666			struct dentry *dentry,
    667			umode_t mode,
    668			bool excl)
    669{
    670	int ret;
    671
    672	trace_ocfs2_create(dir, dentry, dentry->d_name.len, dentry->d_name.name,
    673			   (unsigned long long)OCFS2_I(dir)->ip_blkno, mode);
    674	ret = ocfs2_mknod(&init_user_ns, dir, dentry, mode | S_IFREG, 0);
    675	if (ret)
    676		mlog_errno(ret);
    677
    678	return ret;
    679}
    680
    681static int ocfs2_link(struct dentry *old_dentry,
    682		      struct inode *dir,
    683		      struct dentry *dentry)
    684{
    685	handle_t *handle;
    686	struct inode *inode = d_inode(old_dentry);
    687	struct inode *old_dir = d_inode(old_dentry->d_parent);
    688	int err;
    689	struct buffer_head *fe_bh = NULL;
    690	struct buffer_head *old_dir_bh = NULL;
    691	struct buffer_head *parent_fe_bh = NULL;
    692	struct ocfs2_dinode *fe = NULL;
    693	struct ocfs2_super *osb = OCFS2_SB(dir->i_sb);
    694	struct ocfs2_dir_lookup_result lookup = { NULL, };
    695	sigset_t oldset;
    696	u64 old_de_ino;
    697
    698	trace_ocfs2_link((unsigned long long)OCFS2_I(inode)->ip_blkno,
    699			 old_dentry->d_name.len, old_dentry->d_name.name,
    700			 dentry->d_name.len, dentry->d_name.name);
    701
    702	if (S_ISDIR(inode->i_mode))
    703		return -EPERM;
    704
    705	err = dquot_initialize(dir);
    706	if (err) {
    707		mlog_errno(err);
    708		return err;
    709	}
    710
    711	err = ocfs2_double_lock(osb, &old_dir_bh, old_dir,
    712			&parent_fe_bh, dir, 0);
    713	if (err < 0) {
    714		if (err != -ENOENT)
    715			mlog_errno(err);
    716		return err;
    717	}
    718
    719	/* make sure both dirs have bhs
    720	 * get an extra ref on old_dir_bh if old==new */
    721	if (!parent_fe_bh) {
    722		if (old_dir_bh) {
    723			parent_fe_bh = old_dir_bh;
    724			get_bh(parent_fe_bh);
    725		} else {
    726			mlog(ML_ERROR, "%s: no old_dir_bh!\n", osb->uuid_str);
    727			err = -EIO;
    728			goto out;
    729		}
    730	}
    731
    732	if (!dir->i_nlink) {
    733		err = -ENOENT;
    734		goto out;
    735	}
    736
    737	err = ocfs2_lookup_ino_from_name(old_dir, old_dentry->d_name.name,
    738			old_dentry->d_name.len, &old_de_ino);
    739	if (err) {
    740		err = -ENOENT;
    741		goto out;
    742	}
    743
    744	/*
    745	 * Check whether another node removed the source inode while we
    746	 * were in the vfs.
    747	 */
    748	if (old_de_ino != OCFS2_I(inode)->ip_blkno) {
    749		err = -ENOENT;
    750		goto out;
    751	}
    752
    753	err = ocfs2_check_dir_for_entry(dir, dentry->d_name.name,
    754					dentry->d_name.len);
    755	if (err)
    756		goto out;
    757
    758	err = ocfs2_prepare_dir_for_insert(osb, dir, parent_fe_bh,
    759					   dentry->d_name.name,
    760					   dentry->d_name.len, &lookup);
    761	if (err < 0) {
    762		mlog_errno(err);
    763		goto out;
    764	}
    765
    766	err = ocfs2_inode_lock(inode, &fe_bh, 1);
    767	if (err < 0) {
    768		if (err != -ENOENT)
    769			mlog_errno(err);
    770		goto out;
    771	}
    772
    773	fe = (struct ocfs2_dinode *) fe_bh->b_data;
    774	if (ocfs2_read_links_count(fe) >= ocfs2_link_max(osb)) {
    775		err = -EMLINK;
    776		goto out_unlock_inode;
    777	}
    778
    779	handle = ocfs2_start_trans(osb, ocfs2_link_credits(osb->sb));
    780	if (IS_ERR(handle)) {
    781		err = PTR_ERR(handle);
    782		handle = NULL;
    783		mlog_errno(err);
    784		goto out_unlock_inode;
    785	}
    786
    787	/* Starting to change things, restart is no longer possible. */
    788	ocfs2_block_signals(&oldset);
    789
    790	err = ocfs2_journal_access_di(handle, INODE_CACHE(inode), fe_bh,
    791				      OCFS2_JOURNAL_ACCESS_WRITE);
    792	if (err < 0) {
    793		mlog_errno(err);
    794		goto out_commit;
    795	}
    796
    797	inc_nlink(inode);
    798	inode->i_ctime = current_time(inode);
    799	ocfs2_set_links_count(fe, inode->i_nlink);
    800	fe->i_ctime = cpu_to_le64(inode->i_ctime.tv_sec);
    801	fe->i_ctime_nsec = cpu_to_le32(inode->i_ctime.tv_nsec);
    802	ocfs2_journal_dirty(handle, fe_bh);
    803
    804	err = ocfs2_add_entry(handle, dentry, inode,
    805			      OCFS2_I(inode)->ip_blkno,
    806			      parent_fe_bh, &lookup);
    807	if (err) {
    808		ocfs2_add_links_count(fe, -1);
    809		drop_nlink(inode);
    810		mlog_errno(err);
    811		goto out_commit;
    812	}
    813
    814	err = ocfs2_dentry_attach_lock(dentry, inode, OCFS2_I(dir)->ip_blkno);
    815	if (err) {
    816		mlog_errno(err);
    817		goto out_commit;
    818	}
    819
    820	ihold(inode);
    821	d_instantiate(dentry, inode);
    822
    823out_commit:
    824	ocfs2_commit_trans(osb, handle);
    825	ocfs2_unblock_signals(&oldset);
    826out_unlock_inode:
    827	ocfs2_inode_unlock(inode, 1);
    828
    829out:
    830	ocfs2_double_unlock(old_dir, dir);
    831
    832	brelse(fe_bh);
    833	brelse(parent_fe_bh);
    834	brelse(old_dir_bh);
    835
    836	ocfs2_free_dir_lookup_result(&lookup);
    837
    838	if (err)
    839		mlog_errno(err);
    840
    841	return err;
    842}
    843
    844/*
    845 * Takes and drops an exclusive lock on the given dentry. This will
    846 * force other nodes to drop it.
    847 */
    848static int ocfs2_remote_dentry_delete(struct dentry *dentry)
    849{
    850	int ret;
    851
    852	ret = ocfs2_dentry_lock(dentry, 1);
    853	if (ret)
    854		mlog_errno(ret);
    855	else
    856		ocfs2_dentry_unlock(dentry, 1);
    857
    858	return ret;
    859}
    860
    861static inline int ocfs2_inode_is_unlinkable(struct inode *inode)
    862{
    863	if (S_ISDIR(inode->i_mode)) {
    864		if (inode->i_nlink == 2)
    865			return 1;
    866		return 0;
    867	}
    868
    869	if (inode->i_nlink == 1)
    870		return 1;
    871	return 0;
    872}
    873
    874static int ocfs2_unlink(struct inode *dir,
    875			struct dentry *dentry)
    876{
    877	int status;
    878	int child_locked = 0;
    879	bool is_unlinkable = false;
    880	struct inode *inode = d_inode(dentry);
    881	struct inode *orphan_dir = NULL;
    882	struct ocfs2_super *osb = OCFS2_SB(dir->i_sb);
    883	u64 blkno;
    884	struct ocfs2_dinode *fe = NULL;
    885	struct buffer_head *fe_bh = NULL;
    886	struct buffer_head *parent_node_bh = NULL;
    887	handle_t *handle = NULL;
    888	char orphan_name[OCFS2_ORPHAN_NAMELEN + 1];
    889	struct ocfs2_dir_lookup_result lookup = { NULL, };
    890	struct ocfs2_dir_lookup_result orphan_insert = { NULL, };
    891
    892	trace_ocfs2_unlink(dir, dentry, dentry->d_name.len,
    893			   dentry->d_name.name,
    894			   (unsigned long long)OCFS2_I(dir)->ip_blkno,
    895			   (unsigned long long)OCFS2_I(inode)->ip_blkno);
    896
    897	status = dquot_initialize(dir);
    898	if (status) {
    899		mlog_errno(status);
    900		return status;
    901	}
    902
    903	BUG_ON(d_inode(dentry->d_parent) != dir);
    904
    905	if (inode == osb->root_inode)
    906		return -EPERM;
    907
    908	status = ocfs2_inode_lock_nested(dir, &parent_node_bh, 1,
    909					 OI_LS_PARENT);
    910	if (status < 0) {
    911		if (status != -ENOENT)
    912			mlog_errno(status);
    913		return status;
    914	}
    915
    916	status = ocfs2_find_files_on_disk(dentry->d_name.name,
    917					  dentry->d_name.len, &blkno, dir,
    918					  &lookup);
    919	if (status < 0) {
    920		if (status != -ENOENT)
    921			mlog_errno(status);
    922		goto leave;
    923	}
    924
    925	if (OCFS2_I(inode)->ip_blkno != blkno) {
    926		status = -ENOENT;
    927
    928		trace_ocfs2_unlink_noent(
    929				(unsigned long long)OCFS2_I(inode)->ip_blkno,
    930				(unsigned long long)blkno,
    931				OCFS2_I(inode)->ip_flags);
    932		goto leave;
    933	}
    934
    935	status = ocfs2_inode_lock(inode, &fe_bh, 1);
    936	if (status < 0) {
    937		if (status != -ENOENT)
    938			mlog_errno(status);
    939		goto leave;
    940	}
    941	child_locked = 1;
    942
    943	if (S_ISDIR(inode->i_mode)) {
    944		if (inode->i_nlink != 2 || !ocfs2_empty_dir(inode)) {
    945			status = -ENOTEMPTY;
    946			goto leave;
    947		}
    948	}
    949
    950	status = ocfs2_remote_dentry_delete(dentry);
    951	if (status < 0) {
    952		/* This remote delete should succeed under all normal
    953		 * circumstances. */
    954		mlog_errno(status);
    955		goto leave;
    956	}
    957
    958	if (ocfs2_inode_is_unlinkable(inode)) {
    959		status = ocfs2_prepare_orphan_dir(osb, &orphan_dir,
    960						  OCFS2_I(inode)->ip_blkno,
    961						  orphan_name, &orphan_insert,
    962						  false);
    963		if (status < 0) {
    964			mlog_errno(status);
    965			goto leave;
    966		}
    967		is_unlinkable = true;
    968	}
    969
    970	handle = ocfs2_start_trans(osb, ocfs2_unlink_credits(osb->sb));
    971	if (IS_ERR(handle)) {
    972		status = PTR_ERR(handle);
    973		handle = NULL;
    974		mlog_errno(status);
    975		goto leave;
    976	}
    977
    978	status = ocfs2_journal_access_di(handle, INODE_CACHE(inode), fe_bh,
    979					 OCFS2_JOURNAL_ACCESS_WRITE);
    980	if (status < 0) {
    981		mlog_errno(status);
    982		goto leave;
    983	}
    984
    985	fe = (struct ocfs2_dinode *) fe_bh->b_data;
    986
    987	/* delete the name from the parent dir */
    988	status = ocfs2_delete_entry(handle, dir, &lookup);
    989	if (status < 0) {
    990		mlog_errno(status);
    991		goto leave;
    992	}
    993
    994	if (S_ISDIR(inode->i_mode))
    995		drop_nlink(inode);
    996	drop_nlink(inode);
    997	ocfs2_set_links_count(fe, inode->i_nlink);
    998	ocfs2_journal_dirty(handle, fe_bh);
    999
   1000	dir->i_ctime = dir->i_mtime = current_time(dir);
   1001	if (S_ISDIR(inode->i_mode))
   1002		drop_nlink(dir);
   1003
   1004	status = ocfs2_mark_inode_dirty(handle, dir, parent_node_bh);
   1005	if (status < 0) {
   1006		mlog_errno(status);
   1007		if (S_ISDIR(inode->i_mode))
   1008			inc_nlink(dir);
   1009		goto leave;
   1010	}
   1011
   1012	if (is_unlinkable) {
   1013		status = ocfs2_orphan_add(osb, handle, inode, fe_bh,
   1014				orphan_name, &orphan_insert, orphan_dir, false);
   1015		if (status < 0)
   1016			mlog_errno(status);
   1017	}
   1018
   1019leave:
   1020	if (handle)
   1021		ocfs2_commit_trans(osb, handle);
   1022
   1023	if (orphan_dir) {
   1024		/* This was locked for us in ocfs2_prepare_orphan_dir() */
   1025		ocfs2_inode_unlock(orphan_dir, 1);
   1026		inode_unlock(orphan_dir);
   1027		iput(orphan_dir);
   1028	}
   1029
   1030	if (child_locked)
   1031		ocfs2_inode_unlock(inode, 1);
   1032
   1033	ocfs2_inode_unlock(dir, 1);
   1034
   1035	brelse(fe_bh);
   1036	brelse(parent_node_bh);
   1037
   1038	ocfs2_free_dir_lookup_result(&orphan_insert);
   1039	ocfs2_free_dir_lookup_result(&lookup);
   1040
   1041	if (status && (status != -ENOTEMPTY) && (status != -ENOENT))
   1042		mlog_errno(status);
   1043
   1044	return status;
   1045}
   1046
   1047static int ocfs2_check_if_ancestor(struct ocfs2_super *osb,
   1048		u64 src_inode_no, u64 dest_inode_no)
   1049{
   1050	int ret = 0, i = 0;
   1051	u64 parent_inode_no = 0;
   1052	u64 child_inode_no = src_inode_no;
   1053	struct inode *child_inode;
   1054
   1055#define MAX_LOOKUP_TIMES 32
   1056	while (1) {
   1057		child_inode = ocfs2_iget(osb, child_inode_no, 0, 0);
   1058		if (IS_ERR(child_inode)) {
   1059			ret = PTR_ERR(child_inode);
   1060			break;
   1061		}
   1062
   1063		ret = ocfs2_inode_lock(child_inode, NULL, 0);
   1064		if (ret < 0) {
   1065			iput(child_inode);
   1066			if (ret != -ENOENT)
   1067				mlog_errno(ret);
   1068			break;
   1069		}
   1070
   1071		ret = ocfs2_lookup_ino_from_name(child_inode, "..", 2,
   1072				&parent_inode_no);
   1073		ocfs2_inode_unlock(child_inode, 0);
   1074		iput(child_inode);
   1075		if (ret < 0) {
   1076			ret = -ENOENT;
   1077			break;
   1078		}
   1079
   1080		if (parent_inode_no == dest_inode_no) {
   1081			ret = 1;
   1082			break;
   1083		}
   1084
   1085		if (parent_inode_no == osb->root_inode->i_ino) {
   1086			ret = 0;
   1087			break;
   1088		}
   1089
   1090		child_inode_no = parent_inode_no;
   1091
   1092		if (++i >= MAX_LOOKUP_TIMES) {
   1093			mlog_ratelimited(ML_NOTICE, "max lookup times reached, "
   1094					"filesystem may have nested directories, "
   1095					"src inode: %llu, dest inode: %llu.\n",
   1096					(unsigned long long)src_inode_no,
   1097					(unsigned long long)dest_inode_no);
   1098			ret = 0;
   1099			break;
   1100		}
   1101	}
   1102
   1103	return ret;
   1104}
   1105
   1106/*
   1107 * The only place this should be used is rename and link!
   1108 * if they have the same id, then the 1st one is the only one locked.
   1109 */
   1110static int ocfs2_double_lock(struct ocfs2_super *osb,
   1111			     struct buffer_head **bh1,
   1112			     struct inode *inode1,
   1113			     struct buffer_head **bh2,
   1114			     struct inode *inode2,
   1115			     int rename)
   1116{
   1117	int status;
   1118	int inode1_is_ancestor, inode2_is_ancestor;
   1119	struct ocfs2_inode_info *oi1 = OCFS2_I(inode1);
   1120	struct ocfs2_inode_info *oi2 = OCFS2_I(inode2);
   1121
   1122	trace_ocfs2_double_lock((unsigned long long)oi1->ip_blkno,
   1123				(unsigned long long)oi2->ip_blkno);
   1124
   1125	if (*bh1)
   1126		*bh1 = NULL;
   1127	if (*bh2)
   1128		*bh2 = NULL;
   1129
   1130	/* we always want to lock the one with the lower lockid first.
   1131	 * and if they are nested, we lock ancestor first */
   1132	if (oi1->ip_blkno != oi2->ip_blkno) {
   1133		inode1_is_ancestor = ocfs2_check_if_ancestor(osb, oi2->ip_blkno,
   1134				oi1->ip_blkno);
   1135		if (inode1_is_ancestor < 0) {
   1136			status = inode1_is_ancestor;
   1137			goto bail;
   1138		}
   1139
   1140		inode2_is_ancestor = ocfs2_check_if_ancestor(osb, oi1->ip_blkno,
   1141				oi2->ip_blkno);
   1142		if (inode2_is_ancestor < 0) {
   1143			status = inode2_is_ancestor;
   1144			goto bail;
   1145		}
   1146
   1147		if ((inode1_is_ancestor == 1) ||
   1148				(oi1->ip_blkno < oi2->ip_blkno &&
   1149				inode2_is_ancestor == 0)) {
   1150			/* switch id1 and id2 around */
   1151			swap(bh2, bh1);
   1152			swap(inode2, inode1);
   1153		}
   1154		/* lock id2 */
   1155		status = ocfs2_inode_lock_nested(inode2, bh2, 1,
   1156				rename == 1 ? OI_LS_RENAME1 : OI_LS_PARENT);
   1157		if (status < 0) {
   1158			if (status != -ENOENT)
   1159				mlog_errno(status);
   1160			goto bail;
   1161		}
   1162	}
   1163
   1164	/* lock id1 */
   1165	status = ocfs2_inode_lock_nested(inode1, bh1, 1,
   1166			rename == 1 ?  OI_LS_RENAME2 : OI_LS_PARENT);
   1167	if (status < 0) {
   1168		/*
   1169		 * An error return must mean that no cluster locks
   1170		 * were held on function exit.
   1171		 */
   1172		if (oi1->ip_blkno != oi2->ip_blkno) {
   1173			ocfs2_inode_unlock(inode2, 1);
   1174			brelse(*bh2);
   1175			*bh2 = NULL;
   1176		}
   1177
   1178		if (status != -ENOENT)
   1179			mlog_errno(status);
   1180	}
   1181
   1182	trace_ocfs2_double_lock_end(
   1183			(unsigned long long)oi1->ip_blkno,
   1184			(unsigned long long)oi2->ip_blkno);
   1185
   1186bail:
   1187	if (status)
   1188		mlog_errno(status);
   1189	return status;
   1190}
   1191
   1192static void ocfs2_double_unlock(struct inode *inode1, struct inode *inode2)
   1193{
   1194	ocfs2_inode_unlock(inode1, 1);
   1195
   1196	if (inode1 != inode2)
   1197		ocfs2_inode_unlock(inode2, 1);
   1198}
   1199
   1200static int ocfs2_rename(struct user_namespace *mnt_userns,
   1201			struct inode *old_dir,
   1202			struct dentry *old_dentry,
   1203			struct inode *new_dir,
   1204			struct dentry *new_dentry,
   1205			unsigned int flags)
   1206{
   1207	int status = 0, rename_lock = 0, parents_locked = 0, target_exists = 0;
   1208	int old_child_locked = 0, new_child_locked = 0, update_dot_dot = 0;
   1209	struct inode *old_inode = d_inode(old_dentry);
   1210	struct inode *new_inode = d_inode(new_dentry);
   1211	struct inode *orphan_dir = NULL;
   1212	struct ocfs2_dinode *newfe = NULL;
   1213	char orphan_name[OCFS2_ORPHAN_NAMELEN + 1];
   1214	struct buffer_head *newfe_bh = NULL;
   1215	struct buffer_head *old_inode_bh = NULL;
   1216	struct ocfs2_super *osb = NULL;
   1217	u64 newfe_blkno, old_de_ino;
   1218	handle_t *handle = NULL;
   1219	struct buffer_head *old_dir_bh = NULL;
   1220	struct buffer_head *new_dir_bh = NULL;
   1221	u32 old_dir_nlink = old_dir->i_nlink;
   1222	struct ocfs2_dinode *old_di;
   1223	struct ocfs2_dir_lookup_result old_inode_dot_dot_res = { NULL, };
   1224	struct ocfs2_dir_lookup_result target_lookup_res = { NULL, };
   1225	struct ocfs2_dir_lookup_result old_entry_lookup = { NULL, };
   1226	struct ocfs2_dir_lookup_result orphan_insert = { NULL, };
   1227	struct ocfs2_dir_lookup_result target_insert = { NULL, };
   1228	bool should_add_orphan = false;
   1229
   1230	if (flags)
   1231		return -EINVAL;
   1232
   1233	/* At some point it might be nice to break this function up a
   1234	 * bit. */
   1235
   1236	trace_ocfs2_rename(old_dir, old_dentry, new_dir, new_dentry,
   1237			   old_dentry->d_name.len, old_dentry->d_name.name,
   1238			   new_dentry->d_name.len, new_dentry->d_name.name);
   1239
   1240	status = dquot_initialize(old_dir);
   1241	if (status) {
   1242		mlog_errno(status);
   1243		goto bail;
   1244	}
   1245	status = dquot_initialize(new_dir);
   1246	if (status) {
   1247		mlog_errno(status);
   1248		goto bail;
   1249	}
   1250
   1251	osb = OCFS2_SB(old_dir->i_sb);
   1252
   1253	if (new_inode) {
   1254		if (!igrab(new_inode))
   1255			BUG();
   1256	}
   1257
   1258	/* Assume a directory hierarchy thusly:
   1259	 * a/b/c
   1260	 * a/d
   1261	 * a,b,c, and d are all directories.
   1262	 *
   1263	 * from cwd of 'a' on both nodes:
   1264	 * node1: mv b/c d
   1265	 * node2: mv d   b/c
   1266	 *
   1267	 * And that's why, just like the VFS, we need a file system
   1268	 * rename lock. */
   1269	if (old_dir != new_dir && S_ISDIR(old_inode->i_mode)) {
   1270		status = ocfs2_rename_lock(osb);
   1271		if (status < 0) {
   1272			mlog_errno(status);
   1273			goto bail;
   1274		}
   1275		rename_lock = 1;
   1276
   1277		/* here we cannot guarantee the inodes haven't just been
   1278		 * changed, so check if they are nested again */
   1279		status = ocfs2_check_if_ancestor(osb, new_dir->i_ino,
   1280				old_inode->i_ino);
   1281		if (status < 0) {
   1282			mlog_errno(status);
   1283			goto bail;
   1284		} else if (status == 1) {
   1285			status = -EPERM;
   1286			trace_ocfs2_rename_not_permitted(
   1287					(unsigned long long)old_inode->i_ino,
   1288					(unsigned long long)new_dir->i_ino);
   1289			goto bail;
   1290		}
   1291	}
   1292
   1293	/* if old and new are the same, this'll just do one lock. */
   1294	status = ocfs2_double_lock(osb, &old_dir_bh, old_dir,
   1295				   &new_dir_bh, new_dir, 1);
   1296	if (status < 0) {
   1297		mlog_errno(status);
   1298		goto bail;
   1299	}
   1300	parents_locked = 1;
   1301
   1302	if (!new_dir->i_nlink) {
   1303		status = -EACCES;
   1304		goto bail;
   1305	}
   1306
   1307	/* make sure both dirs have bhs
   1308	 * get an extra ref on old_dir_bh if old==new */
   1309	if (!new_dir_bh) {
   1310		if (old_dir_bh) {
   1311			new_dir_bh = old_dir_bh;
   1312			get_bh(new_dir_bh);
   1313		} else {
   1314			mlog(ML_ERROR, "no old_dir_bh!\n");
   1315			status = -EIO;
   1316			goto bail;
   1317		}
   1318	}
   1319
   1320	/*
   1321	 * Aside from allowing a meta data update, the locking here
   1322	 * also ensures that the downconvert thread on other nodes
   1323	 * won't have to concurrently downconvert the inode and the
   1324	 * dentry locks.
   1325	 */
   1326	status = ocfs2_inode_lock_nested(old_inode, &old_inode_bh, 1,
   1327					 OI_LS_PARENT);
   1328	if (status < 0) {
   1329		if (status != -ENOENT)
   1330			mlog_errno(status);
   1331		goto bail;
   1332	}
   1333	old_child_locked = 1;
   1334
   1335	status = ocfs2_remote_dentry_delete(old_dentry);
   1336	if (status < 0) {
   1337		mlog_errno(status);
   1338		goto bail;
   1339	}
   1340
   1341	if (S_ISDIR(old_inode->i_mode)) {
   1342		u64 old_inode_parent;
   1343
   1344		update_dot_dot = 1;
   1345		status = ocfs2_find_files_on_disk("..", 2, &old_inode_parent,
   1346						  old_inode,
   1347						  &old_inode_dot_dot_res);
   1348		if (status) {
   1349			status = -EIO;
   1350			goto bail;
   1351		}
   1352
   1353		if (old_inode_parent != OCFS2_I(old_dir)->ip_blkno) {
   1354			status = -EIO;
   1355			goto bail;
   1356		}
   1357
   1358		if (!new_inode && new_dir != old_dir &&
   1359		    new_dir->i_nlink >= ocfs2_link_max(osb)) {
   1360			status = -EMLINK;
   1361			goto bail;
   1362		}
   1363	}
   1364
   1365	status = ocfs2_lookup_ino_from_name(old_dir, old_dentry->d_name.name,
   1366					    old_dentry->d_name.len,
   1367					    &old_de_ino);
   1368	if (status) {
   1369		status = -ENOENT;
   1370		goto bail;
   1371	}
   1372
   1373	/*
   1374	 *  Check for inode number is _not_ due to possible IO errors.
   1375	 *  We might rmdir the source, keep it as pwd of some process
   1376	 *  and merrily kill the link to whatever was created under the
   1377	 *  same name. Goodbye sticky bit ;-<
   1378	 */
   1379	if (old_de_ino != OCFS2_I(old_inode)->ip_blkno) {
   1380		status = -ENOENT;
   1381		goto bail;
   1382	}
   1383
   1384	/* check if the target already exists (in which case we need
   1385	 * to delete it */
   1386	status = ocfs2_find_files_on_disk(new_dentry->d_name.name,
   1387					  new_dentry->d_name.len,
   1388					  &newfe_blkno, new_dir,
   1389					  &target_lookup_res);
   1390	/* The only error we allow here is -ENOENT because the new
   1391	 * file not existing is perfectly valid. */
   1392	if ((status < 0) && (status != -ENOENT)) {
   1393		/* If we cannot find the file specified we should just */
   1394		/* return the error... */
   1395		mlog_errno(status);
   1396		goto bail;
   1397	}
   1398	if (status == 0)
   1399		target_exists = 1;
   1400
   1401	if (!target_exists && new_inode) {
   1402		/*
   1403		 * Target was unlinked by another node while we were
   1404		 * waiting to get to ocfs2_rename(). There isn't
   1405		 * anything we can do here to help the situation, so
   1406		 * bubble up the appropriate error.
   1407		 */
   1408		status = -ENOENT;
   1409		goto bail;
   1410	}
   1411
   1412	/* In case we need to overwrite an existing file, we blow it
   1413	 * away first */
   1414	if (target_exists) {
   1415		/* VFS didn't think there existed an inode here, but
   1416		 * someone else in the cluster must have raced our
   1417		 * rename to create one. Today we error cleanly, in
   1418		 * the future we should consider calling iget to build
   1419		 * a new struct inode for this entry. */
   1420		if (!new_inode) {
   1421			status = -EACCES;
   1422
   1423			trace_ocfs2_rename_target_exists(new_dentry->d_name.len,
   1424						new_dentry->d_name.name);
   1425			goto bail;
   1426		}
   1427
   1428		if (OCFS2_I(new_inode)->ip_blkno != newfe_blkno) {
   1429			status = -EACCES;
   1430
   1431			trace_ocfs2_rename_disagree(
   1432			     (unsigned long long)OCFS2_I(new_inode)->ip_blkno,
   1433			     (unsigned long long)newfe_blkno,
   1434			     OCFS2_I(new_inode)->ip_flags);
   1435			goto bail;
   1436		}
   1437
   1438		status = ocfs2_inode_lock(new_inode, &newfe_bh, 1);
   1439		if (status < 0) {
   1440			if (status != -ENOENT)
   1441				mlog_errno(status);
   1442			goto bail;
   1443		}
   1444		new_child_locked = 1;
   1445
   1446		status = ocfs2_remote_dentry_delete(new_dentry);
   1447		if (status < 0) {
   1448			mlog_errno(status);
   1449			goto bail;
   1450		}
   1451
   1452		newfe = (struct ocfs2_dinode *) newfe_bh->b_data;
   1453
   1454		trace_ocfs2_rename_over_existing(
   1455		     (unsigned long long)newfe_blkno, newfe_bh, newfe_bh ?
   1456		     (unsigned long long)newfe_bh->b_blocknr : 0ULL);
   1457
   1458		if (S_ISDIR(new_inode->i_mode) || (new_inode->i_nlink == 1)) {
   1459			status = ocfs2_prepare_orphan_dir(osb, &orphan_dir,
   1460						OCFS2_I(new_inode)->ip_blkno,
   1461						orphan_name, &orphan_insert,
   1462						false);
   1463			if (status < 0) {
   1464				mlog_errno(status);
   1465				goto bail;
   1466			}
   1467			should_add_orphan = true;
   1468		}
   1469	} else {
   1470		BUG_ON(d_inode(new_dentry->d_parent) != new_dir);
   1471
   1472		status = ocfs2_check_dir_for_entry(new_dir,
   1473						   new_dentry->d_name.name,
   1474						   new_dentry->d_name.len);
   1475		if (status)
   1476			goto bail;
   1477
   1478		status = ocfs2_prepare_dir_for_insert(osb, new_dir, new_dir_bh,
   1479						      new_dentry->d_name.name,
   1480						      new_dentry->d_name.len,
   1481						      &target_insert);
   1482		if (status < 0) {
   1483			mlog_errno(status);
   1484			goto bail;
   1485		}
   1486	}
   1487
   1488	handle = ocfs2_start_trans(osb, ocfs2_rename_credits(osb->sb));
   1489	if (IS_ERR(handle)) {
   1490		status = PTR_ERR(handle);
   1491		handle = NULL;
   1492		mlog_errno(status);
   1493		goto bail;
   1494	}
   1495
   1496	if (target_exists) {
   1497		if (S_ISDIR(new_inode->i_mode)) {
   1498			if (new_inode->i_nlink != 2 ||
   1499			    !ocfs2_empty_dir(new_inode)) {
   1500				status = -ENOTEMPTY;
   1501				goto bail;
   1502			}
   1503		}
   1504		status = ocfs2_journal_access_di(handle, INODE_CACHE(new_inode),
   1505						 newfe_bh,
   1506						 OCFS2_JOURNAL_ACCESS_WRITE);
   1507		if (status < 0) {
   1508			mlog_errno(status);
   1509			goto bail;
   1510		}
   1511
   1512		/* change the dirent to point to the correct inode */
   1513		status = ocfs2_update_entry(new_dir, handle, &target_lookup_res,
   1514					    old_inode);
   1515		if (status < 0) {
   1516			mlog_errno(status);
   1517			goto bail;
   1518		}
   1519		inode_inc_iversion(new_dir);
   1520
   1521		if (S_ISDIR(new_inode->i_mode))
   1522			ocfs2_set_links_count(newfe, 0);
   1523		else
   1524			ocfs2_add_links_count(newfe, -1);
   1525		ocfs2_journal_dirty(handle, newfe_bh);
   1526		if (should_add_orphan) {
   1527			status = ocfs2_orphan_add(osb, handle, new_inode,
   1528					newfe_bh, orphan_name,
   1529					&orphan_insert, orphan_dir, false);
   1530			if (status < 0) {
   1531				mlog_errno(status);
   1532				goto bail;
   1533			}
   1534		}
   1535	} else {
   1536		/* if the name was not found in new_dir, add it now */
   1537		status = ocfs2_add_entry(handle, new_dentry, old_inode,
   1538					 OCFS2_I(old_inode)->ip_blkno,
   1539					 new_dir_bh, &target_insert);
   1540	}
   1541
   1542	old_inode->i_ctime = current_time(old_inode);
   1543	mark_inode_dirty(old_inode);
   1544
   1545	status = ocfs2_journal_access_di(handle, INODE_CACHE(old_inode),
   1546					 old_inode_bh,
   1547					 OCFS2_JOURNAL_ACCESS_WRITE);
   1548	if (status >= 0) {
   1549		old_di = (struct ocfs2_dinode *) old_inode_bh->b_data;
   1550
   1551		old_di->i_ctime = cpu_to_le64(old_inode->i_ctime.tv_sec);
   1552		old_di->i_ctime_nsec = cpu_to_le32(old_inode->i_ctime.tv_nsec);
   1553		ocfs2_journal_dirty(handle, old_inode_bh);
   1554	} else
   1555		mlog_errno(status);
   1556
   1557	/*
   1558	 * Now that the name has been added to new_dir, remove the old name.
   1559	 *
   1560	 * We don't keep any directory entry context around until now
   1561	 * because the insert might have changed the type of directory
   1562	 * we're dealing with.
   1563	 */
   1564	status = ocfs2_find_entry(old_dentry->d_name.name,
   1565				  old_dentry->d_name.len, old_dir,
   1566				  &old_entry_lookup);
   1567	if (status) {
   1568		if (!is_journal_aborted(osb->journal->j_journal)) {
   1569			ocfs2_error(osb->sb, "new entry %.*s is added, but old entry %.*s "
   1570					"is not deleted.",
   1571					new_dentry->d_name.len, new_dentry->d_name.name,
   1572					old_dentry->d_name.len, old_dentry->d_name.name);
   1573		}
   1574		goto bail;
   1575	}
   1576
   1577	status = ocfs2_delete_entry(handle, old_dir, &old_entry_lookup);
   1578	if (status < 0) {
   1579		mlog_errno(status);
   1580		if (!is_journal_aborted(osb->journal->j_journal)) {
   1581			ocfs2_error(osb->sb, "new entry %.*s is added, but old entry %.*s "
   1582					"is not deleted.",
   1583					new_dentry->d_name.len, new_dentry->d_name.name,
   1584					old_dentry->d_name.len, old_dentry->d_name.name);
   1585		}
   1586		goto bail;
   1587	}
   1588
   1589	if (new_inode) {
   1590		drop_nlink(new_inode);
   1591		new_inode->i_ctime = current_time(new_inode);
   1592	}
   1593	old_dir->i_ctime = old_dir->i_mtime = current_time(old_dir);
   1594
   1595	if (update_dot_dot) {
   1596		status = ocfs2_update_entry(old_inode, handle,
   1597					    &old_inode_dot_dot_res, new_dir);
   1598		drop_nlink(old_dir);
   1599		if (new_inode) {
   1600			drop_nlink(new_inode);
   1601		} else {
   1602			inc_nlink(new_dir);
   1603			mark_inode_dirty(new_dir);
   1604		}
   1605	}
   1606	mark_inode_dirty(old_dir);
   1607	ocfs2_mark_inode_dirty(handle, old_dir, old_dir_bh);
   1608	if (new_inode) {
   1609		mark_inode_dirty(new_inode);
   1610		ocfs2_mark_inode_dirty(handle, new_inode, newfe_bh);
   1611	}
   1612
   1613	if (old_dir != new_dir) {
   1614		/* Keep the same times on both directories.*/
   1615		new_dir->i_ctime = new_dir->i_mtime = old_dir->i_ctime;
   1616
   1617		/*
   1618		 * This will also pick up the i_nlink change from the
   1619		 * block above.
   1620		 */
   1621		ocfs2_mark_inode_dirty(handle, new_dir, new_dir_bh);
   1622	}
   1623
   1624	if (old_dir_nlink != old_dir->i_nlink) {
   1625		if (!old_dir_bh) {
   1626			mlog(ML_ERROR, "need to change nlink for old dir "
   1627			     "%llu from %d to %d but bh is NULL!\n",
   1628			     (unsigned long long)OCFS2_I(old_dir)->ip_blkno,
   1629			     (int)old_dir_nlink, old_dir->i_nlink);
   1630		} else {
   1631			struct ocfs2_dinode *fe;
   1632			status = ocfs2_journal_access_di(handle,
   1633							 INODE_CACHE(old_dir),
   1634							 old_dir_bh,
   1635							 OCFS2_JOURNAL_ACCESS_WRITE);
   1636			fe = (struct ocfs2_dinode *) old_dir_bh->b_data;
   1637			ocfs2_set_links_count(fe, old_dir->i_nlink);
   1638			ocfs2_journal_dirty(handle, old_dir_bh);
   1639		}
   1640	}
   1641	ocfs2_dentry_move(old_dentry, new_dentry, old_dir, new_dir);
   1642	status = 0;
   1643bail:
   1644	if (handle)
   1645		ocfs2_commit_trans(osb, handle);
   1646
   1647	if (orphan_dir) {
   1648		/* This was locked for us in ocfs2_prepare_orphan_dir() */
   1649		ocfs2_inode_unlock(orphan_dir, 1);
   1650		inode_unlock(orphan_dir);
   1651		iput(orphan_dir);
   1652	}
   1653
   1654	if (new_child_locked)
   1655		ocfs2_inode_unlock(new_inode, 1);
   1656
   1657	if (old_child_locked)
   1658		ocfs2_inode_unlock(old_inode, 1);
   1659
   1660	if (parents_locked)
   1661		ocfs2_double_unlock(old_dir, new_dir);
   1662
   1663	if (rename_lock)
   1664		ocfs2_rename_unlock(osb);
   1665
   1666	if (new_inode)
   1667		sync_mapping_buffers(old_inode->i_mapping);
   1668
   1669	iput(new_inode);
   1670
   1671	ocfs2_free_dir_lookup_result(&target_lookup_res);
   1672	ocfs2_free_dir_lookup_result(&old_entry_lookup);
   1673	ocfs2_free_dir_lookup_result(&old_inode_dot_dot_res);
   1674	ocfs2_free_dir_lookup_result(&orphan_insert);
   1675	ocfs2_free_dir_lookup_result(&target_insert);
   1676
   1677	brelse(newfe_bh);
   1678	brelse(old_inode_bh);
   1679	brelse(old_dir_bh);
   1680	brelse(new_dir_bh);
   1681
   1682	if (status)
   1683		mlog_errno(status);
   1684
   1685	return status;
   1686}
   1687
   1688/*
   1689 * we expect i_size = strlen(symname). Copy symname into the file
   1690 * data, including the null terminator.
   1691 */
   1692static int ocfs2_create_symlink_data(struct ocfs2_super *osb,
   1693				     handle_t *handle,
   1694				     struct inode *inode,
   1695				     const char *symname)
   1696{
   1697	struct buffer_head **bhs = NULL;
   1698	const char *c;
   1699	struct super_block *sb = osb->sb;
   1700	u64 p_blkno, p_blocks;
   1701	int virtual, blocks, status, i, bytes_left;
   1702
   1703	bytes_left = i_size_read(inode) + 1;
   1704	/* we can't trust i_blocks because we're actually going to
   1705	 * write i_size + 1 bytes. */
   1706	blocks = (bytes_left + sb->s_blocksize - 1) >> sb->s_blocksize_bits;
   1707
   1708	trace_ocfs2_create_symlink_data((unsigned long long)inode->i_blocks,
   1709					i_size_read(inode), blocks);
   1710
   1711	/* Sanity check -- make sure we're going to fit. */
   1712	if (bytes_left >
   1713	    ocfs2_clusters_to_bytes(sb, OCFS2_I(inode)->ip_clusters)) {
   1714		status = -EIO;
   1715		mlog_errno(status);
   1716		goto bail;
   1717	}
   1718
   1719	bhs = kcalloc(blocks, sizeof(struct buffer_head *), GFP_KERNEL);
   1720	if (!bhs) {
   1721		status = -ENOMEM;
   1722		mlog_errno(status);
   1723		goto bail;
   1724	}
   1725
   1726	status = ocfs2_extent_map_get_blocks(inode, 0, &p_blkno, &p_blocks,
   1727					     NULL);
   1728	if (status < 0) {
   1729		mlog_errno(status);
   1730		goto bail;
   1731	}
   1732
   1733	/* links can never be larger than one cluster so we know this
   1734	 * is all going to be contiguous, but do a sanity check
   1735	 * anyway. */
   1736	if ((p_blocks << sb->s_blocksize_bits) < bytes_left) {
   1737		status = -EIO;
   1738		mlog_errno(status);
   1739		goto bail;
   1740	}
   1741
   1742	virtual = 0;
   1743	while(bytes_left > 0) {
   1744		c = &symname[virtual * sb->s_blocksize];
   1745
   1746		bhs[virtual] = sb_getblk(sb, p_blkno);
   1747		if (!bhs[virtual]) {
   1748			status = -ENOMEM;
   1749			mlog_errno(status);
   1750			goto bail;
   1751		}
   1752		ocfs2_set_new_buffer_uptodate(INODE_CACHE(inode),
   1753					      bhs[virtual]);
   1754
   1755		status = ocfs2_journal_access(handle, INODE_CACHE(inode),
   1756					      bhs[virtual],
   1757					      OCFS2_JOURNAL_ACCESS_CREATE);
   1758		if (status < 0) {
   1759			mlog_errno(status);
   1760			goto bail;
   1761		}
   1762
   1763		memset(bhs[virtual]->b_data, 0, sb->s_blocksize);
   1764
   1765		memcpy(bhs[virtual]->b_data, c,
   1766		       (bytes_left > sb->s_blocksize) ? sb->s_blocksize :
   1767		       bytes_left);
   1768
   1769		ocfs2_journal_dirty(handle, bhs[virtual]);
   1770
   1771		virtual++;
   1772		p_blkno++;
   1773		bytes_left -= sb->s_blocksize;
   1774	}
   1775
   1776	status = 0;
   1777bail:
   1778
   1779	if (bhs) {
   1780		for(i = 0; i < blocks; i++)
   1781			brelse(bhs[i]);
   1782		kfree(bhs);
   1783	}
   1784
   1785	if (status)
   1786		mlog_errno(status);
   1787	return status;
   1788}
   1789
   1790static int ocfs2_symlink(struct user_namespace *mnt_userns,
   1791			 struct inode *dir,
   1792			 struct dentry *dentry,
   1793			 const char *symname)
   1794{
   1795	int status, l, credits;
   1796	u64 newsize;
   1797	struct ocfs2_super *osb = NULL;
   1798	struct inode *inode = NULL;
   1799	struct super_block *sb;
   1800	struct buffer_head *new_fe_bh = NULL;
   1801	struct buffer_head *parent_fe_bh = NULL;
   1802	struct ocfs2_dinode *fe = NULL;
   1803	struct ocfs2_dinode *dirfe;
   1804	handle_t *handle = NULL;
   1805	struct ocfs2_alloc_context *inode_ac = NULL;
   1806	struct ocfs2_alloc_context *data_ac = NULL;
   1807	struct ocfs2_alloc_context *xattr_ac = NULL;
   1808	int want_clusters = 0;
   1809	int xattr_credits = 0;
   1810	struct ocfs2_security_xattr_info si = {
   1811		.enable = 1,
   1812	};
   1813	int did_quota = 0, did_quota_inode = 0;
   1814	struct ocfs2_dir_lookup_result lookup = { NULL, };
   1815	sigset_t oldset;
   1816	int did_block_signals = 0;
   1817	struct ocfs2_dentry_lock *dl = NULL;
   1818
   1819	trace_ocfs2_symlink_begin(dir, dentry, symname,
   1820				  dentry->d_name.len, dentry->d_name.name);
   1821
   1822	status = dquot_initialize(dir);
   1823	if (status) {
   1824		mlog_errno(status);
   1825		goto bail;
   1826	}
   1827
   1828	sb = dir->i_sb;
   1829	osb = OCFS2_SB(sb);
   1830
   1831	l = strlen(symname) + 1;
   1832
   1833	credits = ocfs2_calc_symlink_credits(sb);
   1834
   1835	/* lock the parent directory */
   1836	status = ocfs2_inode_lock(dir, &parent_fe_bh, 1);
   1837	if (status < 0) {
   1838		if (status != -ENOENT)
   1839			mlog_errno(status);
   1840		return status;
   1841	}
   1842
   1843	dirfe = (struct ocfs2_dinode *) parent_fe_bh->b_data;
   1844	if (!ocfs2_read_links_count(dirfe)) {
   1845		/* can't make a file in a deleted directory. */
   1846		status = -ENOENT;
   1847		goto bail;
   1848	}
   1849
   1850	status = ocfs2_check_dir_for_entry(dir, dentry->d_name.name,
   1851					   dentry->d_name.len);
   1852	if (status)
   1853		goto bail;
   1854
   1855	status = ocfs2_prepare_dir_for_insert(osb, dir, parent_fe_bh,
   1856					      dentry->d_name.name,
   1857					      dentry->d_name.len, &lookup);
   1858	if (status < 0) {
   1859		mlog_errno(status);
   1860		goto bail;
   1861	}
   1862
   1863	status = ocfs2_reserve_new_inode(osb, &inode_ac);
   1864	if (status < 0) {
   1865		if (status != -ENOSPC)
   1866			mlog_errno(status);
   1867		goto bail;
   1868	}
   1869
   1870	inode = ocfs2_get_init_inode(dir, S_IFLNK | S_IRWXUGO);
   1871	if (IS_ERR(inode)) {
   1872		status = PTR_ERR(inode);
   1873		inode = NULL;
   1874		mlog_errno(status);
   1875		goto bail;
   1876	}
   1877
   1878	/* get security xattr */
   1879	status = ocfs2_init_security_get(inode, dir, &dentry->d_name, &si);
   1880	if (status) {
   1881		if (status == -EOPNOTSUPP)
   1882			si.enable = 0;
   1883		else {
   1884			mlog_errno(status);
   1885			goto bail;
   1886		}
   1887	}
   1888
   1889	/* calculate meta data/clusters for setting security xattr */
   1890	if (si.enable) {
   1891		status = ocfs2_calc_security_init(dir, &si, &want_clusters,
   1892						  &xattr_credits, &xattr_ac);
   1893		if (status < 0) {
   1894			mlog_errno(status);
   1895			goto bail;
   1896		}
   1897	}
   1898
   1899	/* don't reserve bitmap space for fast symlinks. */
   1900	if (l > ocfs2_fast_symlink_chars(sb))
   1901		want_clusters += 1;
   1902
   1903	status = ocfs2_reserve_clusters(osb, want_clusters, &data_ac);
   1904	if (status < 0) {
   1905		if (status != -ENOSPC)
   1906			mlog_errno(status);
   1907		goto bail;
   1908	}
   1909
   1910	handle = ocfs2_start_trans(osb, credits + xattr_credits);
   1911	if (IS_ERR(handle)) {
   1912		status = PTR_ERR(handle);
   1913		handle = NULL;
   1914		mlog_errno(status);
   1915		goto bail;
   1916	}
   1917
   1918	/* Starting to change things, restart is no longer possible. */
   1919	ocfs2_block_signals(&oldset);
   1920	did_block_signals = 1;
   1921
   1922	status = dquot_alloc_inode(inode);
   1923	if (status)
   1924		goto bail;
   1925	did_quota_inode = 1;
   1926
   1927	trace_ocfs2_symlink_create(dir, dentry, dentry->d_name.len,
   1928				   dentry->d_name.name,
   1929				   (unsigned long long)OCFS2_I(dir)->ip_blkno,
   1930				   inode->i_mode);
   1931
   1932	status = ocfs2_mknod_locked(osb, dir, inode,
   1933				    0, &new_fe_bh, parent_fe_bh, handle,
   1934				    inode_ac);
   1935	if (status < 0) {
   1936		mlog_errno(status);
   1937		goto bail;
   1938	}
   1939
   1940	fe = (struct ocfs2_dinode *) new_fe_bh->b_data;
   1941	inode->i_rdev = 0;
   1942	newsize = l - 1;
   1943	inode->i_op = &ocfs2_symlink_inode_operations;
   1944	inode_nohighmem(inode);
   1945	if (l > ocfs2_fast_symlink_chars(sb)) {
   1946		u32 offset = 0;
   1947
   1948		status = dquot_alloc_space_nodirty(inode,
   1949		    ocfs2_clusters_to_bytes(osb->sb, 1));
   1950		if (status)
   1951			goto bail;
   1952		did_quota = 1;
   1953		inode->i_mapping->a_ops = &ocfs2_aops;
   1954		status = ocfs2_add_inode_data(osb, inode, &offset, 1, 0,
   1955					      new_fe_bh,
   1956					      handle, data_ac, NULL,
   1957					      NULL);
   1958		if (status < 0) {
   1959			if (status != -ENOSPC && status != -EINTR) {
   1960				mlog(ML_ERROR,
   1961				     "Failed to extend file to %llu\n",
   1962				     (unsigned long long)newsize);
   1963				mlog_errno(status);
   1964				status = -ENOSPC;
   1965			}
   1966			goto bail;
   1967		}
   1968		i_size_write(inode, newsize);
   1969		inode->i_blocks = ocfs2_inode_sector_count(inode);
   1970	} else {
   1971		inode->i_mapping->a_ops = &ocfs2_fast_symlink_aops;
   1972		memcpy((char *) fe->id2.i_symlink, symname, l);
   1973		i_size_write(inode, newsize);
   1974		inode->i_blocks = 0;
   1975	}
   1976
   1977	status = ocfs2_mark_inode_dirty(handle, inode, new_fe_bh);
   1978	if (status < 0) {
   1979		mlog_errno(status);
   1980		goto bail;
   1981	}
   1982
   1983	if (!ocfs2_inode_is_fast_symlink(inode)) {
   1984		status = ocfs2_create_symlink_data(osb, handle, inode,
   1985						   symname);
   1986		if (status < 0) {
   1987			mlog_errno(status);
   1988			goto bail;
   1989		}
   1990	}
   1991
   1992	if (si.enable) {
   1993		status = ocfs2_init_security_set(handle, inode, new_fe_bh, &si,
   1994						 xattr_ac, data_ac);
   1995		if (status < 0) {
   1996			mlog_errno(status);
   1997			goto bail;
   1998		}
   1999	}
   2000
   2001	/*
   2002	 * Do this before adding the entry to the directory. We add
   2003	 * also set d_op after success so that ->d_iput() will cleanup
   2004	 * the dentry lock even if ocfs2_add_entry() fails below.
   2005	 */
   2006	status = ocfs2_dentry_attach_lock(dentry, inode, OCFS2_I(dir)->ip_blkno);
   2007	if (status) {
   2008		mlog_errno(status);
   2009		goto bail;
   2010	}
   2011
   2012	dl = dentry->d_fsdata;
   2013
   2014	status = ocfs2_add_entry(handle, dentry, inode,
   2015				 le64_to_cpu(fe->i_blkno), parent_fe_bh,
   2016				 &lookup);
   2017	if (status < 0) {
   2018		mlog_errno(status);
   2019		goto bail;
   2020	}
   2021
   2022	insert_inode_hash(inode);
   2023	d_instantiate(dentry, inode);
   2024bail:
   2025	if (status < 0 && did_quota)
   2026		dquot_free_space_nodirty(inode,
   2027					ocfs2_clusters_to_bytes(osb->sb, 1));
   2028	if (status < 0 && did_quota_inode)
   2029		dquot_free_inode(inode);
   2030	if (handle)
   2031		ocfs2_commit_trans(osb, handle);
   2032
   2033	ocfs2_inode_unlock(dir, 1);
   2034	if (did_block_signals)
   2035		ocfs2_unblock_signals(&oldset);
   2036
   2037	brelse(new_fe_bh);
   2038	brelse(parent_fe_bh);
   2039	kfree(si.value);
   2040	ocfs2_free_dir_lookup_result(&lookup);
   2041	if (inode_ac)
   2042		ocfs2_free_alloc_context(inode_ac);
   2043	if (data_ac)
   2044		ocfs2_free_alloc_context(data_ac);
   2045	if (xattr_ac)
   2046		ocfs2_free_alloc_context(xattr_ac);
   2047	if ((status < 0) && inode) {
   2048		if (dl)
   2049			ocfs2_cleanup_add_entry_failure(osb, dentry, inode);
   2050
   2051		OCFS2_I(inode)->ip_flags |= OCFS2_INODE_SKIP_ORPHAN_DIR;
   2052		clear_nlink(inode);
   2053		iput(inode);
   2054	}
   2055
   2056	if (status)
   2057		mlog_errno(status);
   2058
   2059	return status;
   2060}
   2061
   2062static int ocfs2_blkno_stringify(u64 blkno, char *name)
   2063{
   2064	int status, namelen;
   2065
   2066	namelen = snprintf(name, OCFS2_ORPHAN_NAMELEN + 1, "%016llx",
   2067			   (long long)blkno);
   2068	if (namelen <= 0) {
   2069		if (namelen)
   2070			status = namelen;
   2071		else
   2072			status = -EINVAL;
   2073		mlog_errno(status);
   2074		goto bail;
   2075	}
   2076	if (namelen != OCFS2_ORPHAN_NAMELEN) {
   2077		status = -EINVAL;
   2078		mlog_errno(status);
   2079		goto bail;
   2080	}
   2081
   2082	trace_ocfs2_blkno_stringify(blkno, name, namelen);
   2083
   2084	status = 0;
   2085bail:
   2086	if (status < 0)
   2087		mlog_errno(status);
   2088	return status;
   2089}
   2090
   2091static int ocfs2_lookup_lock_orphan_dir(struct ocfs2_super *osb,
   2092					struct inode **ret_orphan_dir,
   2093					struct buffer_head **ret_orphan_dir_bh)
   2094{
   2095	struct inode *orphan_dir_inode;
   2096	struct buffer_head *orphan_dir_bh = NULL;
   2097	int ret = 0;
   2098
   2099	orphan_dir_inode = ocfs2_get_system_file_inode(osb,
   2100						       ORPHAN_DIR_SYSTEM_INODE,
   2101						       osb->slot_num);
   2102	if (!orphan_dir_inode) {
   2103		ret = -ENOENT;
   2104		mlog_errno(ret);
   2105		return ret;
   2106	}
   2107
   2108	inode_lock(orphan_dir_inode);
   2109
   2110	ret = ocfs2_inode_lock(orphan_dir_inode, &orphan_dir_bh, 1);
   2111	if (ret < 0) {
   2112		inode_unlock(orphan_dir_inode);
   2113		iput(orphan_dir_inode);
   2114
   2115		mlog_errno(ret);
   2116		return ret;
   2117	}
   2118
   2119	*ret_orphan_dir = orphan_dir_inode;
   2120	*ret_orphan_dir_bh = orphan_dir_bh;
   2121
   2122	return 0;
   2123}
   2124
   2125static int __ocfs2_prepare_orphan_dir(struct inode *orphan_dir_inode,
   2126				      struct buffer_head *orphan_dir_bh,
   2127				      u64 blkno,
   2128				      char *name,
   2129				      struct ocfs2_dir_lookup_result *lookup,
   2130				      bool dio)
   2131{
   2132	int ret;
   2133	struct ocfs2_super *osb = OCFS2_SB(orphan_dir_inode->i_sb);
   2134	int namelen = dio ?
   2135			(OCFS2_DIO_ORPHAN_PREFIX_LEN + OCFS2_ORPHAN_NAMELEN) :
   2136			OCFS2_ORPHAN_NAMELEN;
   2137
   2138	if (dio) {
   2139		ret = snprintf(name, OCFS2_DIO_ORPHAN_PREFIX_LEN + 1, "%s",
   2140				OCFS2_DIO_ORPHAN_PREFIX);
   2141		if (ret != OCFS2_DIO_ORPHAN_PREFIX_LEN) {
   2142			ret = -EINVAL;
   2143			mlog_errno(ret);
   2144			return ret;
   2145		}
   2146
   2147		ret = ocfs2_blkno_stringify(blkno,
   2148				name + OCFS2_DIO_ORPHAN_PREFIX_LEN);
   2149	} else
   2150		ret = ocfs2_blkno_stringify(blkno, name);
   2151	if (ret < 0) {
   2152		mlog_errno(ret);
   2153		return ret;
   2154	}
   2155
   2156	ret = ocfs2_prepare_dir_for_insert(osb, orphan_dir_inode,
   2157					   orphan_dir_bh, name,
   2158					   namelen, lookup);
   2159	if (ret < 0) {
   2160		mlog_errno(ret);
   2161		return ret;
   2162	}
   2163
   2164	return 0;
   2165}
   2166
   2167/**
   2168 * ocfs2_prepare_orphan_dir() - Prepare an orphan directory for
   2169 * insertion of an orphan.
   2170 * @osb: ocfs2 file system
   2171 * @ret_orphan_dir: Orphan dir inode - returned locked!
   2172 * @blkno: Actual block number of the inode to be inserted into orphan dir.
   2173 * @lookup: dir lookup result, to be passed back into functions like
   2174 *          ocfs2_orphan_add
   2175 *
   2176 * Returns zero on success and the ret_orphan_dir, name and lookup
   2177 * fields will be populated.
   2178 *
   2179 * Returns non-zero on failure. 
   2180 */
   2181static int ocfs2_prepare_orphan_dir(struct ocfs2_super *osb,
   2182				    struct inode **ret_orphan_dir,
   2183				    u64 blkno,
   2184				    char *name,
   2185				    struct ocfs2_dir_lookup_result *lookup,
   2186				    bool dio)
   2187{
   2188	struct inode *orphan_dir_inode = NULL;
   2189	struct buffer_head *orphan_dir_bh = NULL;
   2190	int ret = 0;
   2191
   2192	ret = ocfs2_lookup_lock_orphan_dir(osb, &orphan_dir_inode,
   2193					   &orphan_dir_bh);
   2194	if (ret < 0) {
   2195		mlog_errno(ret);
   2196		return ret;
   2197	}
   2198
   2199	ret = __ocfs2_prepare_orphan_dir(orphan_dir_inode, orphan_dir_bh,
   2200					 blkno, name, lookup, dio);
   2201	if (ret < 0) {
   2202		mlog_errno(ret);
   2203		goto out;
   2204	}
   2205
   2206	*ret_orphan_dir = orphan_dir_inode;
   2207
   2208out:
   2209	brelse(orphan_dir_bh);
   2210
   2211	if (ret) {
   2212		ocfs2_inode_unlock(orphan_dir_inode, 1);
   2213		inode_unlock(orphan_dir_inode);
   2214		iput(orphan_dir_inode);
   2215	}
   2216
   2217	if (ret)
   2218		mlog_errno(ret);
   2219	return ret;
   2220}
   2221
   2222static int ocfs2_orphan_add(struct ocfs2_super *osb,
   2223			    handle_t *handle,
   2224			    struct inode *inode,
   2225			    struct buffer_head *fe_bh,
   2226			    char *name,
   2227			    struct ocfs2_dir_lookup_result *lookup,
   2228			    struct inode *orphan_dir_inode,
   2229			    bool dio)
   2230{
   2231	struct buffer_head *orphan_dir_bh = NULL;
   2232	int status = 0;
   2233	struct ocfs2_dinode *orphan_fe;
   2234	struct ocfs2_dinode *fe = (struct ocfs2_dinode *) fe_bh->b_data;
   2235	int namelen = dio ?
   2236			(OCFS2_DIO_ORPHAN_PREFIX_LEN + OCFS2_ORPHAN_NAMELEN) :
   2237			OCFS2_ORPHAN_NAMELEN;
   2238
   2239	trace_ocfs2_orphan_add_begin(
   2240				(unsigned long long)OCFS2_I(inode)->ip_blkno);
   2241
   2242	status = ocfs2_read_inode_block(orphan_dir_inode, &orphan_dir_bh);
   2243	if (status < 0) {
   2244		mlog_errno(status);
   2245		goto leave;
   2246	}
   2247
   2248	status = ocfs2_journal_access_di(handle,
   2249					 INODE_CACHE(orphan_dir_inode),
   2250					 orphan_dir_bh,
   2251					 OCFS2_JOURNAL_ACCESS_WRITE);
   2252	if (status < 0) {
   2253		mlog_errno(status);
   2254		goto leave;
   2255	}
   2256
   2257	/*
   2258	 * We're going to journal the change of i_flags and i_orphaned_slot.
   2259	 * It's safe anyway, though some callers may duplicate the journaling.
   2260	 * Journaling within the func just make the logic look more
   2261	 * straightforward.
   2262	 */
   2263	status = ocfs2_journal_access_di(handle,
   2264					 INODE_CACHE(inode),
   2265					 fe_bh,
   2266					 OCFS2_JOURNAL_ACCESS_WRITE);
   2267	if (status < 0) {
   2268		mlog_errno(status);
   2269		goto leave;
   2270	}
   2271
   2272	/* we're a cluster, and nlink can change on disk from
   2273	 * underneath us... */
   2274	orphan_fe = (struct ocfs2_dinode *) orphan_dir_bh->b_data;
   2275	if (S_ISDIR(inode->i_mode))
   2276		ocfs2_add_links_count(orphan_fe, 1);
   2277	set_nlink(orphan_dir_inode, ocfs2_read_links_count(orphan_fe));
   2278	ocfs2_journal_dirty(handle, orphan_dir_bh);
   2279
   2280	status = __ocfs2_add_entry(handle, orphan_dir_inode, name,
   2281				   namelen, inode,
   2282				   OCFS2_I(inode)->ip_blkno,
   2283				   orphan_dir_bh, lookup);
   2284	if (status < 0) {
   2285		mlog_errno(status);
   2286		goto rollback;
   2287	}
   2288
   2289	if (dio) {
   2290		/* Update flag OCFS2_DIO_ORPHANED_FL and record the orphan
   2291		 * slot.
   2292		 */
   2293		fe->i_flags |= cpu_to_le32(OCFS2_DIO_ORPHANED_FL);
   2294		fe->i_dio_orphaned_slot = cpu_to_le16(osb->slot_num);
   2295	} else {
   2296		fe->i_flags |= cpu_to_le32(OCFS2_ORPHANED_FL);
   2297		OCFS2_I(inode)->ip_flags &= ~OCFS2_INODE_SKIP_ORPHAN_DIR;
   2298
   2299		/* Record which orphan dir our inode now resides
   2300		 * in. delete_inode will use this to determine which orphan
   2301		 * dir to lock. */
   2302		fe->i_orphaned_slot = cpu_to_le16(osb->slot_num);
   2303	}
   2304
   2305	ocfs2_journal_dirty(handle, fe_bh);
   2306
   2307	trace_ocfs2_orphan_add_end((unsigned long long)OCFS2_I(inode)->ip_blkno,
   2308				   osb->slot_num);
   2309
   2310rollback:
   2311	if (status < 0) {
   2312		if (S_ISDIR(inode->i_mode))
   2313			ocfs2_add_links_count(orphan_fe, -1);
   2314		set_nlink(orphan_dir_inode, ocfs2_read_links_count(orphan_fe));
   2315	}
   2316
   2317leave:
   2318	brelse(orphan_dir_bh);
   2319
   2320	return status;
   2321}
   2322
   2323/* unlike orphan_add, we expect the orphan dir to already be locked here. */
   2324int ocfs2_orphan_del(struct ocfs2_super *osb,
   2325		     handle_t *handle,
   2326		     struct inode *orphan_dir_inode,
   2327		     struct inode *inode,
   2328		     struct buffer_head *orphan_dir_bh,
   2329		     bool dio)
   2330{
   2331	char name[OCFS2_DIO_ORPHAN_PREFIX_LEN + OCFS2_ORPHAN_NAMELEN + 1];
   2332	struct ocfs2_dinode *orphan_fe;
   2333	int status = 0;
   2334	struct ocfs2_dir_lookup_result lookup = { NULL, };
   2335
   2336	if (dio) {
   2337		status = snprintf(name, OCFS2_DIO_ORPHAN_PREFIX_LEN + 1, "%s",
   2338				OCFS2_DIO_ORPHAN_PREFIX);
   2339		if (status != OCFS2_DIO_ORPHAN_PREFIX_LEN) {
   2340			status = -EINVAL;
   2341			mlog_errno(status);
   2342			return status;
   2343		}
   2344
   2345		status = ocfs2_blkno_stringify(OCFS2_I(inode)->ip_blkno,
   2346				name + OCFS2_DIO_ORPHAN_PREFIX_LEN);
   2347	} else
   2348		status = ocfs2_blkno_stringify(OCFS2_I(inode)->ip_blkno, name);
   2349	if (status < 0) {
   2350		mlog_errno(status);
   2351		goto leave;
   2352	}
   2353
   2354	trace_ocfs2_orphan_del(
   2355	     (unsigned long long)OCFS2_I(orphan_dir_inode)->ip_blkno,
   2356	     name, strlen(name));
   2357
   2358	status = ocfs2_journal_access_di(handle,
   2359					 INODE_CACHE(orphan_dir_inode),
   2360					 orphan_dir_bh,
   2361					 OCFS2_JOURNAL_ACCESS_WRITE);
   2362	if (status < 0) {
   2363		mlog_errno(status);
   2364		goto leave;
   2365	}
   2366
   2367	/* find it's spot in the orphan directory */
   2368	status = ocfs2_find_entry(name, strlen(name), orphan_dir_inode,
   2369				  &lookup);
   2370	if (status) {
   2371		mlog_errno(status);
   2372		goto leave;
   2373	}
   2374
   2375	/* remove it from the orphan directory */
   2376	status = ocfs2_delete_entry(handle, orphan_dir_inode, &lookup);
   2377	if (status < 0) {
   2378		mlog_errno(status);
   2379		goto leave;
   2380	}
   2381
   2382	/* do the i_nlink dance! :) */
   2383	orphan_fe = (struct ocfs2_dinode *) orphan_dir_bh->b_data;
   2384	if (S_ISDIR(inode->i_mode))
   2385		ocfs2_add_links_count(orphan_fe, -1);
   2386	set_nlink(orphan_dir_inode, ocfs2_read_links_count(orphan_fe));
   2387	ocfs2_journal_dirty(handle, orphan_dir_bh);
   2388
   2389leave:
   2390	ocfs2_free_dir_lookup_result(&lookup);
   2391
   2392	if (status)
   2393		mlog_errno(status);
   2394	return status;
   2395}
   2396
   2397/**
   2398 * ocfs2_prep_new_orphaned_file() - Prepare the orphan dir to receive a newly
   2399 * allocated file. This is different from the typical 'add to orphan dir'
   2400 * operation in that the inode does not yet exist. This is a problem because
   2401 * the orphan dir stringifies the inode block number to come up with it's
   2402 * dirent. Obviously if the inode does not yet exist we have a chicken and egg
   2403 * problem. This function works around it by calling deeper into the orphan
   2404 * and suballoc code than other callers. Use this only by necessity.
   2405 * @dir: The directory which this inode will ultimately wind up under - not the
   2406 * orphan dir!
   2407 * @dir_bh: buffer_head the @dir inode block
   2408 * @orphan_name: string of length (CFS2_ORPHAN_NAMELEN + 1). Will be filled
   2409 * with the string to be used for orphan dirent. Pass back to the orphan dir
   2410 * code.
   2411 * @ret_orphan_dir: orphan dir inode returned to be passed back into orphan
   2412 * dir code.
   2413 * @ret_di_blkno: block number where the new inode will be allocated.
   2414 * @orphan_insert: Dir insert context to be passed back into orphan dir code.
   2415 * @ret_inode_ac: Inode alloc context to be passed back to the allocator.
   2416 *
   2417 * Returns zero on success and the ret_orphan_dir, name and lookup
   2418 * fields will be populated.
   2419 *
   2420 * Returns non-zero on failure. 
   2421 */
   2422static int ocfs2_prep_new_orphaned_file(struct inode *dir,
   2423					struct buffer_head *dir_bh,
   2424					char *orphan_name,
   2425					struct inode **ret_orphan_dir,
   2426					u64 *ret_di_blkno,
   2427					struct ocfs2_dir_lookup_result *orphan_insert,
   2428					struct ocfs2_alloc_context **ret_inode_ac)
   2429{
   2430	int ret;
   2431	u64 di_blkno;
   2432	struct ocfs2_super *osb = OCFS2_SB(dir->i_sb);
   2433	struct inode *orphan_dir = NULL;
   2434	struct buffer_head *orphan_dir_bh = NULL;
   2435	struct ocfs2_alloc_context *inode_ac = NULL;
   2436
   2437	ret = ocfs2_lookup_lock_orphan_dir(osb, &orphan_dir, &orphan_dir_bh);
   2438	if (ret < 0) {
   2439		mlog_errno(ret);
   2440		return ret;
   2441	}
   2442
   2443	/* reserve an inode spot */
   2444	ret = ocfs2_reserve_new_inode(osb, &inode_ac);
   2445	if (ret < 0) {
   2446		if (ret != -ENOSPC)
   2447			mlog_errno(ret);
   2448		goto out;
   2449	}
   2450
   2451	ret = ocfs2_find_new_inode_loc(dir, dir_bh, inode_ac,
   2452				       &di_blkno);
   2453	if (ret) {
   2454		mlog_errno(ret);
   2455		goto out;
   2456	}
   2457
   2458	ret = __ocfs2_prepare_orphan_dir(orphan_dir, orphan_dir_bh,
   2459					 di_blkno, orphan_name, orphan_insert,
   2460					 false);
   2461	if (ret < 0) {
   2462		mlog_errno(ret);
   2463		goto out;
   2464	}
   2465
   2466out:
   2467	if (ret == 0) {
   2468		*ret_orphan_dir = orphan_dir;
   2469		*ret_di_blkno = di_blkno;
   2470		*ret_inode_ac = inode_ac;
   2471		/*
   2472		 * orphan_name and orphan_insert are already up to
   2473		 * date via prepare_orphan_dir
   2474		 */
   2475	} else {
   2476		/* Unroll reserve_new_inode* */
   2477		if (inode_ac)
   2478			ocfs2_free_alloc_context(inode_ac);
   2479
   2480		/* Unroll orphan dir locking */
   2481		inode_unlock(orphan_dir);
   2482		ocfs2_inode_unlock(orphan_dir, 1);
   2483		iput(orphan_dir);
   2484	}
   2485
   2486	brelse(orphan_dir_bh);
   2487
   2488	return ret;
   2489}
   2490
   2491int ocfs2_create_inode_in_orphan(struct inode *dir,
   2492				 int mode,
   2493				 struct inode **new_inode)
   2494{
   2495	int status, did_quota_inode = 0;
   2496	struct inode *inode = NULL;
   2497	struct inode *orphan_dir = NULL;
   2498	struct ocfs2_super *osb = OCFS2_SB(dir->i_sb);
   2499	handle_t *handle = NULL;
   2500	char orphan_name[OCFS2_ORPHAN_NAMELEN + 1];
   2501	struct buffer_head *parent_di_bh = NULL;
   2502	struct buffer_head *new_di_bh = NULL;
   2503	struct ocfs2_alloc_context *inode_ac = NULL;
   2504	struct ocfs2_dir_lookup_result orphan_insert = { NULL, };
   2505	u64 di_blkno, suballoc_loc;
   2506	u16 suballoc_bit;
   2507
   2508	status = ocfs2_inode_lock(dir, &parent_di_bh, 1);
   2509	if (status < 0) {
   2510		if (status != -ENOENT)
   2511			mlog_errno(status);
   2512		return status;
   2513	}
   2514
   2515	status = ocfs2_prep_new_orphaned_file(dir, parent_di_bh,
   2516					      orphan_name, &orphan_dir,
   2517					      &di_blkno, &orphan_insert, &inode_ac);
   2518	if (status < 0) {
   2519		if (status != -ENOSPC)
   2520			mlog_errno(status);
   2521		goto leave;
   2522	}
   2523
   2524	inode = ocfs2_get_init_inode(dir, mode);
   2525	if (IS_ERR(inode)) {
   2526		status = PTR_ERR(inode);
   2527		inode = NULL;
   2528		mlog_errno(status);
   2529		goto leave;
   2530	}
   2531
   2532	handle = ocfs2_start_trans(osb, ocfs2_mknod_credits(osb->sb, 0, 0));
   2533	if (IS_ERR(handle)) {
   2534		status = PTR_ERR(handle);
   2535		handle = NULL;
   2536		mlog_errno(status);
   2537		goto leave;
   2538	}
   2539
   2540	status = dquot_alloc_inode(inode);
   2541	if (status)
   2542		goto leave;
   2543	did_quota_inode = 1;
   2544
   2545	status = ocfs2_claim_new_inode_at_loc(handle, dir, inode_ac,
   2546					      &suballoc_loc,
   2547					      &suballoc_bit, di_blkno);
   2548	if (status < 0) {
   2549		mlog_errno(status);
   2550		goto leave;
   2551	}
   2552
   2553	clear_nlink(inode);
   2554	/* do the real work now. */
   2555	status = __ocfs2_mknod_locked(dir, inode,
   2556				      0, &new_di_bh, parent_di_bh, handle,
   2557				      inode_ac, di_blkno, suballoc_loc,
   2558				      suballoc_bit);
   2559	if (status < 0) {
   2560		mlog_errno(status);
   2561		goto leave;
   2562	}
   2563
   2564	status = ocfs2_orphan_add(osb, handle, inode, new_di_bh, orphan_name,
   2565				  &orphan_insert, orphan_dir, false);
   2566	if (status < 0) {
   2567		mlog_errno(status);
   2568		goto leave;
   2569	}
   2570
   2571	/* get open lock so that only nodes can't remove it from orphan dir. */
   2572	status = ocfs2_open_lock(inode);
   2573	if (status < 0)
   2574		mlog_errno(status);
   2575
   2576	insert_inode_hash(inode);
   2577leave:
   2578	if (status < 0 && did_quota_inode)
   2579		dquot_free_inode(inode);
   2580	if (handle)
   2581		ocfs2_commit_trans(osb, handle);
   2582
   2583	if (orphan_dir) {
   2584		/* This was locked for us in ocfs2_prepare_orphan_dir() */
   2585		ocfs2_inode_unlock(orphan_dir, 1);
   2586		inode_unlock(orphan_dir);
   2587		iput(orphan_dir);
   2588	}
   2589
   2590	if ((status < 0) && inode) {
   2591		clear_nlink(inode);
   2592		iput(inode);
   2593	}
   2594
   2595	if (inode_ac)
   2596		ocfs2_free_alloc_context(inode_ac);
   2597
   2598	brelse(new_di_bh);
   2599
   2600	if (!status)
   2601		*new_inode = inode;
   2602
   2603	ocfs2_free_dir_lookup_result(&orphan_insert);
   2604
   2605	ocfs2_inode_unlock(dir, 1);
   2606	brelse(parent_di_bh);
   2607	return status;
   2608}
   2609
   2610int ocfs2_add_inode_to_orphan(struct ocfs2_super *osb,
   2611	struct inode *inode)
   2612{
   2613	char orphan_name[OCFS2_DIO_ORPHAN_PREFIX_LEN + OCFS2_ORPHAN_NAMELEN + 1];
   2614	struct inode *orphan_dir_inode = NULL;
   2615	struct ocfs2_dir_lookup_result orphan_insert = { NULL, };
   2616	struct buffer_head *di_bh = NULL;
   2617	int status = 0;
   2618	handle_t *handle = NULL;
   2619	struct ocfs2_dinode *di = NULL;
   2620
   2621	status = ocfs2_inode_lock(inode, &di_bh, 1);
   2622	if (status < 0) {
   2623		mlog_errno(status);
   2624		goto bail;
   2625	}
   2626
   2627	di = (struct ocfs2_dinode *) di_bh->b_data;
   2628	/*
   2629	 * Another append dio crashed?
   2630	 * If so, manually recover it first.
   2631	 */
   2632	if (unlikely(di->i_flags & cpu_to_le32(OCFS2_DIO_ORPHANED_FL))) {
   2633		status = ocfs2_truncate_file(inode, di_bh, i_size_read(inode));
   2634		if (status < 0) {
   2635			if (status != -ENOSPC)
   2636				mlog_errno(status);
   2637			goto bail_unlock_inode;
   2638		}
   2639
   2640		status = ocfs2_del_inode_from_orphan(osb, inode, di_bh, 0, 0);
   2641		if (status < 0) {
   2642			mlog_errno(status);
   2643			goto bail_unlock_inode;
   2644		}
   2645	}
   2646
   2647	status = ocfs2_prepare_orphan_dir(osb, &orphan_dir_inode,
   2648			OCFS2_I(inode)->ip_blkno,
   2649			orphan_name,
   2650			&orphan_insert,
   2651			true);
   2652	if (status < 0) {
   2653		mlog_errno(status);
   2654		goto bail_unlock_inode;
   2655	}
   2656
   2657	handle = ocfs2_start_trans(osb,
   2658			OCFS2_INODE_ADD_TO_ORPHAN_CREDITS);
   2659	if (IS_ERR(handle)) {
   2660		status = PTR_ERR(handle);
   2661		goto bail_unlock_orphan;
   2662	}
   2663
   2664	status = ocfs2_orphan_add(osb, handle, inode, di_bh, orphan_name,
   2665			&orphan_insert, orphan_dir_inode, true);
   2666	if (status)
   2667		mlog_errno(status);
   2668
   2669	ocfs2_commit_trans(osb, handle);
   2670
   2671bail_unlock_orphan:
   2672	ocfs2_inode_unlock(orphan_dir_inode, 1);
   2673	inode_unlock(orphan_dir_inode);
   2674	iput(orphan_dir_inode);
   2675
   2676	ocfs2_free_dir_lookup_result(&orphan_insert);
   2677
   2678bail_unlock_inode:
   2679	ocfs2_inode_unlock(inode, 1);
   2680	brelse(di_bh);
   2681
   2682bail:
   2683	return status;
   2684}
   2685
   2686int ocfs2_del_inode_from_orphan(struct ocfs2_super *osb,
   2687		struct inode *inode, struct buffer_head *di_bh,
   2688		int update_isize, loff_t end)
   2689{
   2690	struct inode *orphan_dir_inode = NULL;
   2691	struct buffer_head *orphan_dir_bh = NULL;
   2692	struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
   2693	handle_t *handle = NULL;
   2694	int status = 0;
   2695
   2696	orphan_dir_inode = ocfs2_get_system_file_inode(osb,
   2697			ORPHAN_DIR_SYSTEM_INODE,
   2698			le16_to_cpu(di->i_dio_orphaned_slot));
   2699	if (!orphan_dir_inode) {
   2700		status = -ENOENT;
   2701		mlog_errno(status);
   2702		goto bail;
   2703	}
   2704
   2705	inode_lock(orphan_dir_inode);
   2706	status = ocfs2_inode_lock(orphan_dir_inode, &orphan_dir_bh, 1);
   2707	if (status < 0) {
   2708		inode_unlock(orphan_dir_inode);
   2709		iput(orphan_dir_inode);
   2710		mlog_errno(status);
   2711		goto bail;
   2712	}
   2713
   2714	handle = ocfs2_start_trans(osb,
   2715			OCFS2_INODE_DEL_FROM_ORPHAN_CREDITS);
   2716	if (IS_ERR(handle)) {
   2717		status = PTR_ERR(handle);
   2718		goto bail_unlock_orphan;
   2719	}
   2720
   2721	BUG_ON(!(di->i_flags & cpu_to_le32(OCFS2_DIO_ORPHANED_FL)));
   2722
   2723	status = ocfs2_orphan_del(osb, handle, orphan_dir_inode,
   2724				inode, orphan_dir_bh, true);
   2725	if (status < 0) {
   2726		mlog_errno(status);
   2727		goto bail_commit;
   2728	}
   2729
   2730	status = ocfs2_journal_access_di(handle,
   2731			INODE_CACHE(inode),
   2732			di_bh,
   2733			OCFS2_JOURNAL_ACCESS_WRITE);
   2734	if (status < 0) {
   2735		mlog_errno(status);
   2736		goto bail_commit;
   2737	}
   2738
   2739	di->i_flags &= ~cpu_to_le32(OCFS2_DIO_ORPHANED_FL);
   2740	di->i_dio_orphaned_slot = 0;
   2741
   2742	if (update_isize) {
   2743		status = ocfs2_set_inode_size(handle, inode, di_bh, end);
   2744		if (status)
   2745			mlog_errno(status);
   2746	} else
   2747		ocfs2_journal_dirty(handle, di_bh);
   2748
   2749bail_commit:
   2750	ocfs2_commit_trans(osb, handle);
   2751
   2752bail_unlock_orphan:
   2753	ocfs2_inode_unlock(orphan_dir_inode, 1);
   2754	inode_unlock(orphan_dir_inode);
   2755	brelse(orphan_dir_bh);
   2756	iput(orphan_dir_inode);
   2757
   2758bail:
   2759	return status;
   2760}
   2761
   2762int ocfs2_mv_orphaned_inode_to_new(struct inode *dir,
   2763				   struct inode *inode,
   2764				   struct dentry *dentry)
   2765{
   2766	int status = 0;
   2767	struct buffer_head *parent_di_bh = NULL;
   2768	handle_t *handle = NULL;
   2769	struct ocfs2_super *osb = OCFS2_SB(dir->i_sb);
   2770	struct ocfs2_dinode *dir_di, *di;
   2771	struct inode *orphan_dir_inode = NULL;
   2772	struct buffer_head *orphan_dir_bh = NULL;
   2773	struct buffer_head *di_bh = NULL;
   2774	struct ocfs2_dir_lookup_result lookup = { NULL, };
   2775
   2776	trace_ocfs2_mv_orphaned_inode_to_new(dir, dentry,
   2777				dentry->d_name.len, dentry->d_name.name,
   2778				(unsigned long long)OCFS2_I(dir)->ip_blkno,
   2779				(unsigned long long)OCFS2_I(inode)->ip_blkno);
   2780
   2781	status = ocfs2_inode_lock(dir, &parent_di_bh, 1);
   2782	if (status < 0) {
   2783		if (status != -ENOENT)
   2784			mlog_errno(status);
   2785		return status;
   2786	}
   2787
   2788	dir_di = (struct ocfs2_dinode *) parent_di_bh->b_data;
   2789	if (!dir_di->i_links_count) {
   2790		/* can't make a file in a deleted directory. */
   2791		status = -ENOENT;
   2792		goto leave;
   2793	}
   2794
   2795	status = ocfs2_check_dir_for_entry(dir, dentry->d_name.name,
   2796					   dentry->d_name.len);
   2797	if (status)
   2798		goto leave;
   2799
   2800	/* get a spot inside the dir. */
   2801	status = ocfs2_prepare_dir_for_insert(osb, dir, parent_di_bh,
   2802					      dentry->d_name.name,
   2803					      dentry->d_name.len, &lookup);
   2804	if (status < 0) {
   2805		mlog_errno(status);
   2806		goto leave;
   2807	}
   2808
   2809	orphan_dir_inode = ocfs2_get_system_file_inode(osb,
   2810						       ORPHAN_DIR_SYSTEM_INODE,
   2811						       osb->slot_num);
   2812	if (!orphan_dir_inode) {
   2813		status = -ENOENT;
   2814		mlog_errno(status);
   2815		goto leave;
   2816	}
   2817
   2818	inode_lock(orphan_dir_inode);
   2819
   2820	status = ocfs2_inode_lock(orphan_dir_inode, &orphan_dir_bh, 1);
   2821	if (status < 0) {
   2822		mlog_errno(status);
   2823		inode_unlock(orphan_dir_inode);
   2824		iput(orphan_dir_inode);
   2825		goto leave;
   2826	}
   2827
   2828	status = ocfs2_read_inode_block(inode, &di_bh);
   2829	if (status < 0) {
   2830		mlog_errno(status);
   2831		goto orphan_unlock;
   2832	}
   2833
   2834	handle = ocfs2_start_trans(osb, ocfs2_rename_credits(osb->sb));
   2835	if (IS_ERR(handle)) {
   2836		status = PTR_ERR(handle);
   2837		handle = NULL;
   2838		mlog_errno(status);
   2839		goto orphan_unlock;
   2840	}
   2841
   2842	status = ocfs2_journal_access_di(handle, INODE_CACHE(inode),
   2843					 di_bh, OCFS2_JOURNAL_ACCESS_WRITE);
   2844	if (status < 0) {
   2845		mlog_errno(status);
   2846		goto out_commit;
   2847	}
   2848
   2849	status = ocfs2_orphan_del(osb, handle, orphan_dir_inode, inode,
   2850				  orphan_dir_bh, false);
   2851	if (status < 0) {
   2852		mlog_errno(status);
   2853		goto out_commit;
   2854	}
   2855
   2856	di = (struct ocfs2_dinode *)di_bh->b_data;
   2857	di->i_flags &= ~cpu_to_le32(OCFS2_ORPHANED_FL);
   2858	di->i_orphaned_slot = 0;
   2859	set_nlink(inode, 1);
   2860	ocfs2_set_links_count(di, inode->i_nlink);
   2861	ocfs2_update_inode_fsync_trans(handle, inode, 1);
   2862	ocfs2_journal_dirty(handle, di_bh);
   2863
   2864	status = ocfs2_add_entry(handle, dentry, inode,
   2865				 OCFS2_I(inode)->ip_blkno, parent_di_bh,
   2866				 &lookup);
   2867	if (status < 0) {
   2868		mlog_errno(status);
   2869		goto out_commit;
   2870	}
   2871
   2872	status = ocfs2_dentry_attach_lock(dentry, inode,
   2873					  OCFS2_I(dir)->ip_blkno);
   2874	if (status) {
   2875		mlog_errno(status);
   2876		goto out_commit;
   2877	}
   2878
   2879	d_instantiate(dentry, inode);
   2880	status = 0;
   2881out_commit:
   2882	ocfs2_commit_trans(osb, handle);
   2883orphan_unlock:
   2884	ocfs2_inode_unlock(orphan_dir_inode, 1);
   2885	inode_unlock(orphan_dir_inode);
   2886	iput(orphan_dir_inode);
   2887leave:
   2888
   2889	ocfs2_inode_unlock(dir, 1);
   2890
   2891	brelse(di_bh);
   2892	brelse(parent_di_bh);
   2893	brelse(orphan_dir_bh);
   2894
   2895	ocfs2_free_dir_lookup_result(&lookup);
   2896
   2897	if (status)
   2898		mlog_errno(status);
   2899
   2900	return status;
   2901}
   2902
   2903const struct inode_operations ocfs2_dir_iops = {
   2904	.create		= ocfs2_create,
   2905	.lookup		= ocfs2_lookup,
   2906	.link		= ocfs2_link,
   2907	.unlink		= ocfs2_unlink,
   2908	.rmdir		= ocfs2_unlink,
   2909	.symlink	= ocfs2_symlink,
   2910	.mkdir		= ocfs2_mkdir,
   2911	.mknod		= ocfs2_mknod,
   2912	.rename		= ocfs2_rename,
   2913	.setattr	= ocfs2_setattr,
   2914	.getattr	= ocfs2_getattr,
   2915	.permission	= ocfs2_permission,
   2916	.listxattr	= ocfs2_listxattr,
   2917	.fiemap         = ocfs2_fiemap,
   2918	.get_acl	= ocfs2_iop_get_acl,
   2919	.set_acl	= ocfs2_iop_set_acl,
   2920	.fileattr_get	= ocfs2_fileattr_get,
   2921	.fileattr_set	= ocfs2_fileattr_set,
   2922};