2 * Overlayfs NFS export support.
4 * Amir Goldstein <amir73il@gmail.com>
6 * Copyright (C) 2017-2018 CTERA Networks. All Rights Reserved.
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License version 2 as published by
10 * the Free Software Foundation.
14 #include <linux/cred.h>
15 #include <linux/mount.h>
16 #include <linux/namei.h>
17 #include <linux/xattr.h>
18 #include <linux/exportfs.h>
19 #include <linux/ratelimit.h>
20 #include "overlayfs.h"
23 * We only need to encode origin if there is a chance that the same object was
24 * encoded pre copy up and then we need to stay consistent with the same
25 * encoding also after copy up. If non-pure upper is not indexed, then it was
26 * copied up before NFS export was enabled. In that case we don't need to worry
27 * about staying consistent with pre copy up encoding and we encode an upper
28 * file handle. Overlay root dentry is a private case of non-indexed upper.
30 * The following table summarizes the different file handle encodings used for
31 * different overlay object types:
33 * Object type | Encoding
34 * --------------------------------
36 * Non-indexed upper | U
37 * Indexed upper | L (*)
40 * U = upper file handle
41 * L = lower file handle
43 * (*) Connecting an overlay dir from real lower dentry is not always
44 * possible when there are redirects in lower layers. To mitigate this case,
45 * we copy up the lower dir first and then encode an upper dir file handle.
47 static bool ovl_should_encode_origin(struct dentry
*dentry
)
49 struct ovl_fs
*ofs
= dentry
->d_sb
->s_fs_info
;
51 if (!ovl_dentry_lower(dentry
))
55 * Decoding a merge dir, whose origin's parent is under a redirected
56 * lower dir is not always possible. As a simple aproximation, we do
57 * not encode lower dir file handles when overlay has multiple lower
58 * layers and origin is below the topmost lower layer.
60 * TODO: copy up only the parent that is under redirected lower.
62 if (d_is_dir(dentry
) && ofs
->upper_mnt
&&
63 OVL_E(dentry
)->lowerstack
[0].layer
->idx
> 1)
66 /* Decoding a non-indexed upper from origin is not implemented */
67 if (ovl_dentry_upper(dentry
) &&
68 !ovl_test_flag(OVL_INDEX
, d_inode(dentry
)))
74 static int ovl_encode_maybe_copy_up(struct dentry
*dentry
)
78 if (ovl_dentry_upper(dentry
))
81 err
= ovl_want_write(dentry
);
85 err
= ovl_copy_up(dentry
);
87 ovl_drop_write(dentry
);
91 static int ovl_d_to_fh(struct dentry
*dentry
, char *buf
, int buflen
)
93 struct dentry
*origin
= ovl_dentry_lower(dentry
);
94 struct ovl_fh
*fh
= NULL
;
98 * If we should not encode a lower dir file handle, copy up and encode
99 * an upper dir file handle.
101 if (!ovl_should_encode_origin(dentry
)) {
102 err
= ovl_encode_maybe_copy_up(dentry
);
109 /* Encode an upper or origin file handle */
110 fh
= ovl_encode_fh(origin
?: ovl_dentry_upper(dentry
), !origin
);
116 if (fh
->len
> buflen
)
119 memcpy(buf
, (char *)fh
, fh
->len
);
127 pr_warn_ratelimited("overlayfs: failed to encode file handle (%pd2, err=%i, buflen=%d, len=%d, type=%d)\n",
128 dentry
, err
, buflen
, fh
? (int)fh
->len
: 0,
133 static int ovl_dentry_to_fh(struct dentry
*dentry
, u32
*fid
, int *max_len
)
135 int res
, len
= *max_len
<< 2;
137 res
= ovl_d_to_fh(dentry
, (char *)fid
, len
);
139 return FILEID_INVALID
;
143 /* Round up to dwords */
144 *max_len
= (len
+ 3) >> 2;
148 static int ovl_encode_inode_fh(struct inode
*inode
, u32
*fid
, int *max_len
,
149 struct inode
*parent
)
151 struct dentry
*dentry
;
154 /* TODO: encode connectable file handles */
156 return FILEID_INVALID
;
158 dentry
= d_find_any_alias(inode
);
159 if (WARN_ON(!dentry
))
160 return FILEID_INVALID
;
162 type
= ovl_dentry_to_fh(dentry
, fid
, max_len
);
169 * Find or instantiate an overlay dentry from real dentries and index.
171 static struct dentry
*ovl_obtain_alias(struct super_block
*sb
,
172 struct dentry
*upper_alias
,
173 struct ovl_path
*lowerpath
,
174 struct dentry
*index
)
176 struct dentry
*lower
= lowerpath
? lowerpath
->dentry
: NULL
;
177 struct dentry
*upper
= upper_alias
?: index
;
178 struct dentry
*dentry
;
180 struct ovl_entry
*oe
;
182 /* We get overlay directory dentries with ovl_lookup_real() */
183 if (d_is_dir(upper
?: lower
))
184 return ERR_PTR(-EIO
);
186 inode
= ovl_get_inode(sb
, dget(upper
), lower
, index
, !!lower
);
189 return ERR_CAST(inode
);
193 ovl_set_flag(OVL_INDEX
, inode
);
195 dentry
= d_find_any_alias(inode
);
197 dentry
= d_alloc_anon(inode
->i_sb
);
200 oe
= ovl_alloc_entry(lower
? 1 : 0);
205 oe
->lowerstack
->dentry
= dget(lower
);
206 oe
->lowerstack
->layer
= lowerpath
->layer
;
208 dentry
->d_fsdata
= oe
;
210 ovl_dentry_set_upper_alias(dentry
);
213 return d_instantiate_anon(dentry
, inode
);
218 return ERR_PTR(-ENOMEM
);
221 /* Get the upper or lower dentry in stach whose on layer @idx */
222 static struct dentry
*ovl_dentry_real_at(struct dentry
*dentry
, int idx
)
224 struct ovl_entry
*oe
= dentry
->d_fsdata
;
228 return ovl_dentry_upper(dentry
);
230 for (i
= 0; i
< oe
->numlower
; i
++) {
231 if (oe
->lowerstack
[i
].layer
->idx
== idx
)
232 return oe
->lowerstack
[i
].dentry
;
239 * Lookup a child overlay dentry to get a connected overlay dentry whose real
240 * dentry is @real. If @real is on upper layer, we lookup a child overlay
241 * dentry with the same name as the real dentry. Otherwise, we need to consult
244 static struct dentry
*ovl_lookup_real_one(struct dentry
*connected
,
246 struct ovl_layer
*layer
)
248 struct inode
*dir
= d_inode(connected
);
249 struct dentry
*this, *parent
= NULL
;
250 struct name_snapshot name
;
254 * Lookup child overlay dentry by real name. The dir mutex protects us
255 * from racing with overlay rename. If the overlay dentry that is above
256 * real has already been moved to a parent that is not under the
257 * connected overlay dir, we return -ECHILD and restart the lookup of
258 * connected real path from the top.
260 inode_lock_nested(dir
, I_MUTEX_PARENT
);
262 parent
= dget_parent(real
);
263 if (ovl_dentry_real_at(connected
, layer
->idx
) != parent
)
267 * We also need to take a snapshot of real dentry name to protect us
268 * from racing with underlying layer rename. In this case, we don't
269 * care about returning ESTALE, only from dereferencing a free name
270 * pointer because we hold no lock on the real dentry.
272 take_dentry_name_snapshot(&name
, real
);
273 this = lookup_one_len(name
.name
, connected
, strlen(name
.name
));
277 } else if (!this || !this->d_inode
) {
281 } else if (ovl_dentry_real_at(this, layer
->idx
) != real
) {
288 release_dentry_name_snapshot(&name
);
294 pr_warn_ratelimited("overlayfs: failed to lookup one by real (%pd2, layer=%d, connected=%pd2, err=%i)\n",
295 real
, layer
->idx
, connected
, err
);
300 static struct dentry
*ovl_lookup_real(struct super_block
*sb
,
302 struct ovl_layer
*layer
);
305 * Lookup an indexed or hashed overlay dentry by real inode.
307 static struct dentry
*ovl_lookup_real_inode(struct super_block
*sb
,
309 struct ovl_layer
*layer
)
311 struct ovl_fs
*ofs
= sb
->s_fs_info
;
312 struct ovl_layer upper_layer
= { .mnt
= ofs
->upper_mnt
};
313 struct dentry
*index
= NULL
;
314 struct dentry
*this = NULL
;
318 * Decoding upper dir from index is expensive, so first try to lookup
319 * overlay dentry in inode/dcache.
321 inode
= ovl_lookup_inode(sb
, real
, !layer
->idx
);
323 return ERR_CAST(inode
);
325 this = d_find_any_alias(inode
);
330 * For decoded lower dir file handle, lookup index by origin to check
331 * if lower dir was copied up and and/or removed.
333 if (!this && layer
->idx
&& ofs
->indexdir
&& !WARN_ON(!d_is_dir(real
))) {
334 index
= ovl_lookup_index(ofs
, NULL
, real
, false);
339 /* Get connected upper overlay dir from index */
341 struct dentry
*upper
= ovl_index_upper(ofs
, index
);
344 if (IS_ERR_OR_NULL(upper
))
348 * ovl_lookup_real() in lower layer may call recursively once to
349 * ovl_lookup_real() in upper layer. The first level call walks
350 * back lower parents to the topmost indexed parent. The second
351 * recursive call walks back from indexed upper to the topmost
352 * connected/hashed upper parent (or up to root).
354 this = ovl_lookup_real(sb
, upper
, &upper_layer
);
361 if (WARN_ON(ovl_dentry_real_at(this, layer
->idx
) != real
)) {
363 this = ERR_PTR(-EIO
);
370 * Lookup an indexed or hashed overlay dentry, whose real dentry is an
373 static struct dentry
*ovl_lookup_real_ancestor(struct super_block
*sb
,
375 struct ovl_layer
*layer
)
377 struct dentry
*next
, *parent
= NULL
;
378 struct dentry
*ancestor
= ERR_PTR(-EIO
);
380 if (real
== layer
->mnt
->mnt_root
)
381 return dget(sb
->s_root
);
383 /* Find the topmost indexed or hashed ancestor */
386 parent
= dget_parent(next
);
389 * Lookup a matching overlay dentry in inode/dentry
390 * cache or in index by real inode.
392 ancestor
= ovl_lookup_real_inode(sb
, next
, layer
);
396 if (parent
== layer
->mnt
->mnt_root
) {
397 ancestor
= dget(sb
->s_root
);
402 * If @real has been moved out of the layer root directory,
403 * we will eventully hit the real fs root. This cannot happen
404 * by legit overlay rename, so we return error in that case.
406 if (parent
== next
) {
407 ancestor
= ERR_PTR(-EXDEV
);
422 * Lookup a connected overlay dentry whose real dentry is @real.
423 * If @real is on upper layer, we lookup a child overlay dentry with the same
424 * path the real dentry. Otherwise, we need to consult index for lookup.
426 static struct dentry
*ovl_lookup_real(struct super_block
*sb
,
428 struct ovl_layer
*layer
)
430 struct dentry
*connected
;
433 connected
= ovl_lookup_real_ancestor(sb
, real
, layer
);
434 if (IS_ERR(connected
))
438 struct dentry
*next
, *this;
439 struct dentry
*parent
= NULL
;
440 struct dentry
*real_connected
= ovl_dentry_real_at(connected
,
443 if (real_connected
== real
)
446 /* Find the topmost dentry not yet connected */
449 parent
= dget_parent(next
);
451 if (parent
== real_connected
)
455 * If real has been moved out of 'real_connected',
456 * we will not find 'real_connected' and hit the layer
457 * root. In that case, we need to restart connecting.
458 * This game can go on forever in the worst case. We
459 * may want to consider taking s_vfs_rename_mutex if
460 * this happens more than once.
462 if (parent
== layer
->mnt
->mnt_root
) {
464 connected
= dget(sb
->s_root
);
469 * If real file has been moved out of the layer root
470 * directory, we will eventully hit the real fs root.
471 * This cannot happen by legit overlay rename, so we
472 * return error in that case.
474 if (parent
== next
) {
484 this = ovl_lookup_real_one(connected
, next
, layer
);
489 * Lookup of child in overlay can fail when racing with
490 * overlay rename of child away from 'connected' parent.
491 * In this case, we need to restart the lookup from the
492 * top, because we cannot trust that 'real_connected' is
493 * still an ancestor of 'real'. There is a good chance
494 * that the renamed overlay ancestor is now in cache, so
495 * ovl_lookup_real_ancestor() will find it and we can
496 * continue to connect exactly from where lookup failed.
498 if (err
== -ECHILD
) {
499 this = ovl_lookup_real_ancestor(sb
, real
,
501 err
= IS_ERR(this) ? PTR_ERR(this) : 0;
519 pr_warn_ratelimited("overlayfs: failed to lookup by real (%pd2, layer=%d, connected=%pd2, err=%i)\n",
520 real
, layer
->idx
, connected
, err
);
526 * Get an overlay dentry from upper/lower real dentries and index.
528 static struct dentry
*ovl_get_dentry(struct super_block
*sb
,
529 struct dentry
*upper
,
530 struct ovl_path
*lowerpath
,
531 struct dentry
*index
)
533 struct ovl_fs
*ofs
= sb
->s_fs_info
;
534 struct ovl_layer upper_layer
= { .mnt
= ofs
->upper_mnt
};
535 struct ovl_layer
*layer
= upper
? &upper_layer
: lowerpath
->layer
;
536 struct dentry
*real
= upper
?: (index
?: lowerpath
->dentry
);
539 * Obtain a disconnected overlay dentry from a non-dir real dentry
543 return ovl_obtain_alias(sb
, upper
, lowerpath
, index
);
545 /* Removed empty directory? */
546 if ((real
->d_flags
& DCACHE_DISCONNECTED
) || d_unhashed(real
))
547 return ERR_PTR(-ENOENT
);
550 * If real dentry is connected and hashed, get a connected overlay
551 * dentry whose real dentry is @real.
553 return ovl_lookup_real(sb
, real
, layer
);
556 static struct dentry
*ovl_upper_fh_to_d(struct super_block
*sb
,
559 struct ovl_fs
*ofs
= sb
->s_fs_info
;
560 struct dentry
*dentry
;
561 struct dentry
*upper
;
564 return ERR_PTR(-EACCES
);
566 upper
= ovl_decode_fh(fh
, ofs
->upper_mnt
);
567 if (IS_ERR_OR_NULL(upper
))
570 dentry
= ovl_get_dentry(sb
, upper
, NULL
, NULL
);
576 static struct dentry
*ovl_lower_fh_to_d(struct super_block
*sb
,
579 struct ovl_fs
*ofs
= sb
->s_fs_info
;
580 struct ovl_path origin
= { };
581 struct ovl_path
*stack
= &origin
;
582 struct dentry
*dentry
= NULL
;
583 struct dentry
*index
= NULL
;
584 struct inode
*inode
= NULL
;
585 bool is_deleted
= false;
588 /* First lookup indexed upper by fh */
590 index
= ovl_get_index_fh(ofs
, fh
);
591 err
= PTR_ERR(index
);
596 /* Found a whiteout index - treat as deleted inode */
602 /* Then try to get upper dir by index */
603 if (index
&& d_is_dir(index
)) {
604 struct dentry
*upper
= ovl_index_upper(ofs
, index
);
606 err
= PTR_ERR(upper
);
607 if (IS_ERR_OR_NULL(upper
))
610 dentry
= ovl_get_dentry(sb
, upper
, NULL
, NULL
);
615 /* Then lookup origin by fh */
616 err
= ovl_check_origin_fh(ofs
, fh
, NULL
, &stack
);
620 err
= ovl_verify_origin(index
, origin
.dentry
, false);
623 } else if (is_deleted
) {
624 /* Lookup deleted non-dir by origin inode */
625 if (!d_is_dir(origin
.dentry
))
626 inode
= ovl_lookup_inode(sb
, origin
.dentry
, false);
628 if (!inode
|| atomic_read(&inode
->i_count
) == 1)
631 /* Deleted but still open? */
632 index
= dget(ovl_i_dentry_upper(inode
));
635 dentry
= ovl_get_dentry(sb
, NULL
, &origin
, index
);
644 dentry
= ERR_PTR(err
);
648 static struct dentry
*ovl_fh_to_dentry(struct super_block
*sb
, struct fid
*fid
,
649 int fh_len
, int fh_type
)
651 struct dentry
*dentry
= NULL
;
652 struct ovl_fh
*fh
= (struct ovl_fh
*) fid
;
653 int len
= fh_len
<< 2;
654 unsigned int flags
= 0;
658 if (fh_type
!= OVL_FILEID
)
661 err
= ovl_check_fh_len(fh
, len
);
666 dentry
= (flags
& OVL_FH_FLAG_PATH_UPPER
) ?
667 ovl_upper_fh_to_d(sb
, fh
) :
668 ovl_lower_fh_to_d(sb
, fh
);
669 err
= PTR_ERR(dentry
);
670 if (IS_ERR(dentry
) && err
!= -ESTALE
)
676 pr_warn_ratelimited("overlayfs: failed to decode file handle (len=%d, type=%d, flags=%x, err=%i)\n",
677 len
, fh_type
, flags
, err
);
681 static struct dentry
*ovl_fh_to_parent(struct super_block
*sb
, struct fid
*fid
,
682 int fh_len
, int fh_type
)
684 pr_warn_ratelimited("overlayfs: connectable file handles not supported; use 'no_subtree_check' exportfs option.\n");
685 return ERR_PTR(-EACCES
);
688 static int ovl_get_name(struct dentry
*parent
, char *name
,
689 struct dentry
*child
)
692 * ovl_fh_to_dentry() returns connected dir overlay dentries and
693 * ovl_fh_to_parent() is not implemented, so we should not get here.
699 static struct dentry
*ovl_get_parent(struct dentry
*dentry
)
702 * ovl_fh_to_dentry() returns connected dir overlay dentries, so we
703 * should not get here.
706 return ERR_PTR(-EIO
);
709 const struct export_operations ovl_export_operations
= {
710 .encode_fh
= ovl_encode_inode_fh
,
711 .fh_to_dentry
= ovl_fh_to_dentry
,
712 .fh_to_parent
= ovl_fh_to_parent
,
713 .get_name
= ovl_get_name
,
714 .get_parent
= ovl_get_parent
,