linux/fs/overlayfs/util.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright (C) 2011 Novell Inc.
   4 * Copyright (C) 2016 Red Hat, Inc.
   5 */
   6
   7#include <linux/fs.h>
   8#include <linux/mount.h>
   9#include <linux/slab.h>
  10#include <linux/cred.h>
  11#include <linux/xattr.h>
  12#include <linux/exportfs.h>
  13#include <linux/uuid.h>
  14#include <linux/namei.h>
  15#include <linux/ratelimit.h>
  16#include "overlayfs.h"
  17
  18int ovl_want_write(struct dentry *dentry)
  19{
  20        struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
  21        return mnt_want_write(ovl_upper_mnt(ofs));
  22}
  23
  24void ovl_drop_write(struct dentry *dentry)
  25{
  26        struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
  27        mnt_drop_write(ovl_upper_mnt(ofs));
  28}
  29
  30struct dentry *ovl_workdir(struct dentry *dentry)
  31{
  32        struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
  33        return ofs->workdir;
  34}
  35
  36const struct cred *ovl_override_creds(struct super_block *sb)
  37{
  38        struct ovl_fs *ofs = sb->s_fs_info;
  39
  40        return override_creds(ofs->creator_cred);
  41}
  42
  43/*
  44 * Check if underlying fs supports file handles and try to determine encoding
  45 * type, in order to deduce maximum inode number used by fs.
  46 *
  47 * Return 0 if file handles are not supported.
  48 * Return 1 (FILEID_INO32_GEN) if fs uses the default 32bit inode encoding.
  49 * Return -1 if fs uses a non default encoding with unknown inode size.
  50 */
  51int ovl_can_decode_fh(struct super_block *sb)
  52{
  53        if (!sb->s_export_op || !sb->s_export_op->fh_to_dentry)
  54                return 0;
  55
  56        return sb->s_export_op->encode_fh ? -1 : FILEID_INO32_GEN;
  57}
  58
  59struct dentry *ovl_indexdir(struct super_block *sb)
  60{
  61        struct ovl_fs *ofs = sb->s_fs_info;
  62
  63        return ofs->indexdir;
  64}
  65
  66/* Index all files on copy up. For now only enabled for NFS export */
  67bool ovl_index_all(struct super_block *sb)
  68{
  69        struct ovl_fs *ofs = sb->s_fs_info;
  70
  71        return ofs->config.nfs_export && ofs->config.index;
  72}
  73
  74/* Verify lower origin on lookup. For now only enabled for NFS export */
  75bool ovl_verify_lower(struct super_block *sb)
  76{
  77        struct ovl_fs *ofs = sb->s_fs_info;
  78
  79        return ofs->config.nfs_export && ofs->config.index;
  80}
  81
  82struct ovl_entry *ovl_alloc_entry(unsigned int numlower)
  83{
  84        size_t size = offsetof(struct ovl_entry, lowerstack[numlower]);
  85        struct ovl_entry *oe = kzalloc(size, GFP_KERNEL);
  86
  87        if (oe)
  88                oe->numlower = numlower;
  89
  90        return oe;
  91}
  92
  93bool ovl_dentry_remote(struct dentry *dentry)
  94{
  95        return dentry->d_flags &
  96                (DCACHE_OP_REVALIDATE | DCACHE_OP_WEAK_REVALIDATE);
  97}
  98
  99void ovl_dentry_update_reval(struct dentry *dentry, struct dentry *upperdentry,
 100                             unsigned int mask)
 101{
 102        struct ovl_entry *oe = OVL_E(dentry);
 103        unsigned int i, flags = 0;
 104
 105        if (upperdentry)
 106                flags |= upperdentry->d_flags;
 107        for (i = 0; i < oe->numlower; i++)
 108                flags |= oe->lowerstack[i].dentry->d_flags;
 109
 110        spin_lock(&dentry->d_lock);
 111        dentry->d_flags &= ~mask;
 112        dentry->d_flags |= flags & mask;
 113        spin_unlock(&dentry->d_lock);
 114}
 115
 116bool ovl_dentry_weird(struct dentry *dentry)
 117{
 118        return dentry->d_flags & (DCACHE_NEED_AUTOMOUNT |
 119                                  DCACHE_MANAGE_TRANSIT |
 120                                  DCACHE_OP_HASH |
 121                                  DCACHE_OP_COMPARE);
 122}
 123
 124enum ovl_path_type ovl_path_type(struct dentry *dentry)
 125{
 126        struct ovl_entry *oe = dentry->d_fsdata;
 127        enum ovl_path_type type = 0;
 128
 129        if (ovl_dentry_upper(dentry)) {
 130                type = __OVL_PATH_UPPER;
 131
 132                /*
 133                 * Non-dir dentry can hold lower dentry of its copy up origin.
 134                 */
 135                if (oe->numlower) {
 136                        if (ovl_test_flag(OVL_CONST_INO, d_inode(dentry)))
 137                                type |= __OVL_PATH_ORIGIN;
 138                        if (d_is_dir(dentry) ||
 139                            !ovl_has_upperdata(d_inode(dentry)))
 140                                type |= __OVL_PATH_MERGE;
 141                }
 142        } else {
 143                if (oe->numlower > 1)
 144                        type |= __OVL_PATH_MERGE;
 145        }
 146        return type;
 147}
 148
 149void ovl_path_upper(struct dentry *dentry, struct path *path)
 150{
 151        struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
 152
 153        path->mnt = ovl_upper_mnt(ofs);
 154        path->dentry = ovl_dentry_upper(dentry);
 155}
 156
 157void ovl_path_lower(struct dentry *dentry, struct path *path)
 158{
 159        struct ovl_entry *oe = dentry->d_fsdata;
 160
 161        if (oe->numlower) {
 162                path->mnt = oe->lowerstack[0].layer->mnt;
 163                path->dentry = oe->lowerstack[0].dentry;
 164        } else {
 165                *path = (struct path) { };
 166        }
 167}
 168
 169void ovl_path_lowerdata(struct dentry *dentry, struct path *path)
 170{
 171        struct ovl_entry *oe = dentry->d_fsdata;
 172
 173        if (oe->numlower) {
 174                path->mnt = oe->lowerstack[oe->numlower - 1].layer->mnt;
 175                path->dentry = oe->lowerstack[oe->numlower - 1].dentry;
 176        } else {
 177                *path = (struct path) { };
 178        }
 179}
 180
 181enum ovl_path_type ovl_path_real(struct dentry *dentry, struct path *path)
 182{
 183        enum ovl_path_type type = ovl_path_type(dentry);
 184
 185        if (!OVL_TYPE_UPPER(type))
 186                ovl_path_lower(dentry, path);
 187        else
 188                ovl_path_upper(dentry, path);
 189
 190        return type;
 191}
 192
 193struct dentry *ovl_dentry_upper(struct dentry *dentry)
 194{
 195        return ovl_upperdentry_dereference(OVL_I(d_inode(dentry)));
 196}
 197
 198struct dentry *ovl_dentry_lower(struct dentry *dentry)
 199{
 200        struct ovl_entry *oe = dentry->d_fsdata;
 201
 202        return oe->numlower ? oe->lowerstack[0].dentry : NULL;
 203}
 204
 205const struct ovl_layer *ovl_layer_lower(struct dentry *dentry)
 206{
 207        struct ovl_entry *oe = dentry->d_fsdata;
 208
 209        return oe->numlower ? oe->lowerstack[0].layer : NULL;
 210}
 211
 212/*
 213 * ovl_dentry_lower() could return either a data dentry or metacopy dentry
 214 * dependig on what is stored in lowerstack[0]. At times we need to find
 215 * lower dentry which has data (and not metacopy dentry). This helper
 216 * returns the lower data dentry.
 217 */
 218struct dentry *ovl_dentry_lowerdata(struct dentry *dentry)
 219{
 220        struct ovl_entry *oe = dentry->d_fsdata;
 221
 222        return oe->numlower ? oe->lowerstack[oe->numlower - 1].dentry : NULL;
 223}
 224
 225struct dentry *ovl_dentry_real(struct dentry *dentry)
 226{
 227        return ovl_dentry_upper(dentry) ?: ovl_dentry_lower(dentry);
 228}
 229
 230struct dentry *ovl_i_dentry_upper(struct inode *inode)
 231{
 232        return ovl_upperdentry_dereference(OVL_I(inode));
 233}
 234
 235struct inode *ovl_inode_upper(struct inode *inode)
 236{
 237        struct dentry *upperdentry = ovl_i_dentry_upper(inode);
 238
 239        return upperdentry ? d_inode(upperdentry) : NULL;
 240}
 241
 242struct inode *ovl_inode_lower(struct inode *inode)
 243{
 244        return OVL_I(inode)->lower;
 245}
 246
 247struct inode *ovl_inode_real(struct inode *inode)
 248{
 249        return ovl_inode_upper(inode) ?: ovl_inode_lower(inode);
 250}
 251
 252/* Return inode which contains lower data. Do not return metacopy */
 253struct inode *ovl_inode_lowerdata(struct inode *inode)
 254{
 255        if (WARN_ON(!S_ISREG(inode->i_mode)))
 256                return NULL;
 257
 258        return OVL_I(inode)->lowerdata ?: ovl_inode_lower(inode);
 259}
 260
 261/* Return real inode which contains data. Does not return metacopy inode */
 262struct inode *ovl_inode_realdata(struct inode *inode)
 263{
 264        struct inode *upperinode;
 265
 266        upperinode = ovl_inode_upper(inode);
 267        if (upperinode && ovl_has_upperdata(inode))
 268                return upperinode;
 269
 270        return ovl_inode_lowerdata(inode);
 271}
 272
 273struct ovl_dir_cache *ovl_dir_cache(struct inode *inode)
 274{
 275        return OVL_I(inode)->cache;
 276}
 277
 278void ovl_set_dir_cache(struct inode *inode, struct ovl_dir_cache *cache)
 279{
 280        OVL_I(inode)->cache = cache;
 281}
 282
 283void ovl_dentry_set_flag(unsigned long flag, struct dentry *dentry)
 284{
 285        set_bit(flag, &OVL_E(dentry)->flags);
 286}
 287
 288void ovl_dentry_clear_flag(unsigned long flag, struct dentry *dentry)
 289{
 290        clear_bit(flag, &OVL_E(dentry)->flags);
 291}
 292
 293bool ovl_dentry_test_flag(unsigned long flag, struct dentry *dentry)
 294{
 295        return test_bit(flag, &OVL_E(dentry)->flags);
 296}
 297
 298bool ovl_dentry_is_opaque(struct dentry *dentry)
 299{
 300        return ovl_dentry_test_flag(OVL_E_OPAQUE, dentry);
 301}
 302
 303bool ovl_dentry_is_whiteout(struct dentry *dentry)
 304{
 305        return !dentry->d_inode && ovl_dentry_is_opaque(dentry);
 306}
 307
 308void ovl_dentry_set_opaque(struct dentry *dentry)
 309{
 310        ovl_dentry_set_flag(OVL_E_OPAQUE, dentry);
 311}
 312
 313/*
 314 * For hard links and decoded file handles, it's possible for ovl_dentry_upper()
 315 * to return positive, while there's no actual upper alias for the inode.
 316 * Copy up code needs to know about the existence of the upper alias, so it
 317 * can't use ovl_dentry_upper().
 318 */
 319bool ovl_dentry_has_upper_alias(struct dentry *dentry)
 320{
 321        return ovl_dentry_test_flag(OVL_E_UPPER_ALIAS, dentry);
 322}
 323
 324void ovl_dentry_set_upper_alias(struct dentry *dentry)
 325{
 326        ovl_dentry_set_flag(OVL_E_UPPER_ALIAS, dentry);
 327}
 328
 329static bool ovl_should_check_upperdata(struct inode *inode)
 330{
 331        if (!S_ISREG(inode->i_mode))
 332                return false;
 333
 334        if (!ovl_inode_lower(inode))
 335                return false;
 336
 337        return true;
 338}
 339
 340bool ovl_has_upperdata(struct inode *inode)
 341{
 342        if (!ovl_should_check_upperdata(inode))
 343                return true;
 344
 345        if (!ovl_test_flag(OVL_UPPERDATA, inode))
 346                return false;
 347        /*
 348         * Pairs with smp_wmb() in ovl_set_upperdata(). Main user of
 349         * ovl_has_upperdata() is ovl_copy_up_meta_inode_data(). Make sure
 350         * if setting of OVL_UPPERDATA is visible, then effects of writes
 351         * before that are visible too.
 352         */
 353        smp_rmb();
 354        return true;
 355}
 356
 357void ovl_set_upperdata(struct inode *inode)
 358{
 359        /*
 360         * Pairs with smp_rmb() in ovl_has_upperdata(). Make sure
 361         * if OVL_UPPERDATA flag is visible, then effects of write operations
 362         * before it are visible as well.
 363         */
 364        smp_wmb();
 365        ovl_set_flag(OVL_UPPERDATA, inode);
 366}
 367
 368/* Caller should hold ovl_inode->lock */
 369bool ovl_dentry_needs_data_copy_up_locked(struct dentry *dentry, int flags)
 370{
 371        if (!ovl_open_flags_need_copy_up(flags))
 372                return false;
 373
 374        return !ovl_test_flag(OVL_UPPERDATA, d_inode(dentry));
 375}
 376
 377bool ovl_dentry_needs_data_copy_up(struct dentry *dentry, int flags)
 378{
 379        if (!ovl_open_flags_need_copy_up(flags))
 380                return false;
 381
 382        return !ovl_has_upperdata(d_inode(dentry));
 383}
 384
 385bool ovl_redirect_dir(struct super_block *sb)
 386{
 387        struct ovl_fs *ofs = sb->s_fs_info;
 388
 389        return ofs->config.redirect_dir && !ofs->noxattr;
 390}
 391
 392const char *ovl_dentry_get_redirect(struct dentry *dentry)
 393{
 394        return OVL_I(d_inode(dentry))->redirect;
 395}
 396
 397void ovl_dentry_set_redirect(struct dentry *dentry, const char *redirect)
 398{
 399        struct ovl_inode *oi = OVL_I(d_inode(dentry));
 400
 401        kfree(oi->redirect);
 402        oi->redirect = redirect;
 403}
 404
 405void ovl_inode_update(struct inode *inode, struct dentry *upperdentry)
 406{
 407        struct inode *upperinode = d_inode(upperdentry);
 408
 409        WARN_ON(OVL_I(inode)->__upperdentry);
 410
 411        /*
 412         * Make sure upperdentry is consistent before making it visible
 413         */
 414        smp_wmb();
 415        OVL_I(inode)->__upperdentry = upperdentry;
 416        if (inode_unhashed(inode)) {
 417                inode->i_private = upperinode;
 418                __insert_inode_hash(inode, (unsigned long) upperinode);
 419        }
 420}
 421
 422static void ovl_dentry_version_inc(struct dentry *dentry, bool impurity)
 423{
 424        struct inode *inode = d_inode(dentry);
 425
 426        WARN_ON(!inode_is_locked(inode));
 427        /*
 428         * Version is used by readdir code to keep cache consistent.  For merge
 429         * dirs all changes need to be noted.  For non-merge dirs, cache only
 430         * contains impure (ones which have been copied up and have origins)
 431         * entries, so only need to note changes to impure entries.
 432         */
 433        if (OVL_TYPE_MERGE(ovl_path_type(dentry)) || impurity)
 434                OVL_I(inode)->version++;
 435}
 436
 437void ovl_dir_modified(struct dentry *dentry, bool impurity)
 438{
 439        /* Copy mtime/ctime */
 440        ovl_copyattr(d_inode(ovl_dentry_upper(dentry)), d_inode(dentry));
 441
 442        ovl_dentry_version_inc(dentry, impurity);
 443}
 444
 445u64 ovl_dentry_version_get(struct dentry *dentry)
 446{
 447        struct inode *inode = d_inode(dentry);
 448
 449        WARN_ON(!inode_is_locked(inode));
 450        return OVL_I(inode)->version;
 451}
 452
 453bool ovl_is_whiteout(struct dentry *dentry)
 454{
 455        struct inode *inode = dentry->d_inode;
 456
 457        return inode && IS_WHITEOUT(inode);
 458}
 459
 460struct file *ovl_path_open(struct path *path, int flags)
 461{
 462        struct inode *inode = d_inode(path->dentry);
 463        int err, acc_mode;
 464
 465        if (flags & ~(O_ACCMODE | O_LARGEFILE))
 466                BUG();
 467
 468        switch (flags & O_ACCMODE) {
 469        case O_RDONLY:
 470                acc_mode = MAY_READ;
 471                break;
 472        case O_WRONLY:
 473                acc_mode = MAY_WRITE;
 474                break;
 475        default:
 476                BUG();
 477        }
 478
 479        err = inode_permission(inode, acc_mode | MAY_OPEN);
 480        if (err)
 481                return ERR_PTR(err);
 482
 483        /* O_NOATIME is an optimization, don't fail if not permitted */
 484        if (inode_owner_or_capable(inode))
 485                flags |= O_NOATIME;
 486
 487        return dentry_open(path, flags, current_cred());
 488}
 489
 490/* Caller should hold ovl_inode->lock */
 491static bool ovl_already_copied_up_locked(struct dentry *dentry, int flags)
 492{
 493        bool disconnected = dentry->d_flags & DCACHE_DISCONNECTED;
 494
 495        if (ovl_dentry_upper(dentry) &&
 496            (ovl_dentry_has_upper_alias(dentry) || disconnected) &&
 497            !ovl_dentry_needs_data_copy_up_locked(dentry, flags))
 498                return true;
 499
 500        return false;
 501}
 502
 503bool ovl_already_copied_up(struct dentry *dentry, int flags)
 504{
 505        bool disconnected = dentry->d_flags & DCACHE_DISCONNECTED;
 506
 507        /*
 508         * Check if copy-up has happened as well as for upper alias (in
 509         * case of hard links) is there.
 510         *
 511         * Both checks are lockless:
 512         *  - false negatives: will recheck under oi->lock
 513         *  - false positives:
 514         *    + ovl_dentry_upper() uses memory barriers to ensure the
 515         *      upper dentry is up-to-date
 516         *    + ovl_dentry_has_upper_alias() relies on locking of
 517         *      upper parent i_rwsem to prevent reordering copy-up
 518         *      with rename.
 519         */
 520        if (ovl_dentry_upper(dentry) &&
 521            (ovl_dentry_has_upper_alias(dentry) || disconnected) &&
 522            !ovl_dentry_needs_data_copy_up(dentry, flags))
 523                return true;
 524
 525        return false;
 526}
 527
 528int ovl_copy_up_start(struct dentry *dentry, int flags)
 529{
 530        struct inode *inode = d_inode(dentry);
 531        int err;
 532
 533        err = ovl_inode_lock_interruptible(inode);
 534        if (!err && ovl_already_copied_up_locked(dentry, flags)) {
 535                err = 1; /* Already copied up */
 536                ovl_inode_unlock(inode);
 537        }
 538
 539        return err;
 540}
 541
 542void ovl_copy_up_end(struct dentry *dentry)
 543{
 544        ovl_inode_unlock(d_inode(dentry));
 545}
 546
 547bool ovl_check_origin_xattr(struct dentry *dentry)
 548{
 549        int res;
 550
 551        res = vfs_getxattr(dentry, OVL_XATTR_ORIGIN, NULL, 0);
 552
 553        /* Zero size value means "copied up but origin unknown" */
 554        if (res >= 0)
 555                return true;
 556
 557        return false;
 558}
 559
 560bool ovl_check_dir_xattr(struct dentry *dentry, const char *name)
 561{
 562        int res;
 563        char val;
 564
 565        if (!d_is_dir(dentry))
 566                return false;
 567
 568        res = vfs_getxattr(dentry, name, &val, 1);
 569        if (res == 1 && val == 'y')
 570                return true;
 571
 572        return false;
 573}
 574
 575int ovl_check_setxattr(struct dentry *dentry, struct dentry *upperdentry,
 576                       const char *name, const void *value, size_t size,
 577                       int xerr)
 578{
 579        int err;
 580        struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
 581
 582        if (ofs->noxattr)
 583                return xerr;
 584
 585        err = ovl_do_setxattr(upperdentry, name, value, size, 0);
 586
 587        if (err == -EOPNOTSUPP) {
 588                pr_warn("cannot set %s xattr on upper\n", name);
 589                ofs->noxattr = true;
 590                return xerr;
 591        }
 592
 593        return err;
 594}
 595
 596int ovl_set_impure(struct dentry *dentry, struct dentry *upperdentry)
 597{
 598        int err;
 599
 600        if (ovl_test_flag(OVL_IMPURE, d_inode(dentry)))
 601                return 0;
 602
 603        /*
 604         * Do not fail when upper doesn't support xattrs.
 605         * Upper inodes won't have origin nor redirect xattr anyway.
 606         */
 607        err = ovl_check_setxattr(dentry, upperdentry, OVL_XATTR_IMPURE,
 608                                 "y", 1, 0);
 609        if (!err)
 610                ovl_set_flag(OVL_IMPURE, d_inode(dentry));
 611
 612        return err;
 613}
 614
 615void ovl_set_flag(unsigned long flag, struct inode *inode)
 616{
 617        set_bit(flag, &OVL_I(inode)->flags);
 618}
 619
 620void ovl_clear_flag(unsigned long flag, struct inode *inode)
 621{
 622        clear_bit(flag, &OVL_I(inode)->flags);
 623}
 624
 625bool ovl_test_flag(unsigned long flag, struct inode *inode)
 626{
 627        return test_bit(flag, &OVL_I(inode)->flags);
 628}
 629
 630/**
 631 * Caller must hold a reference to inode to prevent it from being freed while
 632 * it is marked inuse.
 633 */
 634bool ovl_inuse_trylock(struct dentry *dentry)
 635{
 636        struct inode *inode = d_inode(dentry);
 637        bool locked = false;
 638
 639        spin_lock(&inode->i_lock);
 640        if (!(inode->i_state & I_OVL_INUSE)) {
 641                inode->i_state |= I_OVL_INUSE;
 642                locked = true;
 643        }
 644        spin_unlock(&inode->i_lock);
 645
 646        return locked;
 647}
 648
 649void ovl_inuse_unlock(struct dentry *dentry)
 650{
 651        if (dentry) {
 652                struct inode *inode = d_inode(dentry);
 653
 654                spin_lock(&inode->i_lock);
 655                WARN_ON(!(inode->i_state & I_OVL_INUSE));
 656                inode->i_state &= ~I_OVL_INUSE;
 657                spin_unlock(&inode->i_lock);
 658        }
 659}
 660
 661bool ovl_is_inuse(struct dentry *dentry)
 662{
 663        struct inode *inode = d_inode(dentry);
 664        bool inuse;
 665
 666        spin_lock(&inode->i_lock);
 667        inuse = (inode->i_state & I_OVL_INUSE);
 668        spin_unlock(&inode->i_lock);
 669
 670        return inuse;
 671}
 672
 673/*
 674 * Does this overlay dentry need to be indexed on copy up?
 675 */
 676bool ovl_need_index(struct dentry *dentry)
 677{
 678        struct dentry *lower = ovl_dentry_lower(dentry);
 679
 680        if (!lower || !ovl_indexdir(dentry->d_sb))
 681                return false;
 682
 683        /* Index all files for NFS export and consistency verification */
 684        if (ovl_index_all(dentry->d_sb))
 685                return true;
 686
 687        /* Index only lower hardlinks on copy up */
 688        if (!d_is_dir(lower) && d_inode(lower)->i_nlink > 1)
 689                return true;
 690
 691        return false;
 692}
 693
 694/* Caller must hold OVL_I(inode)->lock */
 695static void ovl_cleanup_index(struct dentry *dentry)
 696{
 697        struct dentry *indexdir = ovl_indexdir(dentry->d_sb);
 698        struct inode *dir = indexdir->d_inode;
 699        struct dentry *lowerdentry = ovl_dentry_lower(dentry);
 700        struct dentry *upperdentry = ovl_dentry_upper(dentry);
 701        struct dentry *index = NULL;
 702        struct inode *inode;
 703        struct qstr name = { };
 704        int err;
 705
 706        err = ovl_get_index_name(lowerdentry, &name);
 707        if (err)
 708                goto fail;
 709
 710        inode = d_inode(upperdentry);
 711        if (!S_ISDIR(inode->i_mode) && inode->i_nlink != 1) {
 712                pr_warn_ratelimited("cleanup linked index (%pd2, ino=%lu, nlink=%u)\n",
 713                                    upperdentry, inode->i_ino, inode->i_nlink);
 714                /*
 715                 * We either have a bug with persistent union nlink or a lower
 716                 * hardlink was added while overlay is mounted. Adding a lower
 717                 * hardlink and then unlinking all overlay hardlinks would drop
 718                 * overlay nlink to zero before all upper inodes are unlinked.
 719                 * As a safety measure, when that situation is detected, set
 720                 * the overlay nlink to the index inode nlink minus one for the
 721                 * index entry itself.
 722                 */
 723                set_nlink(d_inode(dentry), inode->i_nlink - 1);
 724                ovl_set_nlink_upper(dentry);
 725                goto out;
 726        }
 727
 728        inode_lock_nested(dir, I_MUTEX_PARENT);
 729        index = lookup_one_len(name.name, indexdir, name.len);
 730        err = PTR_ERR(index);
 731        if (IS_ERR(index)) {
 732                index = NULL;
 733        } else if (ovl_index_all(dentry->d_sb)) {
 734                /* Whiteout orphan index to block future open by handle */
 735                err = ovl_cleanup_and_whiteout(OVL_FS(dentry->d_sb),
 736                                               dir, index);
 737        } else {
 738                /* Cleanup orphan index entries */
 739                err = ovl_cleanup(dir, index);
 740        }
 741
 742        inode_unlock(dir);
 743        if (err)
 744                goto fail;
 745
 746out:
 747        kfree(name.name);
 748        dput(index);
 749        return;
 750
 751fail:
 752        pr_err("cleanup index of '%pd2' failed (%i)\n", dentry, err);
 753        goto out;
 754}
 755
 756/*
 757 * Operations that change overlay inode and upper inode nlink need to be
 758 * synchronized with copy up for persistent nlink accounting.
 759 */
 760int ovl_nlink_start(struct dentry *dentry)
 761{
 762        struct inode *inode = d_inode(dentry);
 763        const struct cred *old_cred;
 764        int err;
 765
 766        if (WARN_ON(!inode))
 767                return -ENOENT;
 768
 769        /*
 770         * With inodes index is enabled, we store the union overlay nlink
 771         * in an xattr on the index inode. When whiting out an indexed lower,
 772         * we need to decrement the overlay persistent nlink, but before the
 773         * first copy up, we have no upper index inode to store the xattr.
 774         *
 775         * As a workaround, before whiteout/rename over an indexed lower,
 776         * copy up to create the upper index. Creating the upper index will
 777         * initialize the overlay nlink, so it could be dropped if unlink
 778         * or rename succeeds.
 779         *
 780         * TODO: implement metadata only index copy up when called with
 781         *       ovl_copy_up_flags(dentry, O_PATH).
 782         */
 783        if (ovl_need_index(dentry) && !ovl_dentry_has_upper_alias(dentry)) {
 784                err = ovl_copy_up(dentry);
 785                if (err)
 786                        return err;
 787        }
 788
 789        err = ovl_inode_lock_interruptible(inode);
 790        if (err)
 791                return err;
 792
 793        if (d_is_dir(dentry) || !ovl_test_flag(OVL_INDEX, inode))
 794                goto out;
 795
 796        old_cred = ovl_override_creds(dentry->d_sb);
 797        /*
 798         * The overlay inode nlink should be incremented/decremented IFF the
 799         * upper operation succeeds, along with nlink change of upper inode.
 800         * Therefore, before link/unlink/rename, we store the union nlink
 801         * value relative to the upper inode nlink in an upper inode xattr.
 802         */
 803        err = ovl_set_nlink_upper(dentry);
 804        revert_creds(old_cred);
 805
 806out:
 807        if (err)
 808                ovl_inode_unlock(inode);
 809
 810        return err;
 811}
 812
 813void ovl_nlink_end(struct dentry *dentry)
 814{
 815        struct inode *inode = d_inode(dentry);
 816
 817        if (ovl_test_flag(OVL_INDEX, inode) && inode->i_nlink == 0) {
 818                const struct cred *old_cred;
 819
 820                old_cred = ovl_override_creds(dentry->d_sb);
 821                ovl_cleanup_index(dentry);
 822                revert_creds(old_cred);
 823        }
 824
 825        ovl_inode_unlock(inode);
 826}
 827
 828int ovl_lock_rename_workdir(struct dentry *workdir, struct dentry *upperdir)
 829{
 830        /* Workdir should not be the same as upperdir */
 831        if (workdir == upperdir)
 832                goto err;
 833
 834        /* Workdir should not be subdir of upperdir and vice versa */
 835        if (lock_rename(workdir, upperdir) != NULL)
 836                goto err_unlock;
 837
 838        return 0;
 839
 840err_unlock:
 841        unlock_rename(workdir, upperdir);
 842err:
 843        pr_err("failed to lock workdir+upperdir\n");
 844        return -EIO;
 845}
 846
 847/* err < 0, 0 if no metacopy xattr, 1 if metacopy xattr found */
 848int ovl_check_metacopy_xattr(struct dentry *dentry)
 849{
 850        int res;
 851
 852        /* Only regular files can have metacopy xattr */
 853        if (!S_ISREG(d_inode(dentry)->i_mode))
 854                return 0;
 855
 856        res = vfs_getxattr(dentry, OVL_XATTR_METACOPY, NULL, 0);
 857        if (res < 0) {
 858                if (res == -ENODATA || res == -EOPNOTSUPP)
 859                        return 0;
 860                goto out;
 861        }
 862
 863        return 1;
 864out:
 865        pr_warn_ratelimited("failed to get metacopy (%i)\n", res);
 866        return res;
 867}
 868
 869bool ovl_is_metacopy_dentry(struct dentry *dentry)
 870{
 871        struct ovl_entry *oe = dentry->d_fsdata;
 872
 873        if (!d_is_reg(dentry))
 874                return false;
 875
 876        if (ovl_dentry_upper(dentry)) {
 877                if (!ovl_has_upperdata(d_inode(dentry)))
 878                        return true;
 879                return false;
 880        }
 881
 882        return (oe->numlower > 1);
 883}
 884
 885ssize_t ovl_getxattr(struct dentry *dentry, char *name, char **value,
 886                     size_t padding)
 887{
 888        ssize_t res;
 889        char *buf = NULL;
 890
 891        res = vfs_getxattr(dentry, name, NULL, 0);
 892        if (res < 0) {
 893                if (res == -ENODATA || res == -EOPNOTSUPP)
 894                        return -ENODATA;
 895                goto fail;
 896        }
 897
 898        if (res != 0) {
 899                buf = kzalloc(res + padding, GFP_KERNEL);
 900                if (!buf)
 901                        return -ENOMEM;
 902
 903                res = vfs_getxattr(dentry, name, buf, res);
 904                if (res < 0)
 905                        goto fail;
 906        }
 907        *value = buf;
 908
 909        return res;
 910
 911fail:
 912        pr_warn_ratelimited("failed to get xattr %s: err=%zi)\n",
 913                            name, res);
 914        kfree(buf);
 915        return res;
 916}
 917
 918char *ovl_get_redirect_xattr(struct dentry *dentry, int padding)
 919{
 920        int res;
 921        char *s, *next, *buf = NULL;
 922
 923        res = ovl_getxattr(dentry, OVL_XATTR_REDIRECT, &buf, padding + 1);
 924        if (res == -ENODATA)
 925                return NULL;
 926        if (res < 0)
 927                return ERR_PTR(res);
 928        if (res == 0)
 929                goto invalid;
 930
 931        if (buf[0] == '/') {
 932                for (s = buf; *s++ == '/'; s = next) {
 933                        next = strchrnul(s, '/');
 934                        if (s == next)
 935                                goto invalid;
 936                }
 937        } else {
 938                if (strchr(buf, '/') != NULL)
 939                        goto invalid;
 940        }
 941
 942        return buf;
 943invalid:
 944        pr_warn_ratelimited("invalid redirect (%s)\n", buf);
 945        res = -EINVAL;
 946        kfree(buf);
 947        return ERR_PTR(res);
 948}
 949