ovl: share inode for hard link
[cascardo/linux.git] / fs / overlayfs / dir.c
1 /*
2  *
3  * Copyright (C) 2011 Novell Inc.
4  *
5  * This program is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 as published by
7  * the Free Software Foundation.
8  */
9
10 #include <linux/fs.h>
11 #include <linux/namei.h>
12 #include <linux/xattr.h>
13 #include <linux/security.h>
14 #include <linux/cred.h>
15 #include "overlayfs.h"
16
17 void ovl_cleanup(struct inode *wdir, struct dentry *wdentry)
18 {
19         int err;
20
21         dget(wdentry);
22         if (d_is_dir(wdentry))
23                 err = ovl_do_rmdir(wdir, wdentry);
24         else
25                 err = ovl_do_unlink(wdir, wdentry);
26         dput(wdentry);
27
28         if (err) {
29                 pr_err("overlayfs: cleanup of '%pd2' failed (%i)\n",
30                        wdentry, err);
31         }
32 }
33
34 struct dentry *ovl_lookup_temp(struct dentry *workdir, struct dentry *dentry)
35 {
36         struct dentry *temp;
37         char name[20];
38
39         snprintf(name, sizeof(name), "#%lx", (unsigned long) dentry);
40
41         temp = lookup_one_len(name, workdir, strlen(name));
42         if (!IS_ERR(temp) && temp->d_inode) {
43                 pr_err("overlayfs: workdir/%s already exists\n", name);
44                 dput(temp);
45                 temp = ERR_PTR(-EIO);
46         }
47
48         return temp;
49 }
50
51 /* caller holds i_mutex on workdir */
52 static struct dentry *ovl_whiteout(struct dentry *workdir,
53                                    struct dentry *dentry)
54 {
55         int err;
56         struct dentry *whiteout;
57         struct inode *wdir = workdir->d_inode;
58
59         whiteout = ovl_lookup_temp(workdir, dentry);
60         if (IS_ERR(whiteout))
61                 return whiteout;
62
63         err = ovl_do_whiteout(wdir, whiteout);
64         if (err) {
65                 dput(whiteout);
66                 whiteout = ERR_PTR(err);
67         }
68
69         return whiteout;
70 }
71
72 int ovl_create_real(struct inode *dir, struct dentry *newdentry,
73                     struct kstat *stat, const char *link,
74                     struct dentry *hardlink, bool debug)
75 {
76         int err;
77
78         if (newdentry->d_inode)
79                 return -ESTALE;
80
81         if (hardlink) {
82                 err = ovl_do_link(hardlink, dir, newdentry, debug);
83         } else {
84                 switch (stat->mode & S_IFMT) {
85                 case S_IFREG:
86                         err = ovl_do_create(dir, newdentry, stat->mode, debug);
87                         break;
88
89                 case S_IFDIR:
90                         err = ovl_do_mkdir(dir, newdentry, stat->mode, debug);
91                         break;
92
93                 case S_IFCHR:
94                 case S_IFBLK:
95                 case S_IFIFO:
96                 case S_IFSOCK:
97                         err = ovl_do_mknod(dir, newdentry,
98                                            stat->mode, stat->rdev, debug);
99                         break;
100
101                 case S_IFLNK:
102                         err = ovl_do_symlink(dir, newdentry, link, debug);
103                         break;
104
105                 default:
106                         err = -EPERM;
107                 }
108         }
109         if (!err && WARN_ON(!newdentry->d_inode)) {
110                 /*
111                  * Not quite sure if non-instantiated dentry is legal or not.
112                  * VFS doesn't seem to care so check and warn here.
113                  */
114                 err = -ENOENT;
115         }
116         return err;
117 }
118
119 static int ovl_set_opaque(struct dentry *upperdentry)
120 {
121         return ovl_do_setxattr(upperdentry, OVL_XATTR_OPAQUE, "y", 1, 0);
122 }
123
124 static void ovl_remove_opaque(struct dentry *upperdentry)
125 {
126         int err;
127
128         err = ovl_do_removexattr(upperdentry, OVL_XATTR_OPAQUE);
129         if (err) {
130                 pr_warn("overlayfs: failed to remove opaque from '%s' (%i)\n",
131                         upperdentry->d_name.name, err);
132         }
133 }
134
135 static int ovl_dir_getattr(struct vfsmount *mnt, struct dentry *dentry,
136                          struct kstat *stat)
137 {
138         int err;
139         enum ovl_path_type type;
140         struct path realpath;
141         const struct cred *old_cred;
142
143         type = ovl_path_real(dentry, &realpath);
144         old_cred = ovl_override_creds(dentry->d_sb);
145         err = vfs_getattr(&realpath, stat);
146         revert_creds(old_cred);
147         if (err)
148                 return err;
149
150         stat->dev = dentry->d_sb->s_dev;
151         stat->ino = dentry->d_inode->i_ino;
152
153         /*
154          * It's probably not worth it to count subdirs to get the
155          * correct link count.  nlink=1 seems to pacify 'find' and
156          * other utilities.
157          */
158         if (OVL_TYPE_MERGE(type))
159                 stat->nlink = 1;
160
161         return 0;
162 }
163
164 /* Common operations required to be done after creation of file on upper */
165 static void ovl_instantiate(struct dentry *dentry, struct inode *inode,
166                             struct dentry *newdentry, bool hardlink)
167 {
168         ovl_dentry_version_inc(dentry->d_parent);
169         ovl_dentry_update(dentry, newdentry);
170         if (!hardlink) {
171                 ovl_inode_update(inode, d_inode(newdentry));
172                 ovl_copyattr(newdentry->d_inode, inode);
173         } else {
174                 WARN_ON(ovl_inode_real(inode, NULL) != d_inode(newdentry));
175                 inc_nlink(inode);
176         }
177         d_instantiate(dentry, inode);
178 }
179
180 static int ovl_create_upper(struct dentry *dentry, struct inode *inode,
181                             struct kstat *stat, const char *link,
182                             struct dentry *hardlink)
183 {
184         struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent);
185         struct inode *udir = upperdir->d_inode;
186         struct dentry *newdentry;
187         int err;
188
189         inode_lock_nested(udir, I_MUTEX_PARENT);
190         newdentry = lookup_one_len(dentry->d_name.name, upperdir,
191                                    dentry->d_name.len);
192         err = PTR_ERR(newdentry);
193         if (IS_ERR(newdentry))
194                 goto out_unlock;
195         err = ovl_create_real(udir, newdentry, stat, link, hardlink, false);
196         if (err)
197                 goto out_dput;
198
199         ovl_instantiate(dentry, inode, newdentry, !!hardlink);
200         newdentry = NULL;
201 out_dput:
202         dput(newdentry);
203 out_unlock:
204         inode_unlock(udir);
205         return err;
206 }
207
208 static int ovl_lock_rename_workdir(struct dentry *workdir,
209                                    struct dentry *upperdir)
210 {
211         /* Workdir should not be the same as upperdir */
212         if (workdir == upperdir)
213                 goto err;
214
215         /* Workdir should not be subdir of upperdir and vice versa */
216         if (lock_rename(workdir, upperdir) != NULL)
217                 goto err_unlock;
218
219         return 0;
220
221 err_unlock:
222         unlock_rename(workdir, upperdir);
223 err:
224         pr_err("overlayfs: failed to lock workdir+upperdir\n");
225         return -EIO;
226 }
227
228 static struct dentry *ovl_clear_empty(struct dentry *dentry,
229                                       struct list_head *list)
230 {
231         struct dentry *workdir = ovl_workdir(dentry);
232         struct inode *wdir = workdir->d_inode;
233         struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent);
234         struct inode *udir = upperdir->d_inode;
235         struct path upperpath;
236         struct dentry *upper;
237         struct dentry *opaquedir;
238         struct kstat stat;
239         int err;
240
241         if (WARN_ON(!workdir))
242                 return ERR_PTR(-EROFS);
243
244         err = ovl_lock_rename_workdir(workdir, upperdir);
245         if (err)
246                 goto out;
247
248         ovl_path_upper(dentry, &upperpath);
249         err = vfs_getattr(&upperpath, &stat);
250         if (err)
251                 goto out_unlock;
252
253         err = -ESTALE;
254         if (!S_ISDIR(stat.mode))
255                 goto out_unlock;
256         upper = upperpath.dentry;
257         if (upper->d_parent->d_inode != udir)
258                 goto out_unlock;
259
260         opaquedir = ovl_lookup_temp(workdir, dentry);
261         err = PTR_ERR(opaquedir);
262         if (IS_ERR(opaquedir))
263                 goto out_unlock;
264
265         err = ovl_create_real(wdir, opaquedir, &stat, NULL, NULL, true);
266         if (err)
267                 goto out_dput;
268
269         err = ovl_copy_xattr(upper, opaquedir);
270         if (err)
271                 goto out_cleanup;
272
273         err = ovl_set_opaque(opaquedir);
274         if (err)
275                 goto out_cleanup;
276
277         inode_lock(opaquedir->d_inode);
278         err = ovl_set_attr(opaquedir, &stat);
279         inode_unlock(opaquedir->d_inode);
280         if (err)
281                 goto out_cleanup;
282
283         err = ovl_do_rename(wdir, opaquedir, udir, upper, RENAME_EXCHANGE);
284         if (err)
285                 goto out_cleanup;
286
287         ovl_cleanup_whiteouts(upper, list);
288         ovl_cleanup(wdir, upper);
289         unlock_rename(workdir, upperdir);
290
291         /* dentry's upper doesn't match now, get rid of it */
292         d_drop(dentry);
293
294         return opaquedir;
295
296 out_cleanup:
297         ovl_cleanup(wdir, opaquedir);
298 out_dput:
299         dput(opaquedir);
300 out_unlock:
301         unlock_rename(workdir, upperdir);
302 out:
303         return ERR_PTR(err);
304 }
305
306 static struct dentry *ovl_check_empty_and_clear(struct dentry *dentry)
307 {
308         int err;
309         struct dentry *ret = NULL;
310         LIST_HEAD(list);
311
312         err = ovl_check_empty_dir(dentry, &list);
313         if (err)
314                 ret = ERR_PTR(err);
315         else {
316                 /*
317                  * If no upperdentry then skip clearing whiteouts.
318                  *
319                  * Can race with copy-up, since we don't hold the upperdir
320                  * mutex.  Doesn't matter, since copy-up can't create a
321                  * non-empty directory from an empty one.
322                  */
323                 if (ovl_dentry_upper(dentry))
324                         ret = ovl_clear_empty(dentry, &list);
325         }
326
327         ovl_cache_free(&list);
328
329         return ret;
330 }
331
332 static int ovl_create_over_whiteout(struct dentry *dentry, struct inode *inode,
333                                     struct kstat *stat, const char *link,
334                                     struct dentry *hardlink)
335 {
336         struct dentry *workdir = ovl_workdir(dentry);
337         struct inode *wdir = workdir->d_inode;
338         struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent);
339         struct inode *udir = upperdir->d_inode;
340         struct dentry *upper;
341         struct dentry *newdentry;
342         int err;
343
344         if (WARN_ON(!workdir))
345                 return -EROFS;
346
347         err = ovl_lock_rename_workdir(workdir, upperdir);
348         if (err)
349                 goto out;
350
351         newdentry = ovl_lookup_temp(workdir, dentry);
352         err = PTR_ERR(newdentry);
353         if (IS_ERR(newdentry))
354                 goto out_unlock;
355
356         upper = lookup_one_len(dentry->d_name.name, upperdir,
357                                dentry->d_name.len);
358         err = PTR_ERR(upper);
359         if (IS_ERR(upper))
360                 goto out_dput;
361
362         err = ovl_create_real(wdir, newdentry, stat, link, hardlink, true);
363         if (err)
364                 goto out_dput2;
365
366         /*
367          * mode could have been mutilated due to umask (e.g. sgid directory)
368          */
369         if (!hardlink &&
370             !S_ISLNK(stat->mode) && newdentry->d_inode->i_mode != stat->mode) {
371                 struct iattr attr = {
372                         .ia_valid = ATTR_MODE,
373                         .ia_mode = stat->mode,
374                 };
375                 inode_lock(newdentry->d_inode);
376                 err = notify_change(newdentry, &attr, NULL);
377                 inode_unlock(newdentry->d_inode);
378                 if (err)
379                         goto out_cleanup;
380         }
381
382         if (!hardlink && S_ISDIR(stat->mode)) {
383                 err = ovl_set_opaque(newdentry);
384                 if (err)
385                         goto out_cleanup;
386
387                 err = ovl_do_rename(wdir, newdentry, udir, upper,
388                                     RENAME_EXCHANGE);
389                 if (err)
390                         goto out_cleanup;
391
392                 ovl_cleanup(wdir, upper);
393         } else {
394                 err = ovl_do_rename(wdir, newdentry, udir, upper, 0);
395                 if (err)
396                         goto out_cleanup;
397         }
398         ovl_instantiate(dentry, inode, newdentry, !!hardlink);
399         newdentry = NULL;
400 out_dput2:
401         dput(upper);
402 out_dput:
403         dput(newdentry);
404 out_unlock:
405         unlock_rename(workdir, upperdir);
406 out:
407         return err;
408
409 out_cleanup:
410         ovl_cleanup(wdir, newdentry);
411         goto out_dput2;
412 }
413
414 static int ovl_create_or_link(struct dentry *dentry, struct inode *inode,
415                               struct kstat *stat, const char *link,
416                               struct dentry *hardlink)
417 {
418         int err;
419         const struct cred *old_cred;
420         struct cred *override_cred;
421
422         err = ovl_copy_up(dentry->d_parent);
423         if (err)
424                 return err;
425
426         old_cred = ovl_override_creds(dentry->d_sb);
427         err = -ENOMEM;
428         override_cred = prepare_creds();
429         if (override_cred) {
430                 override_cred->fsuid = inode->i_uid;
431                 override_cred->fsgid = inode->i_gid;
432                 put_cred(override_creds(override_cred));
433                 put_cred(override_cred);
434
435                 if (!ovl_dentry_is_opaque(dentry))
436                         err = ovl_create_upper(dentry, inode, stat, link,
437                                                 hardlink);
438                 else
439                         err = ovl_create_over_whiteout(dentry, inode, stat,
440                                                         link, hardlink);
441         }
442         revert_creds(old_cred);
443         if (!err) {
444                 struct inode *realinode = d_inode(ovl_dentry_upper(dentry));
445
446                 WARN_ON(inode->i_mode != realinode->i_mode);
447                 WARN_ON(!uid_eq(inode->i_uid, realinode->i_uid));
448                 WARN_ON(!gid_eq(inode->i_gid, realinode->i_gid));
449         }
450         return err;
451 }
452
453 static int ovl_create_object(struct dentry *dentry, int mode, dev_t rdev,
454                              const char *link)
455 {
456         int err;
457         struct inode *inode;
458         struct kstat stat = {
459                 .rdev = rdev,
460         };
461
462         err = ovl_want_write(dentry);
463         if (err)
464                 goto out;
465
466         err = -ENOMEM;
467         inode = ovl_new_inode(dentry->d_sb, mode);
468         if (!inode)
469                 goto out_drop_write;
470
471         inode_init_owner(inode, dentry->d_parent->d_inode, mode);
472         stat.mode = inode->i_mode;
473
474         err = ovl_create_or_link(dentry, inode, &stat, link, NULL);
475         if (err)
476                 iput(inode);
477
478 out_drop_write:
479         ovl_drop_write(dentry);
480 out:
481         return err;
482 }
483
484 static int ovl_create(struct inode *dir, struct dentry *dentry, umode_t mode,
485                       bool excl)
486 {
487         return ovl_create_object(dentry, (mode & 07777) | S_IFREG, 0, NULL);
488 }
489
490 static int ovl_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
491 {
492         return ovl_create_object(dentry, (mode & 07777) | S_IFDIR, 0, NULL);
493 }
494
495 static int ovl_mknod(struct inode *dir, struct dentry *dentry, umode_t mode,
496                      dev_t rdev)
497 {
498         /* Don't allow creation of "whiteout" on overlay */
499         if (S_ISCHR(mode) && rdev == WHITEOUT_DEV)
500                 return -EPERM;
501
502         return ovl_create_object(dentry, mode, rdev, NULL);
503 }
504
505 static int ovl_symlink(struct inode *dir, struct dentry *dentry,
506                        const char *link)
507 {
508         return ovl_create_object(dentry, S_IFLNK, 0, link);
509 }
510
511 static int ovl_link(struct dentry *old, struct inode *newdir,
512                     struct dentry *new)
513 {
514         int err;
515         struct inode *inode;
516
517         err = ovl_want_write(old);
518         if (err)
519                 goto out;
520
521         err = ovl_copy_up(old);
522         if (err)
523                 goto out_drop_write;
524
525         inode = d_inode(old);
526         ihold(inode);
527
528         err = ovl_create_or_link(new, inode, NULL, NULL, ovl_dentry_upper(old));
529         if (err)
530                 iput(inode);
531
532 out_drop_write:
533         ovl_drop_write(old);
534 out:
535         return err;
536 }
537
538 static int ovl_remove_and_whiteout(struct dentry *dentry, bool is_dir)
539 {
540         struct dentry *workdir = ovl_workdir(dentry);
541         struct inode *wdir = workdir->d_inode;
542         struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent);
543         struct inode *udir = upperdir->d_inode;
544         struct dentry *whiteout;
545         struct dentry *upper;
546         struct dentry *opaquedir = NULL;
547         int err;
548         int flags = 0;
549
550         if (WARN_ON(!workdir))
551                 return -EROFS;
552
553         if (is_dir) {
554                 if (OVL_TYPE_MERGE_OR_LOWER(ovl_path_type(dentry))) {
555                         opaquedir = ovl_check_empty_and_clear(dentry);
556                         err = PTR_ERR(opaquedir);
557                         if (IS_ERR(opaquedir))
558                                 goto out;
559                 } else {
560                         LIST_HEAD(list);
561
562                         /*
563                          * When removing an empty opaque directory, then it
564                          * makes no sense to replace it with an exact replica of
565                          * itself.  But emptiness still needs to be checked.
566                          */
567                         err = ovl_check_empty_dir(dentry, &list);
568                         ovl_cache_free(&list);
569                         if (err)
570                                 goto out;
571                 }
572         }
573
574         err = ovl_lock_rename_workdir(workdir, upperdir);
575         if (err)
576                 goto out_dput;
577
578         upper = lookup_one_len(dentry->d_name.name, upperdir,
579                                dentry->d_name.len);
580         err = PTR_ERR(upper);
581         if (IS_ERR(upper))
582                 goto out_unlock;
583
584         err = -ESTALE;
585         if ((opaquedir && upper != opaquedir) ||
586             (!opaquedir && ovl_dentry_upper(dentry) &&
587              upper != ovl_dentry_upper(dentry))) {
588                 goto out_dput_upper;
589         }
590
591         whiteout = ovl_whiteout(workdir, dentry);
592         err = PTR_ERR(whiteout);
593         if (IS_ERR(whiteout))
594                 goto out_dput_upper;
595
596         if (d_is_dir(upper))
597                 flags = RENAME_EXCHANGE;
598
599         err = ovl_do_rename(wdir, whiteout, udir, upper, flags);
600         if (err)
601                 goto kill_whiteout;
602         if (flags)
603                 ovl_cleanup(wdir, upper);
604
605         ovl_dentry_version_inc(dentry->d_parent);
606 out_d_drop:
607         d_drop(dentry);
608         dput(whiteout);
609 out_dput_upper:
610         dput(upper);
611 out_unlock:
612         unlock_rename(workdir, upperdir);
613 out_dput:
614         dput(opaquedir);
615 out:
616         return err;
617
618 kill_whiteout:
619         ovl_cleanup(wdir, whiteout);
620         goto out_d_drop;
621 }
622
623 static int ovl_remove_upper(struct dentry *dentry, bool is_dir)
624 {
625         struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent);
626         struct inode *dir = upperdir->d_inode;
627         struct dentry *upper;
628         int err;
629
630         inode_lock_nested(dir, I_MUTEX_PARENT);
631         upper = lookup_one_len(dentry->d_name.name, upperdir,
632                                dentry->d_name.len);
633         err = PTR_ERR(upper);
634         if (IS_ERR(upper))
635                 goto out_unlock;
636
637         err = -ESTALE;
638         if (upper == ovl_dentry_upper(dentry)) {
639                 if (is_dir)
640                         err = vfs_rmdir(dir, upper);
641                 else
642                         err = vfs_unlink(dir, upper, NULL);
643                 ovl_dentry_version_inc(dentry->d_parent);
644         }
645         dput(upper);
646
647         /*
648          * Keeping this dentry hashed would mean having to release
649          * upperpath/lowerpath, which could only be done if we are the
650          * sole user of this dentry.  Too tricky...  Just unhash for
651          * now.
652          */
653         if (!err)
654                 d_drop(dentry);
655 out_unlock:
656         inode_unlock(dir);
657
658         return err;
659 }
660
661 static inline int ovl_check_sticky(struct dentry *dentry)
662 {
663         struct inode *dir = ovl_dentry_real(dentry->d_parent)->d_inode;
664         struct inode *inode = ovl_dentry_real(dentry)->d_inode;
665
666         if (check_sticky(dir, inode))
667                 return -EPERM;
668
669         return 0;
670 }
671
672 static int ovl_do_remove(struct dentry *dentry, bool is_dir)
673 {
674         enum ovl_path_type type;
675         int err;
676         const struct cred *old_cred;
677
678
679         err = ovl_check_sticky(dentry);
680         if (err)
681                 goto out;
682
683         err = ovl_want_write(dentry);
684         if (err)
685                 goto out;
686
687         err = ovl_copy_up(dentry->d_parent);
688         if (err)
689                 goto out_drop_write;
690
691         type = ovl_path_type(dentry);
692
693         old_cred = ovl_override_creds(dentry->d_sb);
694         if (OVL_TYPE_PURE_UPPER(type))
695                 err = ovl_remove_upper(dentry, is_dir);
696         else
697                 err = ovl_remove_and_whiteout(dentry, is_dir);
698         revert_creds(old_cred);
699         if (!err && !is_dir)
700                 drop_nlink(dentry->d_inode);
701 out_drop_write:
702         ovl_drop_write(dentry);
703 out:
704         return err;
705 }
706
707 static int ovl_unlink(struct inode *dir, struct dentry *dentry)
708 {
709         return ovl_do_remove(dentry, false);
710 }
711
712 static int ovl_rmdir(struct inode *dir, struct dentry *dentry)
713 {
714         return ovl_do_remove(dentry, true);
715 }
716
717 static int ovl_rename2(struct inode *olddir, struct dentry *old,
718                        struct inode *newdir, struct dentry *new,
719                        unsigned int flags)
720 {
721         int err;
722         enum ovl_path_type old_type;
723         enum ovl_path_type new_type;
724         struct dentry *old_upperdir;
725         struct dentry *new_upperdir;
726         struct dentry *olddentry;
727         struct dentry *newdentry;
728         struct dentry *trap;
729         bool old_opaque;
730         bool new_opaque;
731         bool cleanup_whiteout = false;
732         bool overwrite = !(flags & RENAME_EXCHANGE);
733         bool is_dir = d_is_dir(old);
734         bool new_is_dir = false;
735         struct dentry *opaquedir = NULL;
736         const struct cred *old_cred = NULL;
737
738         err = -EINVAL;
739         if (flags & ~(RENAME_EXCHANGE | RENAME_NOREPLACE))
740                 goto out;
741
742         flags &= ~RENAME_NOREPLACE;
743
744         err = ovl_check_sticky(old);
745         if (err)
746                 goto out;
747
748         /* Don't copy up directory trees */
749         old_type = ovl_path_type(old);
750         err = -EXDEV;
751         if (OVL_TYPE_MERGE_OR_LOWER(old_type) && is_dir)
752                 goto out;
753
754         if (new->d_inode) {
755                 err = ovl_check_sticky(new);
756                 if (err)
757                         goto out;
758
759                 if (d_is_dir(new))
760                         new_is_dir = true;
761
762                 new_type = ovl_path_type(new);
763                 err = -EXDEV;
764                 if (!overwrite && OVL_TYPE_MERGE_OR_LOWER(new_type) && new_is_dir)
765                         goto out;
766
767                 err = 0;
768                 if (!OVL_TYPE_UPPER(new_type) && !OVL_TYPE_UPPER(old_type)) {
769                         if (ovl_dentry_lower(old)->d_inode ==
770                             ovl_dentry_lower(new)->d_inode)
771                                 goto out;
772                 }
773                 if (OVL_TYPE_UPPER(new_type) && OVL_TYPE_UPPER(old_type)) {
774                         if (ovl_dentry_upper(old)->d_inode ==
775                             ovl_dentry_upper(new)->d_inode)
776                                 goto out;
777                 }
778         } else {
779                 if (ovl_dentry_is_opaque(new))
780                         new_type = __OVL_PATH_UPPER;
781                 else
782                         new_type = __OVL_PATH_UPPER | __OVL_PATH_PURE;
783         }
784
785         err = ovl_want_write(old);
786         if (err)
787                 goto out;
788
789         err = ovl_copy_up(old);
790         if (err)
791                 goto out_drop_write;
792
793         err = ovl_copy_up(new->d_parent);
794         if (err)
795                 goto out_drop_write;
796         if (!overwrite) {
797                 err = ovl_copy_up(new);
798                 if (err)
799                         goto out_drop_write;
800         }
801
802         old_opaque = !OVL_TYPE_PURE_UPPER(old_type);
803         new_opaque = !OVL_TYPE_PURE_UPPER(new_type);
804
805         old_cred = ovl_override_creds(old->d_sb);
806
807         if (overwrite && OVL_TYPE_MERGE_OR_LOWER(new_type) && new_is_dir) {
808                 opaquedir = ovl_check_empty_and_clear(new);
809                 err = PTR_ERR(opaquedir);
810                 if (IS_ERR(opaquedir)) {
811                         opaquedir = NULL;
812                         goto out_revert_creds;
813                 }
814         }
815
816         if (overwrite) {
817                 if (old_opaque) {
818                         if (new->d_inode || !new_opaque) {
819                                 /* Whiteout source */
820                                 flags |= RENAME_WHITEOUT;
821                         } else {
822                                 /* Switch whiteouts */
823                                 flags |= RENAME_EXCHANGE;
824                         }
825                 } else if (is_dir && !new->d_inode && new_opaque) {
826                         flags |= RENAME_EXCHANGE;
827                         cleanup_whiteout = true;
828                 }
829         }
830
831         old_upperdir = ovl_dentry_upper(old->d_parent);
832         new_upperdir = ovl_dentry_upper(new->d_parent);
833
834         trap = lock_rename(new_upperdir, old_upperdir);
835
836
837         olddentry = lookup_one_len(old->d_name.name, old_upperdir,
838                                    old->d_name.len);
839         err = PTR_ERR(olddentry);
840         if (IS_ERR(olddentry))
841                 goto out_unlock;
842
843         err = -ESTALE;
844         if (olddentry != ovl_dentry_upper(old))
845                 goto out_dput_old;
846
847         newdentry = lookup_one_len(new->d_name.name, new_upperdir,
848                                    new->d_name.len);
849         err = PTR_ERR(newdentry);
850         if (IS_ERR(newdentry))
851                 goto out_dput_old;
852
853         err = -ESTALE;
854         if (ovl_dentry_upper(new)) {
855                 if (opaquedir) {
856                         if (newdentry != opaquedir)
857                                 goto out_dput;
858                 } else {
859                         if (newdentry != ovl_dentry_upper(new))
860                                 goto out_dput;
861                 }
862         } else {
863                 if (!d_is_negative(newdentry) &&
864                     (!new_opaque || !ovl_is_whiteout(newdentry)))
865                         goto out_dput;
866         }
867
868         if (olddentry == trap)
869                 goto out_dput;
870         if (newdentry == trap)
871                 goto out_dput;
872
873         if (is_dir && !old_opaque && new_opaque) {
874                 err = ovl_set_opaque(olddentry);
875                 if (err)
876                         goto out_dput;
877         }
878         if (!overwrite && new_is_dir && old_opaque && !new_opaque) {
879                 err = ovl_set_opaque(newdentry);
880                 if (err)
881                         goto out_dput;
882         }
883
884         if (old_opaque || new_opaque) {
885                 err = ovl_do_rename(old_upperdir->d_inode, olddentry,
886                                     new_upperdir->d_inode, newdentry,
887                                     flags);
888         } else {
889                 /* No debug for the plain case */
890                 BUG_ON(flags & ~RENAME_EXCHANGE);
891                 err = vfs_rename(old_upperdir->d_inode, olddentry,
892                                  new_upperdir->d_inode, newdentry,
893                                  NULL, flags);
894         }
895
896         if (err) {
897                 if (is_dir && !old_opaque && new_opaque)
898                         ovl_remove_opaque(olddentry);
899                 if (!overwrite && new_is_dir && old_opaque && !new_opaque)
900                         ovl_remove_opaque(newdentry);
901                 goto out_dput;
902         }
903
904         if (is_dir && old_opaque && !new_opaque)
905                 ovl_remove_opaque(olddentry);
906         if (!overwrite && new_is_dir && !old_opaque && new_opaque)
907                 ovl_remove_opaque(newdentry);
908
909         /*
910          * Old dentry now lives in different location. Dentries in
911          * lowerstack are stale. We cannot drop them here because
912          * access to them is lockless. This could be only pure upper
913          * or opaque directory - numlower is zero. Or upper non-dir
914          * entry - its pureness is tracked by flag opaque.
915          */
916         if (old_opaque != new_opaque) {
917                 ovl_dentry_set_opaque(old, new_opaque);
918                 if (!overwrite)
919                         ovl_dentry_set_opaque(new, old_opaque);
920         }
921
922         if (cleanup_whiteout)
923                 ovl_cleanup(old_upperdir->d_inode, newdentry);
924
925         ovl_dentry_version_inc(old->d_parent);
926         ovl_dentry_version_inc(new->d_parent);
927
928 out_dput:
929         dput(newdentry);
930 out_dput_old:
931         dput(olddentry);
932 out_unlock:
933         unlock_rename(new_upperdir, old_upperdir);
934 out_revert_creds:
935         revert_creds(old_cred);
936 out_drop_write:
937         ovl_drop_write(old);
938 out:
939         dput(opaquedir);
940         return err;
941 }
942
943 const struct inode_operations ovl_dir_inode_operations = {
944         .lookup         = ovl_lookup,
945         .mkdir          = ovl_mkdir,
946         .symlink        = ovl_symlink,
947         .unlink         = ovl_unlink,
948         .rmdir          = ovl_rmdir,
949         .rename2        = ovl_rename2,
950         .link           = ovl_link,
951         .setattr        = ovl_setattr,
952         .create         = ovl_create,
953         .mknod          = ovl_mknod,
954         .permission     = ovl_permission,
955         .getattr        = ovl_dir_getattr,
956         .setxattr       = ovl_setxattr,
957         .getxattr       = ovl_getxattr,
958         .listxattr      = ovl_listxattr,
959         .removexattr    = ovl_removexattr,
960         .get_acl        = ovl_get_acl,
961         .update_time    = ovl_update_time,
962 };