linux/fs/overlayfs/util.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2011 Novell Inc.
   3 * Copyright (C) 2016 Red Hat, 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/mount.h>
  12#include <linux/slab.h>
  13#include <linux/cred.h>
  14#include <linux/xattr.h>
  15#include <linux/exportfs.h>
  16#include <linux/uuid.h>
  17#include <linux/namei.h>
  18#include <linux/ratelimit.h>
  19#include "overlayfs.h"
  20
  21int ovl_want_write(struct dentry *dentry)
  22{
  23        struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
  24        return mnt_want_write(ofs->upper_mnt);
  25}
  26
  27void ovl_drop_write(struct dentry *dentry)
  28{
  29        struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
  30        mnt_drop_write(ofs->upper_mnt);
  31}
  32
  33struct dentry *ovl_workdir(struct dentry *dentry)
  34{
  35        struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
  36        return ofs->workdir;
  37}
  38
  39const struct cred *ovl_override_creds(struct super_block *sb)
  40{
  41        struct ovl_fs *ofs = sb->s_fs_info;
  42
  43        return override_creds(ofs->creator_cred);
  44}
  45
  46struct super_block *ovl_same_sb(struct super_block *sb)
  47{
  48        struct ovl_fs *ofs = sb->s_fs_info;
  49
  50        if (!ofs->numlowerfs)
  51                return ofs->upper_mnt->mnt_sb;
  52        else if (ofs->numlowerfs == 1 && !ofs->upper_mnt)
  53                return ofs->lower_fs[0].sb;
  54        else
  55                return NULL;
  56}
  57
  58/*
  59 * Check if underlying fs supports file handles and try to determine encoding
  60 * type, in order to deduce maximum inode number used by fs.
  61 *
  62 * Return 0 if file handles are not supported.
  63 * Return 1 (FILEID_INO32_GEN) if fs uses the default 32bit inode encoding.
  64 * Return -1 if fs uses a non default encoding with unknown inode size.
  65 */
  66int ovl_can_decode_fh(struct super_block *sb)
  67{
  68        if (!sb->s_export_op || !sb->s_export_op->fh_to_dentry ||
  69            uuid_is_null(&sb->s_uuid))
  70                return 0;
  71
  72        return sb->s_export_op->encode_fh ? -1 : FILEID_INO32_GEN;
  73}
  74
  75struct dentry *ovl_indexdir(struct super_block *sb)
  76{
  77        struct ovl_fs *ofs = sb->s_fs_info;
  78
  79        return ofs->indexdir;
  80}
  81
  82/* Index all files on copy up. For now only enabled for NFS export */
  83bool ovl_index_all(struct super_block *sb)
  84{
  85        struct ovl_fs *ofs = sb->s_fs_info;
  86
  87        return ofs->config.nfs_export && ofs->config.index;
  88}
  89
  90/* Verify lower origin on lookup. For now only enabled for NFS export */
  91bool ovl_verify_lower(struct super_block *sb)
  92{
  93        struct ovl_fs *ofs = sb->s_fs_info;
  94
  95        return ofs->config.nfs_export && ofs->config.index;
  96}
  97
  98struct ovl_entry *ovl_alloc_entry(unsigned int numlower)
  99{
 100        size_t size = offsetof(struct ovl_entry, lowerstack[numlower]);
 101        struct ovl_entry *oe = kzalloc(size, GFP_KERNEL);
 102
 103        if (oe)
 104                oe->numlower = numlower;
 105
 106        return oe;
 107}
 108
 109bool ovl_dentry_remote(struct dentry *dentry)
 110{
 111        return dentry->d_flags &
 112                (DCACHE_OP_REVALIDATE | DCACHE_OP_WEAK_REVALIDATE |
 113                 DCACHE_OP_REAL);
 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 = ofs->upper_mnt;
 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
 205struct 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_init(struct inode *inode, struct dentry *upperdentry,
 406                    struct dentry *lowerdentry, struct dentry *lowerdata)
 407{
 408        struct inode *realinode = d_inode(upperdentry ?: lowerdentry);
 409
 410        if (upperdentry)
 411                OVL_I(inode)->__upperdentry = upperdentry;
 412        if (lowerdentry)
 413                OVL_I(inode)->lower = igrab(d_inode(lowerdentry));
 414        if (lowerdata)
 415                OVL_I(inode)->lowerdata = igrab(d_inode(lowerdata));
 416
 417        ovl_copyattr(realinode, inode);
 418        ovl_copyflags(realinode, inode);
 419        if (!inode->i_ino)
 420                inode->i_ino = realinode->i_ino;
 421}
 422
 423void ovl_inode_update(struct inode *inode, struct dentry *upperdentry)
 424{
 425        struct inode *upperinode = d_inode(upperdentry);
 426
 427        WARN_ON(OVL_I(inode)->__upperdentry);
 428
 429        /*
 430         * Make sure upperdentry is consistent before making it visible
 431         */
 432        smp_wmb();
 433        OVL_I(inode)->__upperdentry = upperdentry;
 434        if (inode_unhashed(inode)) {
 435                if (!inode->i_ino)
 436                        inode->i_ino = upperinode->i_ino;
 437                inode->i_private = upperinode;
 438                __insert_inode_hash(inode, (unsigned long) upperinode);
 439        }
 440}
 441
 442static void ovl_dentry_version_inc(struct dentry *dentry, bool impurity)
 443{
 444        struct inode *inode = d_inode(dentry);
 445
 446        WARN_ON(!inode_is_locked(inode));
 447        /*
 448         * Version is used by readdir code to keep cache consistent.  For merge
 449         * dirs all changes need to be noted.  For non-merge dirs, cache only
 450         * contains impure (ones which have been copied up and have origins)
 451         * entries, so only need to note changes to impure entries.
 452         */
 453        if (OVL_TYPE_MERGE(ovl_path_type(dentry)) || impurity)
 454                OVL_I(inode)->version++;
 455}
 456
 457void ovl_dir_modified(struct dentry *dentry, bool impurity)
 458{
 459        /* Copy mtime/ctime */
 460        ovl_copyattr(d_inode(ovl_dentry_upper(dentry)), d_inode(dentry));
 461
 462        ovl_dentry_version_inc(dentry, impurity);
 463}
 464
 465u64 ovl_dentry_version_get(struct dentry *dentry)
 466{
 467        struct inode *inode = d_inode(dentry);
 468
 469        WARN_ON(!inode_is_locked(inode));
 470        return OVL_I(inode)->version;
 471}
 472
 473bool ovl_is_whiteout(struct dentry *dentry)
 474{
 475        struct inode *inode = dentry->d_inode;
 476
 477        return inode && IS_WHITEOUT(inode);
 478}
 479
 480struct file *ovl_path_open(struct path *path, int flags)
 481{
 482        return dentry_open(path, flags | O_NOATIME, current_cred());
 483}
 484
 485/* Caller should hold ovl_inode->lock */
 486static bool ovl_already_copied_up_locked(struct dentry *dentry, int flags)
 487{
 488        bool disconnected = dentry->d_flags & DCACHE_DISCONNECTED;
 489
 490        if (ovl_dentry_upper(dentry) &&
 491            (ovl_dentry_has_upper_alias(dentry) || disconnected) &&
 492            !ovl_dentry_needs_data_copy_up_locked(dentry, flags))
 493                return true;
 494
 495        return false;
 496}
 497
 498bool ovl_already_copied_up(struct dentry *dentry, int flags)
 499{
 500        bool disconnected = dentry->d_flags & DCACHE_DISCONNECTED;
 501
 502        /*
 503         * Check if copy-up has happened as well as for upper alias (in
 504         * case of hard links) is there.
 505         *
 506         * Both checks are lockless:
 507         *  - false negatives: will recheck under oi->lock
 508         *  - false positives:
 509         *    + ovl_dentry_upper() uses memory barriers to ensure the
 510         *      upper dentry is up-to-date
 511         *    + ovl_dentry_has_upper_alias() relies on locking of
 512         *      upper parent i_rwsem to prevent reordering copy-up
 513         *      with rename.
 514         */
 515        if (ovl_dentry_upper(dentry) &&
 516            (ovl_dentry_has_upper_alias(dentry) || disconnected) &&
 517            !ovl_dentry_needs_data_copy_up(dentry, flags))
 518                return true;
 519
 520        return false;
 521}
 522
 523int ovl_copy_up_start(struct dentry *dentry, int flags)
 524{
 525        struct ovl_inode *oi = OVL_I(d_inode(dentry));
 526        int err;
 527
 528        err = mutex_lock_interruptible(&oi->lock);
 529        if (!err && ovl_already_copied_up_locked(dentry, flags)) {
 530                err = 1; /* Already copied up */
 531                mutex_unlock(&oi->lock);
 532        }
 533
 534        return err;
 535}
 536
 537void ovl_copy_up_end(struct dentry *dentry)
 538{
 539        mutex_unlock(&OVL_I(d_inode(dentry))->lock);
 540}
 541
 542bool ovl_check_origin_xattr(struct dentry *dentry)
 543{
 544        int res;
 545
 546        res = vfs_getxattr(dentry, OVL_XATTR_ORIGIN, NULL, 0);
 547
 548        /* Zero size value means "copied up but origin unknown" */
 549        if (res >= 0)
 550                return true;
 551
 552        return false;
 553}
 554
 555bool ovl_check_dir_xattr(struct dentry *dentry, const char *name)
 556{
 557        int res;
 558        char val;
 559
 560        if (!d_is_dir(dentry))
 561                return false;
 562
 563        res = vfs_getxattr(dentry, name, &val, 1);
 564        if (res == 1 && val == 'y')
 565                return true;
 566
 567        return false;
 568}
 569
 570int ovl_check_setxattr(struct dentry *dentry, struct dentry *upperdentry,
 571                       const char *name, const void *value, size_t size,
 572                       int xerr)
 573{
 574        int err;
 575        struct ovl_fs *ofs = dentry->d_sb->s_fs_info;
 576
 577        if (ofs->noxattr)
 578                return xerr;
 579
 580        err = ovl_do_setxattr(upperdentry, name, value, size, 0);
 581
 582        if (err == -EOPNOTSUPP) {
 583                pr_warn("overlayfs: cannot set %s xattr on upper\n", name);
 584                ofs->noxattr = true;
 585                return xerr;
 586        }
 587
 588        return err;
 589}
 590
 591int ovl_set_impure(struct dentry *dentry, struct dentry *upperdentry)
 592{
 593        int err;
 594
 595        if (ovl_test_flag(OVL_IMPURE, d_inode(dentry)))
 596                return 0;
 597
 598        /*
 599         * Do not fail when upper doesn't support xattrs.
 600         * Upper inodes won't have origin nor redirect xattr anyway.
 601         */
 602        err = ovl_check_setxattr(dentry, upperdentry, OVL_XATTR_IMPURE,
 603                                 "y", 1, 0);
 604        if (!err)
 605                ovl_set_flag(OVL_IMPURE, d_inode(dentry));
 606
 607        return err;
 608}
 609
 610void ovl_set_flag(unsigned long flag, struct inode *inode)
 611{
 612        set_bit(flag, &OVL_I(inode)->flags);
 613}
 614
 615void ovl_clear_flag(unsigned long flag, struct inode *inode)
 616{
 617        clear_bit(flag, &OVL_I(inode)->flags);
 618}
 619
 620bool ovl_test_flag(unsigned long flag, struct inode *inode)
 621{
 622        return test_bit(flag, &OVL_I(inode)->flags);
 623}
 624
 625/**
 626 * Caller must hold a reference to inode to prevent it from being freed while
 627 * it is marked inuse.
 628 */
 629bool ovl_inuse_trylock(struct dentry *dentry)
 630{
 631        struct inode *inode = d_inode(dentry);
 632        bool locked = false;
 633
 634        spin_lock(&inode->i_lock);
 635        if (!(inode->i_state & I_OVL_INUSE)) {
 636                inode->i_state |= I_OVL_INUSE;
 637                locked = true;
 638        }
 639        spin_unlock(&inode->i_lock);
 640
 641        return locked;
 642}
 643
 644void ovl_inuse_unlock(struct dentry *dentry)
 645{
 646        if (dentry) {
 647                struct inode *inode = d_inode(dentry);
 648
 649                spin_lock(&inode->i_lock);
 650                WARN_ON(!(inode->i_state & I_OVL_INUSE));
 651                inode->i_state &= ~I_OVL_INUSE;
 652                spin_unlock(&inode->i_lock);
 653        }
 654}
 655
 656/*
 657 * Does this overlay dentry need to be indexed on copy up?
 658 */
 659bool ovl_need_index(struct dentry *dentry)
 660{
 661        struct dentry *lower = ovl_dentry_lower(dentry);
 662
 663        if (!lower || !ovl_indexdir(dentry->d_sb))
 664                return false;
 665
 666        /* Index all files for NFS export and consistency verification */
 667        if (ovl_index_all(dentry->d_sb))
 668                return true;
 669
 670        /* Index only lower hardlinks on copy up */
 671        if (!d_is_dir(lower) && d_inode(lower)->i_nlink > 1)
 672                return true;
 673
 674        return false;
 675}
 676
 677/* Caller must hold OVL_I(inode)->lock */
 678static void ovl_cleanup_index(struct dentry *dentry)
 679{
 680        struct dentry *indexdir = ovl_indexdir(dentry->d_sb);
 681        struct inode *dir = indexdir->d_inode;
 682        struct dentry *lowerdentry = ovl_dentry_lower(dentry);
 683        struct dentry *upperdentry = ovl_dentry_upper(dentry);
 684        struct dentry *index = NULL;
 685        struct inode *inode;
 686        struct qstr name = { };
 687        int err;
 688
 689        err = ovl_get_index_name(lowerdentry, &name);
 690        if (err)
 691                goto fail;
 692
 693        inode = d_inode(upperdentry);
 694        if (!S_ISDIR(inode->i_mode) && inode->i_nlink != 1) {
 695                pr_warn_ratelimited("overlayfs: cleanup linked index (%pd2, ino=%lu, nlink=%u)\n",
 696                                    upperdentry, inode->i_ino, inode->i_nlink);
 697                /*
 698                 * We either have a bug with persistent union nlink or a lower
 699                 * hardlink was added while overlay is mounted. Adding a lower
 700                 * hardlink and then unlinking all overlay hardlinks would drop
 701                 * overlay nlink to zero before all upper inodes are unlinked.
 702                 * As a safety measure, when that situation is detected, set
 703                 * the overlay nlink to the index inode nlink minus one for the
 704                 * index entry itself.
 705                 */
 706                set_nlink(d_inode(dentry), inode->i_nlink - 1);
 707                ovl_set_nlink_upper(dentry);
 708                goto out;
 709        }
 710
 711        inode_lock_nested(dir, I_MUTEX_PARENT);
 712        index = lookup_one_len(name.name, indexdir, name.len);
 713        err = PTR_ERR(index);
 714        if (IS_ERR(index)) {
 715                index = NULL;
 716        } else if (ovl_index_all(dentry->d_sb)) {
 717                /* Whiteout orphan index to block future open by handle */
 718                err = ovl_cleanup_and_whiteout(indexdir, dir, index);
 719        } else {
 720                /* Cleanup orphan index entries */
 721                err = ovl_cleanup(dir, index);
 722        }
 723
 724        inode_unlock(dir);
 725        if (err)
 726                goto fail;
 727
 728out:
 729        kfree(name.name);
 730        dput(index);
 731        return;
 732
 733fail:
 734        pr_err("overlayfs: cleanup index of '%pd2' failed (%i)\n", dentry, err);
 735        goto out;
 736}
 737
 738/*
 739 * Operations that change overlay inode and upper inode nlink need to be
 740 * synchronized with copy up for persistent nlink accounting.
 741 */
 742int ovl_nlink_start(struct dentry *dentry, bool *locked)
 743{
 744        struct ovl_inode *oi = OVL_I(d_inode(dentry));
 745        const struct cred *old_cred;
 746        int err;
 747
 748        if (!d_inode(dentry))
 749                return 0;
 750
 751        /*
 752         * With inodes index is enabled, we store the union overlay nlink
 753         * in an xattr on the index inode. When whiting out an indexed lower,
 754         * we need to decrement the overlay persistent nlink, but before the
 755         * first copy up, we have no upper index inode to store the xattr.
 756         *
 757         * As a workaround, before whiteout/rename over an indexed lower,
 758         * copy up to create the upper index. Creating the upper index will
 759         * initialize the overlay nlink, so it could be dropped if unlink
 760         * or rename succeeds.
 761         *
 762         * TODO: implement metadata only index copy up when called with
 763         *       ovl_copy_up_flags(dentry, O_PATH).
 764         */
 765        if (ovl_need_index(dentry) && !ovl_dentry_has_upper_alias(dentry)) {
 766                err = ovl_copy_up(dentry);
 767                if (err)
 768                        return err;
 769        }
 770
 771        err = mutex_lock_interruptible(&oi->lock);
 772        if (err)
 773                return err;
 774
 775        if (d_is_dir(dentry) || !ovl_test_flag(OVL_INDEX, d_inode(dentry)))
 776                goto out;
 777
 778        old_cred = ovl_override_creds(dentry->d_sb);
 779        /*
 780         * The overlay inode nlink should be incremented/decremented IFF the
 781         * upper operation succeeds, along with nlink change of upper inode.
 782         * Therefore, before link/unlink/rename, we store the union nlink
 783         * value relative to the upper inode nlink in an upper inode xattr.
 784         */
 785        err = ovl_set_nlink_upper(dentry);
 786        revert_creds(old_cred);
 787
 788out:
 789        if (err)
 790                mutex_unlock(&oi->lock);
 791        else
 792                *locked = true;
 793
 794        return err;
 795}
 796
 797void ovl_nlink_end(struct dentry *dentry, bool locked)
 798{
 799        if (locked) {
 800                if (ovl_test_flag(OVL_INDEX, d_inode(dentry)) &&
 801                    d_inode(dentry)->i_nlink == 0) {
 802                        const struct cred *old_cred;
 803
 804                        old_cred = ovl_override_creds(dentry->d_sb);
 805                        ovl_cleanup_index(dentry);
 806                        revert_creds(old_cred);
 807                }
 808
 809                mutex_unlock(&OVL_I(d_inode(dentry))->lock);
 810        }
 811}
 812
 813int ovl_lock_rename_workdir(struct dentry *workdir, struct dentry *upperdir)
 814{
 815        /* Workdir should not be the same as upperdir */
 816        if (workdir == upperdir)
 817                goto err;
 818
 819        /* Workdir should not be subdir of upperdir and vice versa */
 820        if (lock_rename(workdir, upperdir) != NULL)
 821                goto err_unlock;
 822
 823        return 0;
 824
 825err_unlock:
 826        unlock_rename(workdir, upperdir);
 827err:
 828        pr_err("overlayfs: failed to lock workdir+upperdir\n");
 829        return -EIO;
 830}
 831
 832/* err < 0, 0 if no metacopy xattr, 1 if metacopy xattr found */
 833int ovl_check_metacopy_xattr(struct dentry *dentry)
 834{
 835        int res;
 836
 837        /* Only regular files can have metacopy xattr */
 838        if (!S_ISREG(d_inode(dentry)->i_mode))
 839                return 0;
 840
 841        res = vfs_getxattr(dentry, OVL_XATTR_METACOPY, NULL, 0);
 842        if (res < 0) {
 843                if (res == -ENODATA || res == -EOPNOTSUPP)
 844                        return 0;
 845                goto out;
 846        }
 847
 848        return 1;
 849out:
 850        pr_warn_ratelimited("overlayfs: failed to get metacopy (%i)\n", res);
 851        return res;
 852}
 853
 854bool ovl_is_metacopy_dentry(struct dentry *dentry)
 855{
 856        struct ovl_entry *oe = dentry->d_fsdata;
 857
 858        if (!d_is_reg(dentry))
 859                return false;
 860
 861        if (ovl_dentry_upper(dentry)) {
 862                if (!ovl_has_upperdata(d_inode(dentry)))
 863                        return true;
 864                return false;
 865        }
 866
 867        return (oe->numlower > 1);
 868}
 869
 870char *ovl_get_redirect_xattr(struct dentry *dentry, int padding)
 871{
 872        int res;
 873        char *s, *next, *buf = NULL;
 874
 875        res = vfs_getxattr(dentry, OVL_XATTR_REDIRECT, NULL, 0);
 876        if (res < 0) {
 877                if (res == -ENODATA || res == -EOPNOTSUPP)
 878                        return NULL;
 879                goto fail;
 880        }
 881
 882        buf = kzalloc(res + padding + 1, GFP_KERNEL);
 883        if (!buf)
 884                return ERR_PTR(-ENOMEM);
 885
 886        if (res == 0)
 887                goto invalid;
 888
 889        res = vfs_getxattr(dentry, OVL_XATTR_REDIRECT, buf, res);
 890        if (res < 0)
 891                goto fail;
 892        if (res == 0)
 893                goto invalid;
 894
 895        if (buf[0] == '/') {
 896                for (s = buf; *s++ == '/'; s = next) {
 897                        next = strchrnul(s, '/');
 898                        if (s == next)
 899                                goto invalid;
 900                }
 901        } else {
 902                if (strchr(buf, '/') != NULL)
 903                        goto invalid;
 904        }
 905
 906        return buf;
 907
 908err_free:
 909        kfree(buf);
 910        return ERR_PTR(res);
 911fail:
 912        pr_warn_ratelimited("overlayfs: failed to get redirect (%i)\n", res);
 913        goto err_free;
 914invalid:
 915        pr_warn_ratelimited("overlayfs: invalid redirect (%s)\n", buf);
 916        res = -EINVAL;
 917        goto err_free;
 918}
 919