Linux Audio

Check our new training course

Linux BSP upgrade and security maintenance

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