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