linux/fs/overlayfs/export.c
<<
>>
Prefs
   1/*
   2 * Overlayfs NFS export support.
   3 *
   4 * Amir Goldstein <amir73il@gmail.com>
   5 *
   6 * Copyright (C) 2017-2018 CTERA Networks. All Rights Reserved.
   7 *
   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.
  11 */
  12
  13#include <linux/fs.h>
  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"
  21
  22static int ovl_encode_maybe_copy_up(struct dentry *dentry)
  23{
  24        int err;
  25
  26        if (ovl_dentry_upper(dentry))
  27                return 0;
  28
  29        err = ovl_want_write(dentry);
  30        if (!err) {
  31                err = ovl_copy_up(dentry);
  32                ovl_drop_write(dentry);
  33        }
  34
  35        if (err) {
  36                pr_warn_ratelimited("overlayfs: failed to copy up on encode (%pd2, err=%i)\n",
  37                                    dentry, err);
  38        }
  39
  40        return err;
  41}
  42
  43/*
  44 * Before encoding a non-upper directory file handle from real layer N, we need
  45 * to check if it will be possible to reconnect an overlay dentry from the real
  46 * lower decoded dentry. This is done by following the overlay ancestry up to a
  47 * "layer N connected" ancestor and verifying that all parents along the way are
  48 * "layer N connectable". If an ancestor that is NOT "layer N connectable" is
  49 * found, we need to copy up an ancestor, which is "layer N connectable", thus
  50 * making that ancestor "layer N connected". For example:
  51 *
  52 * layer 1: /a
  53 * layer 2: /a/b/c
  54 *
  55 * The overlay dentry /a is NOT "layer 2 connectable", because if dir /a is
  56 * copied up and renamed, upper dir /a will be indexed by lower dir /a from
  57 * layer 1. The dir /a from layer 2 will never be indexed, so the algorithm (*)
  58 * in ovl_lookup_real_ancestor() will not be able to lookup a connected overlay
  59 * dentry from the connected lower dentry /a/b/c.
  60 *
  61 * To avoid this problem on decode time, we need to copy up an ancestor of
  62 * /a/b/c, which is "layer 2 connectable", on encode time. That ancestor is
  63 * /a/b. After copy up (and index) of /a/b, it will become "layer 2 connected"
  64 * and when the time comes to decode the file handle from lower dentry /a/b/c,
  65 * ovl_lookup_real_ancestor() will find the indexed ancestor /a/b and decoding
  66 * a connected overlay dentry will be accomplished.
  67 *
  68 * (*) the algorithm in ovl_lookup_real_ancestor() can be improved to lookup an
  69 * entry /a in the lower layers above layer N and find the indexed dir /a from
  70 * layer 1. If that improvement is made, then the check for "layer N connected"
  71 * will need to verify there are no redirects in lower layers above N. In the
  72 * example above, /a will be "layer 2 connectable". However, if layer 2 dir /a
  73 * is a target of a layer 1 redirect, then /a will NOT be "layer 2 connectable":
  74 *
  75 * layer 1: /A (redirect = /a)
  76 * layer 2: /a/b/c
  77 */
  78
  79/* Return the lowest layer for encoding a connectable file handle */
  80static int ovl_connectable_layer(struct dentry *dentry)
  81{
  82        struct ovl_entry *oe = OVL_E(dentry);
  83
  84        /* We can get overlay root from root of any layer */
  85        if (dentry == dentry->d_sb->s_root)
  86                return oe->numlower;
  87
  88        /*
  89         * If it's an unindexed merge dir, then it's not connectable with any
  90         * lower layer
  91         */
  92        if (ovl_dentry_upper(dentry) &&
  93            !ovl_test_flag(OVL_INDEX, d_inode(dentry)))
  94                return 0;
  95
  96        /* We can get upper/overlay path from indexed/lower dentry */
  97        return oe->lowerstack[0].layer->idx;
  98}
  99
 100/*
 101 * @dentry is "connected" if all ancestors up to root or a "connected" ancestor
 102 * have the same uppermost lower layer as the origin's layer. We may need to
 103 * copy up a "connectable" ancestor to make it "connected". A "connected" dentry
 104 * cannot become non "connected", so cache positive result in dentry flags.
 105 *
 106 * Return the connected origin layer or < 0 on error.
 107 */
 108static int ovl_connect_layer(struct dentry *dentry)
 109{
 110        struct dentry *next, *parent = NULL;
 111        int origin_layer;
 112        int err = 0;
 113
 114        if (WARN_ON(dentry == dentry->d_sb->s_root) ||
 115            WARN_ON(!ovl_dentry_lower(dentry)))
 116                return -EIO;
 117
 118        origin_layer = OVL_E(dentry)->lowerstack[0].layer->idx;
 119        if (ovl_dentry_test_flag(OVL_E_CONNECTED, dentry))
 120                return origin_layer;
 121
 122        /* Find the topmost origin layer connectable ancestor of @dentry */
 123        next = dget(dentry);
 124        for (;;) {
 125                parent = dget_parent(next);
 126                if (WARN_ON(parent == next)) {
 127                        err = -EIO;
 128                        break;
 129                }
 130
 131                /*
 132                 * If @parent is not origin layer connectable, then copy up
 133                 * @next which is origin layer connectable and we are done.
 134                 */
 135                if (ovl_connectable_layer(parent) < origin_layer) {
 136                        err = ovl_encode_maybe_copy_up(next);
 137                        break;
 138                }
 139
 140                /* If @parent is connected or indexed we are done */
 141                if (ovl_dentry_test_flag(OVL_E_CONNECTED, parent) ||
 142                    ovl_test_flag(OVL_INDEX, d_inode(parent)))
 143                        break;
 144
 145                dput(next);
 146                next = parent;
 147        }
 148
 149        dput(parent);
 150        dput(next);
 151
 152        if (!err)
 153                ovl_dentry_set_flag(OVL_E_CONNECTED, dentry);
 154
 155        return err ?: origin_layer;
 156}
 157
 158/*
 159 * We only need to encode origin if there is a chance that the same object was
 160 * encoded pre copy up and then we need to stay consistent with the same
 161 * encoding also after copy up. If non-pure upper is not indexed, then it was
 162 * copied up before NFS export was enabled. In that case we don't need to worry
 163 * about staying consistent with pre copy up encoding and we encode an upper
 164 * file handle. Overlay root dentry is a private case of non-indexed upper.
 165 *
 166 * The following table summarizes the different file handle encodings used for
 167 * different overlay object types:
 168 *
 169 *  Object type         | Encoding
 170 * --------------------------------
 171 *  Pure upper          | U
 172 *  Non-indexed upper   | U
 173 *  Indexed upper       | L (*)
 174 *  Non-upper           | L (*)
 175 *
 176 * U = upper file handle
 177 * L = lower file handle
 178 *
 179 * (*) Connecting an overlay dir from real lower dentry is not always
 180 * possible when there are redirects in lower layers and non-indexed merge dirs.
 181 * To mitigate those case, we may copy up the lower dir ancestor before encode
 182 * a lower dir file handle.
 183 *
 184 * Return 0 for upper file handle, > 0 for lower file handle or < 0 on error.
 185 */
 186static int ovl_check_encode_origin(struct dentry *dentry)
 187{
 188        struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
 189
 190        /* Upper file handle for pure upper */
 191        if (!ovl_dentry_lower(dentry))
 192                return 0;
 193
 194        /*
 195         * Upper file handle for non-indexed upper.
 196         *
 197         * Root is never indexed, so if there's an upper layer, encode upper for
 198         * root.
 199         */
 200        if (ovl_dentry_upper(dentry) &&
 201            !ovl_test_flag(OVL_INDEX, d_inode(dentry)))
 202                return 0;
 203
 204        /*
 205         * Decoding a merge dir, whose origin's ancestor is under a redirected
 206         * lower dir or under a non-indexed upper is not always possible.
 207         * ovl_connect_layer() will try to make origin's layer "connected" by
 208         * copying up a "connectable" ancestor.
 209         */
 210        if (d_is_dir(dentry) && ofs->upper_mnt)
 211                return ovl_connect_layer(dentry);
 212
 213        /* Lower file handle for indexed and non-upper dir/non-dir */
 214        return 1;
 215}
 216
 217static int ovl_d_to_fh(struct dentry *dentry, char *buf, int buflen)
 218{
 219        struct ovl_fh *fh = NULL;
 220        int err, enc_lower;
 221
 222        /*
 223         * Check if we should encode a lower or upper file handle and maybe
 224         * copy up an ancestor to make lower file handle connectable.
 225         */
 226        err = enc_lower = ovl_check_encode_origin(dentry);
 227        if (enc_lower < 0)
 228                goto fail;
 229
 230        /* Encode an upper or lower file handle */
 231        fh = ovl_encode_real_fh(enc_lower ? ovl_dentry_lower(dentry) :
 232                                ovl_dentry_upper(dentry), !enc_lower);
 233        err = PTR_ERR(fh);
 234        if (IS_ERR(fh))
 235                goto fail;
 236
 237        err = -EOVERFLOW;
 238        if (fh->len > buflen)
 239                goto fail;
 240
 241        memcpy(buf, (char *)fh, fh->len);
 242        err = fh->len;
 243
 244out:
 245        kfree(fh);
 246        return err;
 247
 248fail:
 249        pr_warn_ratelimited("overlayfs: failed to encode file handle (%pd2, err=%i, buflen=%d, len=%d, type=%d)\n",
 250                            dentry, err, buflen, fh ? (int)fh->len : 0,
 251                            fh ? fh->type : 0);
 252        goto out;
 253}
 254
 255static int ovl_dentry_to_fh(struct dentry *dentry, u32 *fid, int *max_len)
 256{
 257        int res, len = *max_len << 2;
 258
 259        res = ovl_d_to_fh(dentry, (char *)fid, len);
 260        if (res <= 0)
 261                return FILEID_INVALID;
 262
 263        len = res;
 264
 265        /* Round up to dwords */
 266        *max_len = (len + 3) >> 2;
 267        return OVL_FILEID;
 268}
 269
 270static int ovl_encode_fh(struct inode *inode, u32 *fid, int *max_len,
 271                         struct inode *parent)
 272{
 273        struct dentry *dentry;
 274        int type;
 275
 276        /* TODO: encode connectable file handles */
 277        if (parent)
 278                return FILEID_INVALID;
 279
 280        dentry = d_find_any_alias(inode);
 281        if (WARN_ON(!dentry))
 282                return FILEID_INVALID;
 283
 284        type = ovl_dentry_to_fh(dentry, fid, max_len);
 285
 286        dput(dentry);
 287        return type;
 288}
 289
 290/*
 291 * Find or instantiate an overlay dentry from real dentries and index.
 292 */
 293static struct dentry *ovl_obtain_alias(struct super_block *sb,
 294                                       struct dentry *upper_alias,
 295                                       struct ovl_path *lowerpath,
 296                                       struct dentry *index)
 297{
 298        struct dentry *lower = lowerpath ? lowerpath->dentry : NULL;
 299        struct dentry *upper = upper_alias ?: index;
 300        struct dentry *dentry;
 301        struct inode *inode;
 302        struct ovl_entry *oe;
 303        struct ovl_inode_params oip = {
 304                .lowerpath = lowerpath,
 305                .index = index,
 306                .numlower = !!lower
 307        };
 308
 309        /* We get overlay directory dentries with ovl_lookup_real() */
 310        if (d_is_dir(upper ?: lower))
 311                return ERR_PTR(-EIO);
 312
 313        oip.upperdentry = dget(upper);
 314        inode = ovl_get_inode(sb, &oip);
 315        if (IS_ERR(inode)) {
 316                dput(upper);
 317                return ERR_CAST(inode);
 318        }
 319
 320        if (upper)
 321                ovl_set_flag(OVL_UPPERDATA, inode);
 322
 323        dentry = d_find_any_alias(inode);
 324        if (!dentry) {
 325                dentry = d_alloc_anon(inode->i_sb);
 326                if (!dentry)
 327                        goto nomem;
 328                oe = ovl_alloc_entry(lower ? 1 : 0);
 329                if (!oe)
 330                        goto nomem;
 331
 332                if (lower) {
 333                        oe->lowerstack->dentry = dget(lower);
 334                        oe->lowerstack->layer = lowerpath->layer;
 335                }
 336                dentry->d_fsdata = oe;
 337                if (upper_alias)
 338                        ovl_dentry_set_upper_alias(dentry);
 339        }
 340
 341        return d_instantiate_anon(dentry, inode);
 342
 343nomem:
 344        iput(inode);
 345        dput(dentry);
 346        return ERR_PTR(-ENOMEM);
 347}
 348
 349/* Get the upper or lower dentry in stach whose on layer @idx */
 350static struct dentry *ovl_dentry_real_at(struct dentry *dentry, int idx)
 351{
 352        struct ovl_entry *oe = dentry->d_fsdata;
 353        int i;
 354
 355        if (!idx)
 356                return ovl_dentry_upper(dentry);
 357
 358        for (i = 0; i < oe->numlower; i++) {
 359                if (oe->lowerstack[i].layer->idx == idx)
 360                        return oe->lowerstack[i].dentry;
 361        }
 362
 363        return NULL;
 364}
 365
 366/*
 367 * Lookup a child overlay dentry to get a connected overlay dentry whose real
 368 * dentry is @real. If @real is on upper layer, we lookup a child overlay
 369 * dentry with the same name as the real dentry. Otherwise, we need to consult
 370 * index for lookup.
 371 */
 372static struct dentry *ovl_lookup_real_one(struct dentry *connected,
 373                                          struct dentry *real,
 374                                          struct ovl_layer *layer)
 375{
 376        struct inode *dir = d_inode(connected);
 377        struct dentry *this, *parent = NULL;
 378        struct name_snapshot name;
 379        int err;
 380
 381        /*
 382         * Lookup child overlay dentry by real name. The dir mutex protects us
 383         * from racing with overlay rename. If the overlay dentry that is above
 384         * real has already been moved to a parent that is not under the
 385         * connected overlay dir, we return -ECHILD and restart the lookup of
 386         * connected real path from the top.
 387         */
 388        inode_lock_nested(dir, I_MUTEX_PARENT);
 389        err = -ECHILD;
 390        parent = dget_parent(real);
 391        if (ovl_dentry_real_at(connected, layer->idx) != parent)
 392                goto fail;
 393
 394        /*
 395         * We also need to take a snapshot of real dentry name to protect us
 396         * from racing with underlying layer rename. In this case, we don't
 397         * care about returning ESTALE, only from dereferencing a free name
 398         * pointer because we hold no lock on the real dentry.
 399         */
 400        take_dentry_name_snapshot(&name, real);
 401        this = lookup_one_len(name.name, connected, strlen(name.name));
 402        err = PTR_ERR(this);
 403        if (IS_ERR(this)) {
 404                goto fail;
 405        } else if (!this || !this->d_inode) {
 406                dput(this);
 407                err = -ENOENT;
 408                goto fail;
 409        } else if (ovl_dentry_real_at(this, layer->idx) != real) {
 410                dput(this);
 411                err = -ESTALE;
 412                goto fail;
 413        }
 414
 415out:
 416        release_dentry_name_snapshot(&name);
 417        dput(parent);
 418        inode_unlock(dir);
 419        return this;
 420
 421fail:
 422        pr_warn_ratelimited("overlayfs: failed to lookup one by real (%pd2, layer=%d, connected=%pd2, err=%i)\n",
 423                            real, layer->idx, connected, err);
 424        this = ERR_PTR(err);
 425        goto out;
 426}
 427
 428static struct dentry *ovl_lookup_real(struct super_block *sb,
 429                                      struct dentry *real,
 430                                      struct ovl_layer *layer);
 431
 432/*
 433 * Lookup an indexed or hashed overlay dentry by real inode.
 434 */
 435static struct dentry *ovl_lookup_real_inode(struct super_block *sb,
 436                                            struct dentry *real,
 437                                            struct ovl_layer *layer)
 438{
 439        struct ovl_fs *ofs = sb->s_fs_info;
 440        struct ovl_layer upper_layer = { .mnt = ofs->upper_mnt };
 441        struct dentry *index = NULL;
 442        struct dentry *this = NULL;
 443        struct inode *inode;
 444
 445        /*
 446         * Decoding upper dir from index is expensive, so first try to lookup
 447         * overlay dentry in inode/dcache.
 448         */
 449        inode = ovl_lookup_inode(sb, real, !layer->idx);
 450        if (IS_ERR(inode))
 451                return ERR_CAST(inode);
 452        if (inode) {
 453                this = d_find_any_alias(inode);
 454                iput(inode);
 455        }
 456
 457        /*
 458         * For decoded lower dir file handle, lookup index by origin to check
 459         * if lower dir was copied up and and/or removed.
 460         */
 461        if (!this && layer->idx && ofs->indexdir && !WARN_ON(!d_is_dir(real))) {
 462                index = ovl_lookup_index(ofs, NULL, real, false);
 463                if (IS_ERR(index))
 464                        return index;
 465        }
 466
 467        /* Get connected upper overlay dir from index */
 468        if (index) {
 469                struct dentry *upper = ovl_index_upper(ofs, index);
 470
 471                dput(index);
 472                if (IS_ERR_OR_NULL(upper))
 473                        return upper;
 474
 475                /*
 476                 * ovl_lookup_real() in lower layer may call recursively once to
 477                 * ovl_lookup_real() in upper layer. The first level call walks
 478                 * back lower parents to the topmost indexed parent. The second
 479                 * recursive call walks back from indexed upper to the topmost
 480                 * connected/hashed upper parent (or up to root).
 481                 */
 482                this = ovl_lookup_real(sb, upper, &upper_layer);
 483                dput(upper);
 484        }
 485
 486        if (IS_ERR_OR_NULL(this))
 487                return this;
 488
 489        if (WARN_ON(ovl_dentry_real_at(this, layer->idx) != real)) {
 490                dput(this);
 491                this = ERR_PTR(-EIO);
 492        }
 493
 494        return this;
 495}
 496
 497/*
 498 * Lookup an indexed or hashed overlay dentry, whose real dentry is an
 499 * ancestor of @real.
 500 */
 501static struct dentry *ovl_lookup_real_ancestor(struct super_block *sb,
 502                                               struct dentry *real,
 503                                               struct ovl_layer *layer)
 504{
 505        struct dentry *next, *parent = NULL;
 506        struct dentry *ancestor = ERR_PTR(-EIO);
 507
 508        if (real == layer->mnt->mnt_root)
 509                return dget(sb->s_root);
 510
 511        /* Find the topmost indexed or hashed ancestor */
 512        next = dget(real);
 513        for (;;) {
 514                parent = dget_parent(next);
 515
 516                /*
 517                 * Lookup a matching overlay dentry in inode/dentry
 518                 * cache or in index by real inode.
 519                 */
 520                ancestor = ovl_lookup_real_inode(sb, next, layer);
 521                if (ancestor)
 522                        break;
 523
 524                if (parent == layer->mnt->mnt_root) {
 525                        ancestor = dget(sb->s_root);
 526                        break;
 527                }
 528
 529                /*
 530                 * If @real has been moved out of the layer root directory,
 531                 * we will eventully hit the real fs root. This cannot happen
 532                 * by legit overlay rename, so we return error in that case.
 533                 */
 534                if (parent == next) {
 535                        ancestor = ERR_PTR(-EXDEV);
 536                        break;
 537                }
 538
 539                dput(next);
 540                next = parent;
 541        }
 542
 543        dput(parent);
 544        dput(next);
 545
 546        return ancestor;
 547}
 548
 549/*
 550 * Lookup a connected overlay dentry whose real dentry is @real.
 551 * If @real is on upper layer, we lookup a child overlay dentry with the same
 552 * path the real dentry. Otherwise, we need to consult index for lookup.
 553 */
 554static struct dentry *ovl_lookup_real(struct super_block *sb,
 555                                      struct dentry *real,
 556                                      struct ovl_layer *layer)
 557{
 558        struct dentry *connected;
 559        int err = 0;
 560
 561        connected = ovl_lookup_real_ancestor(sb, real, layer);
 562        if (IS_ERR(connected))
 563                return connected;
 564
 565        while (!err) {
 566                struct dentry *next, *this;
 567                struct dentry *parent = NULL;
 568                struct dentry *real_connected = ovl_dentry_real_at(connected,
 569                                                                   layer->idx);
 570
 571                if (real_connected == real)
 572                        break;
 573
 574                /* Find the topmost dentry not yet connected */
 575                next = dget(real);
 576                for (;;) {
 577                        parent = dget_parent(next);
 578
 579                        if (parent == real_connected)
 580                                break;
 581
 582                        /*
 583                         * If real has been moved out of 'real_connected',
 584                         * we will not find 'real_connected' and hit the layer
 585                         * root. In that case, we need to restart connecting.
 586                         * This game can go on forever in the worst case. We
 587                         * may want to consider taking s_vfs_rename_mutex if
 588                         * this happens more than once.
 589                         */
 590                        if (parent == layer->mnt->mnt_root) {
 591                                dput(connected);
 592                                connected = dget(sb->s_root);
 593                                break;
 594                        }
 595
 596                        /*
 597                         * If real file has been moved out of the layer root
 598                         * directory, we will eventully hit the real fs root.
 599                         * This cannot happen by legit overlay rename, so we
 600                         * return error in that case.
 601                         */
 602                        if (parent == next) {
 603                                err = -EXDEV;
 604                                break;
 605                        }
 606
 607                        dput(next);
 608                        next = parent;
 609                }
 610
 611                if (!err) {
 612                        this = ovl_lookup_real_one(connected, next, layer);
 613                        if (IS_ERR(this))
 614                                err = PTR_ERR(this);
 615
 616                        /*
 617                         * Lookup of child in overlay can fail when racing with
 618                         * overlay rename of child away from 'connected' parent.
 619                         * In this case, we need to restart the lookup from the
 620                         * top, because we cannot trust that 'real_connected' is
 621                         * still an ancestor of 'real'. There is a good chance
 622                         * that the renamed overlay ancestor is now in cache, so
 623                         * ovl_lookup_real_ancestor() will find it and we can
 624                         * continue to connect exactly from where lookup failed.
 625                         */
 626                        if (err == -ECHILD) {
 627                                this = ovl_lookup_real_ancestor(sb, real,
 628                                                                layer);
 629                                err = PTR_ERR_OR_ZERO(this);
 630                        }
 631                        if (!err) {
 632                                dput(connected);
 633                                connected = this;
 634                        }
 635                }
 636
 637                dput(parent);
 638                dput(next);
 639        }
 640
 641        if (err)
 642                goto fail;
 643
 644        return connected;
 645
 646fail:
 647        pr_warn_ratelimited("overlayfs: failed to lookup by real (%pd2, layer=%d, connected=%pd2, err=%i)\n",
 648                            real, layer->idx, connected, err);
 649        dput(connected);
 650        return ERR_PTR(err);
 651}
 652
 653/*
 654 * Get an overlay dentry from upper/lower real dentries and index.
 655 */
 656static struct dentry *ovl_get_dentry(struct super_block *sb,
 657                                     struct dentry *upper,
 658                                     struct ovl_path *lowerpath,
 659                                     struct dentry *index)
 660{
 661        struct ovl_fs *ofs = sb->s_fs_info;
 662        struct ovl_layer upper_layer = { .mnt = ofs->upper_mnt };
 663        struct ovl_layer *layer = upper ? &upper_layer : lowerpath->layer;
 664        struct dentry *real = upper ?: (index ?: lowerpath->dentry);
 665
 666        /*
 667         * Obtain a disconnected overlay dentry from a non-dir real dentry
 668         * and index.
 669         */
 670        if (!d_is_dir(real))
 671                return ovl_obtain_alias(sb, upper, lowerpath, index);
 672
 673        /* Removed empty directory? */
 674        if ((real->d_flags & DCACHE_DISCONNECTED) || d_unhashed(real))
 675                return ERR_PTR(-ENOENT);
 676
 677        /*
 678         * If real dentry is connected and hashed, get a connected overlay
 679         * dentry whose real dentry is @real.
 680         */
 681        return ovl_lookup_real(sb, real, layer);
 682}
 683
 684static struct dentry *ovl_upper_fh_to_d(struct super_block *sb,
 685                                        struct ovl_fh *fh)
 686{
 687        struct ovl_fs *ofs = sb->s_fs_info;
 688        struct dentry *dentry;
 689        struct dentry *upper;
 690
 691        if (!ofs->upper_mnt)
 692                return ERR_PTR(-EACCES);
 693
 694        upper = ovl_decode_real_fh(fh, ofs->upper_mnt, true);
 695        if (IS_ERR_OR_NULL(upper))
 696                return upper;
 697
 698        dentry = ovl_get_dentry(sb, upper, NULL, NULL);
 699        dput(upper);
 700
 701        return dentry;
 702}
 703
 704static struct dentry *ovl_lower_fh_to_d(struct super_block *sb,
 705                                        struct ovl_fh *fh)
 706{
 707        struct ovl_fs *ofs = sb->s_fs_info;
 708        struct ovl_path origin = { };
 709        struct ovl_path *stack = &origin;
 710        struct dentry *dentry = NULL;
 711        struct dentry *index = NULL;
 712        struct inode *inode;
 713        int err;
 714
 715        /* First lookup overlay inode in inode cache by origin fh */
 716        err = ovl_check_origin_fh(ofs, fh, false, NULL, &stack);
 717        if (err)
 718                return ERR_PTR(err);
 719
 720        if (!d_is_dir(origin.dentry) ||
 721            !(origin.dentry->d_flags & DCACHE_DISCONNECTED)) {
 722                inode = ovl_lookup_inode(sb, origin.dentry, false);
 723                err = PTR_ERR(inode);
 724                if (IS_ERR(inode))
 725                        goto out_err;
 726                if (inode) {
 727                        dentry = d_find_any_alias(inode);
 728                        iput(inode);
 729                        if (dentry)
 730                                goto out;
 731                }
 732        }
 733
 734        /* Then lookup indexed upper/whiteout by origin fh */
 735        if (ofs->indexdir) {
 736                index = ovl_get_index_fh(ofs, fh);
 737                err = PTR_ERR(index);
 738                if (IS_ERR(index)) {
 739                        index = NULL;
 740                        goto out_err;
 741                }
 742        }
 743
 744        /* Then try to get a connected upper dir by index */
 745        if (index && d_is_dir(index)) {
 746                struct dentry *upper = ovl_index_upper(ofs, index);
 747
 748                err = PTR_ERR(upper);
 749                if (IS_ERR_OR_NULL(upper))
 750                        goto out_err;
 751
 752                dentry = ovl_get_dentry(sb, upper, NULL, NULL);
 753                dput(upper);
 754                goto out;
 755        }
 756
 757        /* Otherwise, get a connected non-upper dir or disconnected non-dir */
 758        if (d_is_dir(origin.dentry) &&
 759            (origin.dentry->d_flags & DCACHE_DISCONNECTED)) {
 760                dput(origin.dentry);
 761                origin.dentry = NULL;
 762                err = ovl_check_origin_fh(ofs, fh, true, NULL, &stack);
 763                if (err)
 764                        goto out_err;
 765        }
 766        if (index) {
 767                err = ovl_verify_origin(index, origin.dentry, false);
 768                if (err)
 769                        goto out_err;
 770        }
 771
 772        dentry = ovl_get_dentry(sb, NULL, &origin, index);
 773
 774out:
 775        dput(origin.dentry);
 776        dput(index);
 777        return dentry;
 778
 779out_err:
 780        dentry = ERR_PTR(err);
 781        goto out;
 782}
 783
 784static struct dentry *ovl_fh_to_dentry(struct super_block *sb, struct fid *fid,
 785                                       int fh_len, int fh_type)
 786{
 787        struct dentry *dentry = NULL;
 788        struct ovl_fh *fh = (struct ovl_fh *) fid;
 789        int len = fh_len << 2;
 790        unsigned int flags = 0;
 791        int err;
 792
 793        err = -EINVAL;
 794        if (fh_type != OVL_FILEID)
 795                goto out_err;
 796
 797        err = ovl_check_fh_len(fh, len);
 798        if (err)
 799                goto out_err;
 800
 801        flags = fh->flags;
 802        dentry = (flags & OVL_FH_FLAG_PATH_UPPER) ?
 803                 ovl_upper_fh_to_d(sb, fh) :
 804                 ovl_lower_fh_to_d(sb, fh);
 805        err = PTR_ERR(dentry);
 806        if (IS_ERR(dentry) && err != -ESTALE)
 807                goto out_err;
 808
 809        return dentry;
 810
 811out_err:
 812        pr_warn_ratelimited("overlayfs: failed to decode file handle (len=%d, type=%d, flags=%x, err=%i)\n",
 813                            len, fh_type, flags, err);
 814        return ERR_PTR(err);
 815}
 816
 817static struct dentry *ovl_fh_to_parent(struct super_block *sb, struct fid *fid,
 818                                       int fh_len, int fh_type)
 819{
 820        pr_warn_ratelimited("overlayfs: connectable file handles not supported; use 'no_subtree_check' exportfs option.\n");
 821        return ERR_PTR(-EACCES);
 822}
 823
 824static int ovl_get_name(struct dentry *parent, char *name,
 825                        struct dentry *child)
 826{
 827        /*
 828         * ovl_fh_to_dentry() returns connected dir overlay dentries and
 829         * ovl_fh_to_parent() is not implemented, so we should not get here.
 830         */
 831        WARN_ON_ONCE(1);
 832        return -EIO;
 833}
 834
 835static struct dentry *ovl_get_parent(struct dentry *dentry)
 836{
 837        /*
 838         * ovl_fh_to_dentry() returns connected dir overlay dentries, so we
 839         * should not get here.
 840         */
 841        WARN_ON_ONCE(1);
 842        return ERR_PTR(-EIO);
 843}
 844
 845const struct export_operations ovl_export_operations = {
 846        .encode_fh      = ovl_encode_fh,
 847        .fh_to_dentry   = ovl_fh_to_dentry,
 848        .fh_to_parent   = ovl_fh_to_parent,
 849        .get_name       = ovl_get_name,
 850        .get_parent     = ovl_get_parent,
 851};
 852