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