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