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