linux/mm/shmem.c
<<
>>
Prefs
   1/*
   2 * Resizable virtual memory filesystem for Linux.
   3 *
   4 * Copyright (C) 2000 Linus Torvalds.
   5 *               2000 Transmeta Corp.
   6 *               2000-2001 Christoph Rohland
   7 *               2000-2001 SAP AG
   8 *               2002 Red Hat Inc.
   9 * Copyright (C) 2002-2011 Hugh Dickins.
  10 * Copyright (C) 2011 Google Inc.
  11 * Copyright (C) 2002-2005 VERITAS Software Corporation.
  12 * Copyright (C) 2004 Andi Kleen, SuSE Labs
  13 *
  14 * Extended attribute support for tmpfs:
  15 * Copyright (c) 2004, Luke Kenneth Casson Leighton <lkcl@lkcl.net>
  16 * Copyright (c) 2004 Red Hat, Inc., James Morris <jmorris@redhat.com>
  17 *
  18 * tiny-shmem:
  19 * Copyright (c) 2004, 2008 Matt Mackall <mpm@selenic.com>
  20 *
  21 * This file is released under the GPL.
  22 */
  23
  24#include <linux/fs.h>
  25#include <linux/init.h>
  26#include <linux/vfs.h>
  27#include <linux/mount.h>
  28#include <linux/ramfs.h>
  29#include <linux/pagemap.h>
  30#include <linux/file.h>
  31#include <linux/mm.h>
  32#include <linux/random.h>
  33#include <linux/sched/signal.h>
  34#include <linux/export.h>
  35#include <linux/swap.h>
  36#include <linux/uio.h>
  37#include <linux/khugepaged.h>
  38#include <linux/hugetlb.h>
  39#include <linux/frontswap.h>
  40#include <linux/fs_parser.h>
  41#include <linux/swapfile.h>
  42
  43static struct vfsmount *shm_mnt;
  44
  45#ifdef CONFIG_SHMEM
  46/*
  47 * This virtual memory filesystem is heavily based on the ramfs. It
  48 * extends ramfs by the ability to use swap and honor resource limits
  49 * which makes it a completely usable filesystem.
  50 */
  51
  52#include <linux/xattr.h>
  53#include <linux/exportfs.h>
  54#include <linux/posix_acl.h>
  55#include <linux/posix_acl_xattr.h>
  56#include <linux/mman.h>
  57#include <linux/string.h>
  58#include <linux/slab.h>
  59#include <linux/backing-dev.h>
  60#include <linux/shmem_fs.h>
  61#include <linux/writeback.h>
  62#include <linux/pagevec.h>
  63#include <linux/percpu_counter.h>
  64#include <linux/falloc.h>
  65#include <linux/splice.h>
  66#include <linux/security.h>
  67#include <linux/swapops.h>
  68#include <linux/mempolicy.h>
  69#include <linux/namei.h>
  70#include <linux/ctype.h>
  71#include <linux/migrate.h>
  72#include <linux/highmem.h>
  73#include <linux/seq_file.h>
  74#include <linux/magic.h>
  75#include <linux/syscalls.h>
  76#include <linux/fcntl.h>
  77#include <uapi/linux/memfd.h>
  78#include <linux/userfaultfd_k.h>
  79#include <linux/rmap.h>
  80#include <linux/uuid.h>
  81
  82#include <linux/uaccess.h>
  83
  84#include "internal.h"
  85
  86#define BLOCKS_PER_PAGE  (PAGE_SIZE/512)
  87#define VM_ACCT(size)    (PAGE_ALIGN(size) >> PAGE_SHIFT)
  88
  89/* Pretend that each entry is of this size in directory's i_size */
  90#define BOGO_DIRENT_SIZE 20
  91
  92/* Symlink up to this size is kmalloc'ed instead of using a swappable page */
  93#define SHORT_SYMLINK_LEN 128
  94
  95/*
  96 * shmem_fallocate communicates with shmem_fault or shmem_writepage via
  97 * inode->i_private (with i_rwsem making sure that it has only one user at
  98 * a time): we would prefer not to enlarge the shmem inode just for that.
  99 */
 100struct shmem_falloc {
 101        wait_queue_head_t *waitq; /* faults into hole wait for punch to end */
 102        pgoff_t start;          /* start of range currently being fallocated */
 103        pgoff_t next;           /* the next page offset to be fallocated */
 104        pgoff_t nr_falloced;    /* how many new pages have been fallocated */
 105        pgoff_t nr_unswapped;   /* how often writepage refused to swap out */
 106};
 107
 108struct shmem_options {
 109        unsigned long long blocks;
 110        unsigned long long inodes;
 111        struct mempolicy *mpol;
 112        kuid_t uid;
 113        kgid_t gid;
 114        umode_t mode;
 115        bool full_inums;
 116        int huge;
 117        int seen;
 118#define SHMEM_SEEN_BLOCKS 1
 119#define SHMEM_SEEN_INODES 2
 120#define SHMEM_SEEN_HUGE 4
 121#define SHMEM_SEEN_INUMS 8
 122};
 123
 124#ifdef CONFIG_TMPFS
 125static unsigned long shmem_default_max_blocks(void)
 126{
 127        return totalram_pages() / 2;
 128}
 129
 130static unsigned long shmem_default_max_inodes(void)
 131{
 132        unsigned long nr_pages = totalram_pages();
 133
 134        return min(nr_pages - totalhigh_pages(), nr_pages / 2);
 135}
 136#endif
 137
 138static int shmem_swapin_page(struct inode *inode, pgoff_t index,
 139                             struct page **pagep, enum sgp_type sgp,
 140                             gfp_t gfp, struct vm_area_struct *vma,
 141                             vm_fault_t *fault_type);
 142static int shmem_getpage_gfp(struct inode *inode, pgoff_t index,
 143                struct page **pagep, enum sgp_type sgp,
 144                gfp_t gfp, struct vm_area_struct *vma,
 145                struct vm_fault *vmf, vm_fault_t *fault_type);
 146
 147int shmem_getpage(struct inode *inode, pgoff_t index,
 148                struct page **pagep, enum sgp_type sgp)
 149{
 150        return shmem_getpage_gfp(inode, index, pagep, sgp,
 151                mapping_gfp_mask(inode->i_mapping), NULL, NULL, NULL);
 152}
 153
 154static inline struct shmem_sb_info *SHMEM_SB(struct super_block *sb)
 155{
 156        return sb->s_fs_info;
 157}
 158
 159/*
 160 * shmem_file_setup pre-accounts the whole fixed size of a VM object,
 161 * for shared memory and for shared anonymous (/dev/zero) mappings
 162 * (unless MAP_NORESERVE and sysctl_overcommit_memory <= 1),
 163 * consistent with the pre-accounting of private mappings ...
 164 */
 165static inline int shmem_acct_size(unsigned long flags, loff_t size)
 166{
 167        return (flags & VM_NORESERVE) ?
 168                0 : security_vm_enough_memory_mm(current->mm, VM_ACCT(size));
 169}
 170
 171static inline void shmem_unacct_size(unsigned long flags, loff_t size)
 172{
 173        if (!(flags & VM_NORESERVE))
 174                vm_unacct_memory(VM_ACCT(size));
 175}
 176
 177static inline int shmem_reacct_size(unsigned long flags,
 178                loff_t oldsize, loff_t newsize)
 179{
 180        if (!(flags & VM_NORESERVE)) {
 181                if (VM_ACCT(newsize) > VM_ACCT(oldsize))
 182                        return security_vm_enough_memory_mm(current->mm,
 183                                        VM_ACCT(newsize) - VM_ACCT(oldsize));
 184                else if (VM_ACCT(newsize) < VM_ACCT(oldsize))
 185                        vm_unacct_memory(VM_ACCT(oldsize) - VM_ACCT(newsize));
 186        }
 187        return 0;
 188}
 189
 190/*
 191 * ... whereas tmpfs objects are accounted incrementally as
 192 * pages are allocated, in order to allow large sparse files.
 193 * shmem_getpage reports shmem_acct_block failure as -ENOSPC not -ENOMEM,
 194 * so that a failure on a sparse tmpfs mapping will give SIGBUS not OOM.
 195 */
 196static inline int shmem_acct_block(unsigned long flags, long pages)
 197{
 198        if (!(flags & VM_NORESERVE))
 199                return 0;
 200
 201        return security_vm_enough_memory_mm(current->mm,
 202                        pages * VM_ACCT(PAGE_SIZE));
 203}
 204
 205static inline void shmem_unacct_blocks(unsigned long flags, long pages)
 206{
 207        if (flags & VM_NORESERVE)
 208                vm_unacct_memory(pages * VM_ACCT(PAGE_SIZE));
 209}
 210
 211static inline bool shmem_inode_acct_block(struct inode *inode, long pages)
 212{
 213        struct shmem_inode_info *info = SHMEM_I(inode);
 214        struct shmem_sb_info *sbinfo = SHMEM_SB(inode->i_sb);
 215
 216        if (shmem_acct_block(info->flags, pages))
 217                return false;
 218
 219        if (sbinfo->max_blocks) {
 220                if (percpu_counter_compare(&sbinfo->used_blocks,
 221                                           sbinfo->max_blocks - pages) > 0)
 222                        goto unacct;
 223                percpu_counter_add(&sbinfo->used_blocks, pages);
 224        }
 225
 226        return true;
 227
 228unacct:
 229        shmem_unacct_blocks(info->flags, pages);
 230        return false;
 231}
 232
 233static inline void shmem_inode_unacct_blocks(struct inode *inode, long pages)
 234{
 235        struct shmem_inode_info *info = SHMEM_I(inode);
 236        struct shmem_sb_info *sbinfo = SHMEM_SB(inode->i_sb);
 237
 238        if (sbinfo->max_blocks)
 239                percpu_counter_sub(&sbinfo->used_blocks, pages);
 240        shmem_unacct_blocks(info->flags, pages);
 241}
 242
 243static const struct super_operations shmem_ops;
 244const struct address_space_operations shmem_aops;
 245static const struct file_operations shmem_file_operations;
 246static const struct inode_operations shmem_inode_operations;
 247static const struct inode_operations shmem_dir_inode_operations;
 248static const struct inode_operations shmem_special_inode_operations;
 249static const struct vm_operations_struct shmem_vm_ops;
 250static struct file_system_type shmem_fs_type;
 251
 252bool vma_is_shmem(struct vm_area_struct *vma)
 253{
 254        return vma->vm_ops == &shmem_vm_ops;
 255}
 256
 257static LIST_HEAD(shmem_swaplist);
 258static DEFINE_MUTEX(shmem_swaplist_mutex);
 259
 260/*
 261 * shmem_reserve_inode() performs bookkeeping to reserve a shmem inode, and
 262 * produces a novel ino for the newly allocated inode.
 263 *
 264 * It may also be called when making a hard link to permit the space needed by
 265 * each dentry. However, in that case, no new inode number is needed since that
 266 * internally draws from another pool of inode numbers (currently global
 267 * get_next_ino()). This case is indicated by passing NULL as inop.
 268 */
 269#define SHMEM_INO_BATCH 1024
 270static int shmem_reserve_inode(struct super_block *sb, ino_t *inop)
 271{
 272        struct shmem_sb_info *sbinfo = SHMEM_SB(sb);
 273        ino_t ino;
 274
 275        if (!(sb->s_flags & SB_KERNMOUNT)) {
 276                raw_spin_lock(&sbinfo->stat_lock);
 277                if (sbinfo->max_inodes) {
 278                        if (!sbinfo->free_inodes) {
 279                                raw_spin_unlock(&sbinfo->stat_lock);
 280                                return -ENOSPC;
 281                        }
 282                        sbinfo->free_inodes--;
 283                }
 284                if (inop) {
 285                        ino = sbinfo->next_ino++;
 286                        if (unlikely(is_zero_ino(ino)))
 287                                ino = sbinfo->next_ino++;
 288                        if (unlikely(!sbinfo->full_inums &&
 289                                     ino > UINT_MAX)) {
 290                                /*
 291                                 * Emulate get_next_ino uint wraparound for
 292                                 * compatibility
 293                                 */
 294                                if (IS_ENABLED(CONFIG_64BIT))
 295                                        pr_warn("%s: inode number overflow on device %d, consider using inode64 mount option\n",
 296                                                __func__, MINOR(sb->s_dev));
 297                                sbinfo->next_ino = 1;
 298                                ino = sbinfo->next_ino++;
 299                        }
 300                        *inop = ino;
 301                }
 302                raw_spin_unlock(&sbinfo->stat_lock);
 303        } else if (inop) {
 304                /*
 305                 * __shmem_file_setup, one of our callers, is lock-free: it
 306                 * doesn't hold stat_lock in shmem_reserve_inode since
 307                 * max_inodes is always 0, and is called from potentially
 308                 * unknown contexts. As such, use a per-cpu batched allocator
 309                 * which doesn't require the per-sb stat_lock unless we are at
 310                 * the batch boundary.
 311                 *
 312                 * We don't need to worry about inode{32,64} since SB_KERNMOUNT
 313                 * shmem mounts are not exposed to userspace, so we don't need
 314                 * to worry about things like glibc compatibility.
 315                 */
 316                ino_t *next_ino;
 317
 318                next_ino = per_cpu_ptr(sbinfo->ino_batch, get_cpu());
 319                ino = *next_ino;
 320                if (unlikely(ino % SHMEM_INO_BATCH == 0)) {
 321                        raw_spin_lock(&sbinfo->stat_lock);
 322                        ino = sbinfo->next_ino;
 323                        sbinfo->next_ino += SHMEM_INO_BATCH;
 324                        raw_spin_unlock(&sbinfo->stat_lock);
 325                        if (unlikely(is_zero_ino(ino)))
 326                                ino++;
 327                }
 328                *inop = ino;
 329                *next_ino = ++ino;
 330                put_cpu();
 331        }
 332
 333        return 0;
 334}
 335
 336static void shmem_free_inode(struct super_block *sb)
 337{
 338        struct shmem_sb_info *sbinfo = SHMEM_SB(sb);
 339        if (sbinfo->max_inodes) {
 340                raw_spin_lock(&sbinfo->stat_lock);
 341                sbinfo->free_inodes++;
 342                raw_spin_unlock(&sbinfo->stat_lock);
 343        }
 344}
 345
 346/**
 347 * shmem_recalc_inode - recalculate the block usage of an inode
 348 * @inode: inode to recalc
 349 *
 350 * We have to calculate the free blocks since the mm can drop
 351 * undirtied hole pages behind our back.
 352 *
 353 * But normally   info->alloced == inode->i_mapping->nrpages + info->swapped
 354 * So mm freed is info->alloced - (inode->i_mapping->nrpages + info->swapped)
 355 *
 356 * It has to be called with the spinlock held.
 357 */
 358static void shmem_recalc_inode(struct inode *inode)
 359{
 360        struct shmem_inode_info *info = SHMEM_I(inode);
 361        long freed;
 362
 363        freed = info->alloced - info->swapped - inode->i_mapping->nrpages;
 364        if (freed > 0) {
 365                info->alloced -= freed;
 366                inode->i_blocks -= freed * BLOCKS_PER_PAGE;
 367                shmem_inode_unacct_blocks(inode, freed);
 368        }
 369}
 370
 371bool shmem_charge(struct inode *inode, long pages)
 372{
 373        struct shmem_inode_info *info = SHMEM_I(inode);
 374        unsigned long flags;
 375
 376        if (!shmem_inode_acct_block(inode, pages))
 377                return false;
 378
 379        /* nrpages adjustment first, then shmem_recalc_inode() when balanced */
 380        inode->i_mapping->nrpages += pages;
 381
 382        spin_lock_irqsave(&info->lock, flags);
 383        info->alloced += pages;
 384        inode->i_blocks += pages * BLOCKS_PER_PAGE;
 385        shmem_recalc_inode(inode);
 386        spin_unlock_irqrestore(&info->lock, flags);
 387
 388        return true;
 389}
 390
 391void shmem_uncharge(struct inode *inode, long pages)
 392{
 393        struct shmem_inode_info *info = SHMEM_I(inode);
 394        unsigned long flags;
 395
 396        /* nrpages adjustment done by __delete_from_page_cache() or caller */
 397
 398        spin_lock_irqsave(&info->lock, flags);
 399        info->alloced -= pages;
 400        inode->i_blocks -= pages * BLOCKS_PER_PAGE;
 401        shmem_recalc_inode(inode);
 402        spin_unlock_irqrestore(&info->lock, flags);
 403
 404        shmem_inode_unacct_blocks(inode, pages);
 405}
 406
 407/*
 408 * Replace item expected in xarray by a new item, while holding xa_lock.
 409 */
 410static int shmem_replace_entry(struct address_space *mapping,
 411                        pgoff_t index, void *expected, void *replacement)
 412{
 413        XA_STATE(xas, &mapping->i_pages, index);
 414        void *item;
 415
 416        VM_BUG_ON(!expected);
 417        VM_BUG_ON(!replacement);
 418        item = xas_load(&xas);
 419        if (item != expected)
 420                return -ENOENT;
 421        xas_store(&xas, replacement);
 422        return 0;
 423}
 424
 425/*
 426 * Sometimes, before we decide whether to proceed or to fail, we must check
 427 * that an entry was not already brought back from swap by a racing thread.
 428 *
 429 * Checking page is not enough: by the time a SwapCache page is locked, it
 430 * might be reused, and again be SwapCache, using the same swap as before.
 431 */
 432static bool shmem_confirm_swap(struct address_space *mapping,
 433                               pgoff_t index, swp_entry_t swap)
 434{
 435        return xa_load(&mapping->i_pages, index) == swp_to_radix_entry(swap);
 436}
 437
 438/*
 439 * Definitions for "huge tmpfs": tmpfs mounted with the huge= option
 440 *
 441 * SHMEM_HUGE_NEVER:
 442 *      disables huge pages for the mount;
 443 * SHMEM_HUGE_ALWAYS:
 444 *      enables huge pages for the mount;
 445 * SHMEM_HUGE_WITHIN_SIZE:
 446 *      only allocate huge pages if the page will be fully within i_size,
 447 *      also respect fadvise()/madvise() hints;
 448 * SHMEM_HUGE_ADVISE:
 449 *      only allocate huge pages if requested with fadvise()/madvise();
 450 */
 451
 452#define SHMEM_HUGE_NEVER        0
 453#define SHMEM_HUGE_ALWAYS       1
 454#define SHMEM_HUGE_WITHIN_SIZE  2
 455#define SHMEM_HUGE_ADVISE       3
 456
 457/*
 458 * Special values.
 459 * Only can be set via /sys/kernel/mm/transparent_hugepage/shmem_enabled:
 460 *
 461 * SHMEM_HUGE_DENY:
 462 *      disables huge on shm_mnt and all mounts, for emergency use;
 463 * SHMEM_HUGE_FORCE:
 464 *      enables huge on shm_mnt and all mounts, w/o needing option, for testing;
 465 *
 466 */
 467#define SHMEM_HUGE_DENY         (-1)
 468#define SHMEM_HUGE_FORCE        (-2)
 469
 470#ifdef CONFIG_TRANSPARENT_HUGEPAGE
 471/* ifdef here to avoid bloating shmem.o when not necessary */
 472
 473static int shmem_huge __read_mostly = SHMEM_HUGE_NEVER;
 474
 475bool shmem_is_huge(struct vm_area_struct *vma,
 476                   struct inode *inode, pgoff_t index)
 477{
 478        loff_t i_size;
 479
 480        if (shmem_huge == SHMEM_HUGE_DENY)
 481                return false;
 482        if (vma && ((vma->vm_flags & VM_NOHUGEPAGE) ||
 483            test_bit(MMF_DISABLE_THP, &vma->vm_mm->flags)))
 484                return false;
 485        if (shmem_huge == SHMEM_HUGE_FORCE)
 486                return true;
 487
 488        switch (SHMEM_SB(inode->i_sb)->huge) {
 489        case SHMEM_HUGE_ALWAYS:
 490                return true;
 491        case SHMEM_HUGE_WITHIN_SIZE:
 492                index = round_up(index + 1, HPAGE_PMD_NR);
 493                i_size = round_up(i_size_read(inode), PAGE_SIZE);
 494                if (i_size >> PAGE_SHIFT >= index)
 495                        return true;
 496                fallthrough;
 497        case SHMEM_HUGE_ADVISE:
 498                if (vma && (vma->vm_flags & VM_HUGEPAGE))
 499                        return true;
 500                fallthrough;
 501        default:
 502                return false;
 503        }
 504}
 505
 506#if defined(CONFIG_SYSFS)
 507static int shmem_parse_huge(const char *str)
 508{
 509        if (!strcmp(str, "never"))
 510                return SHMEM_HUGE_NEVER;
 511        if (!strcmp(str, "always"))
 512                return SHMEM_HUGE_ALWAYS;
 513        if (!strcmp(str, "within_size"))
 514                return SHMEM_HUGE_WITHIN_SIZE;
 515        if (!strcmp(str, "advise"))
 516                return SHMEM_HUGE_ADVISE;
 517        if (!strcmp(str, "deny"))
 518                return SHMEM_HUGE_DENY;
 519        if (!strcmp(str, "force"))
 520                return SHMEM_HUGE_FORCE;
 521        return -EINVAL;
 522}
 523#endif
 524
 525#if defined(CONFIG_SYSFS) || defined(CONFIG_TMPFS)
 526static const char *shmem_format_huge(int huge)
 527{
 528        switch (huge) {
 529        case SHMEM_HUGE_NEVER:
 530                return "never";
 531        case SHMEM_HUGE_ALWAYS:
 532                return "always";
 533        case SHMEM_HUGE_WITHIN_SIZE:
 534                return "within_size";
 535        case SHMEM_HUGE_ADVISE:
 536                return "advise";
 537        case SHMEM_HUGE_DENY:
 538                return "deny";
 539        case SHMEM_HUGE_FORCE:
 540                return "force";
 541        default:
 542                VM_BUG_ON(1);
 543                return "bad_val";
 544        }
 545}
 546#endif
 547
 548static unsigned long shmem_unused_huge_shrink(struct shmem_sb_info *sbinfo,
 549                struct shrink_control *sc, unsigned long nr_to_split)
 550{
 551        LIST_HEAD(list), *pos, *next;
 552        LIST_HEAD(to_remove);
 553        struct inode *inode;
 554        struct shmem_inode_info *info;
 555        struct page *page;
 556        unsigned long batch = sc ? sc->nr_to_scan : 128;
 557        int removed = 0, split = 0;
 558
 559        if (list_empty(&sbinfo->shrinklist))
 560                return SHRINK_STOP;
 561
 562        spin_lock(&sbinfo->shrinklist_lock);
 563        list_for_each_safe(pos, next, &sbinfo->shrinklist) {
 564                info = list_entry(pos, struct shmem_inode_info, shrinklist);
 565
 566                /* pin the inode */
 567                inode = igrab(&info->vfs_inode);
 568
 569                /* inode is about to be evicted */
 570                if (!inode) {
 571                        list_del_init(&info->shrinklist);
 572                        removed++;
 573                        goto next;
 574                }
 575
 576                /* Check if there's anything to gain */
 577                if (round_up(inode->i_size, PAGE_SIZE) ==
 578                                round_up(inode->i_size, HPAGE_PMD_SIZE)) {
 579                        list_move(&info->shrinklist, &to_remove);
 580                        removed++;
 581                        goto next;
 582                }
 583
 584                list_move(&info->shrinklist, &list);
 585next:
 586                if (!--batch)
 587                        break;
 588        }
 589        spin_unlock(&sbinfo->shrinklist_lock);
 590
 591        list_for_each_safe(pos, next, &to_remove) {
 592                info = list_entry(pos, struct shmem_inode_info, shrinklist);
 593                inode = &info->vfs_inode;
 594                list_del_init(&info->shrinklist);
 595                iput(inode);
 596        }
 597
 598        list_for_each_safe(pos, next, &list) {
 599                int ret;
 600
 601                info = list_entry(pos, struct shmem_inode_info, shrinklist);
 602                inode = &info->vfs_inode;
 603
 604                if (nr_to_split && split >= nr_to_split)
 605                        goto leave;
 606
 607                page = find_get_page(inode->i_mapping,
 608                                (inode->i_size & HPAGE_PMD_MASK) >> PAGE_SHIFT);
 609                if (!page)
 610                        goto drop;
 611
 612                /* No huge page at the end of the file: nothing to split */
 613                if (!PageTransHuge(page)) {
 614                        put_page(page);
 615                        goto drop;
 616                }
 617
 618                /*
 619                 * Leave the inode on the list if we failed to lock
 620                 * the page at this time.
 621                 *
 622                 * Waiting for the lock may lead to deadlock in the
 623                 * reclaim path.
 624                 */
 625                if (!trylock_page(page)) {
 626                        put_page(page);
 627                        goto leave;
 628                }
 629
 630                ret = split_huge_page(page);
 631                unlock_page(page);
 632                put_page(page);
 633
 634                /* If split failed leave the inode on the list */
 635                if (ret)
 636                        goto leave;
 637
 638                split++;
 639drop:
 640                list_del_init(&info->shrinklist);
 641                removed++;
 642leave:
 643                iput(inode);
 644        }
 645
 646        spin_lock(&sbinfo->shrinklist_lock);
 647        list_splice_tail(&list, &sbinfo->shrinklist);
 648        sbinfo->shrinklist_len -= removed;
 649        spin_unlock(&sbinfo->shrinklist_lock);
 650
 651        return split;
 652}
 653
 654static long shmem_unused_huge_scan(struct super_block *sb,
 655                struct shrink_control *sc)
 656{
 657        struct shmem_sb_info *sbinfo = SHMEM_SB(sb);
 658
 659        if (!READ_ONCE(sbinfo->shrinklist_len))
 660                return SHRINK_STOP;
 661
 662        return shmem_unused_huge_shrink(sbinfo, sc, 0);
 663}
 664
 665static long shmem_unused_huge_count(struct super_block *sb,
 666                struct shrink_control *sc)
 667{
 668        struct shmem_sb_info *sbinfo = SHMEM_SB(sb);
 669        return READ_ONCE(sbinfo->shrinklist_len);
 670}
 671#else /* !CONFIG_TRANSPARENT_HUGEPAGE */
 672
 673#define shmem_huge SHMEM_HUGE_DENY
 674
 675bool shmem_is_huge(struct vm_area_struct *vma,
 676                   struct inode *inode, pgoff_t index)
 677{
 678        return false;
 679}
 680
 681static unsigned long shmem_unused_huge_shrink(struct shmem_sb_info *sbinfo,
 682                struct shrink_control *sc, unsigned long nr_to_split)
 683{
 684        return 0;
 685}
 686#endif /* CONFIG_TRANSPARENT_HUGEPAGE */
 687
 688/*
 689 * Like add_to_page_cache_locked, but error if expected item has gone.
 690 */
 691static int shmem_add_to_page_cache(struct page *page,
 692                                   struct address_space *mapping,
 693                                   pgoff_t index, void *expected, gfp_t gfp,
 694                                   struct mm_struct *charge_mm)
 695{
 696        XA_STATE_ORDER(xas, &mapping->i_pages, index, compound_order(page));
 697        unsigned long i = 0;
 698        unsigned long nr = compound_nr(page);
 699        int error;
 700
 701        VM_BUG_ON_PAGE(PageTail(page), page);
 702        VM_BUG_ON_PAGE(index != round_down(index, nr), page);
 703        VM_BUG_ON_PAGE(!PageLocked(page), page);
 704        VM_BUG_ON_PAGE(!PageSwapBacked(page), page);
 705        VM_BUG_ON(expected && PageTransHuge(page));
 706
 707        page_ref_add(page, nr);
 708        page->mapping = mapping;
 709        page->index = index;
 710
 711        if (!PageSwapCache(page)) {
 712                error = mem_cgroup_charge(page_folio(page), charge_mm, gfp);
 713                if (error) {
 714                        if (PageTransHuge(page)) {
 715                                count_vm_event(THP_FILE_FALLBACK);
 716                                count_vm_event(THP_FILE_FALLBACK_CHARGE);
 717                        }
 718                        goto error;
 719                }
 720        }
 721        cgroup_throttle_swaprate(page, gfp);
 722
 723        do {
 724                void *entry;
 725                xas_lock_irq(&xas);
 726                entry = xas_find_conflict(&xas);
 727                if (entry != expected)
 728                        xas_set_err(&xas, -EEXIST);
 729                xas_create_range(&xas);
 730                if (xas_error(&xas))
 731                        goto unlock;
 732next:
 733                xas_store(&xas, page);
 734                if (++i < nr) {
 735                        xas_next(&xas);
 736                        goto next;
 737                }
 738                if (PageTransHuge(page)) {
 739                        count_vm_event(THP_FILE_ALLOC);
 740                        __mod_lruvec_page_state(page, NR_SHMEM_THPS, nr);
 741                }
 742                mapping->nrpages += nr;
 743                __mod_lruvec_page_state(page, NR_FILE_PAGES, nr);
 744                __mod_lruvec_page_state(page, NR_SHMEM, nr);
 745unlock:
 746                xas_unlock_irq(&xas);
 747        } while (xas_nomem(&xas, gfp));
 748
 749        if (xas_error(&xas)) {
 750                error = xas_error(&xas);
 751                goto error;
 752        }
 753
 754        return 0;
 755error:
 756        page->mapping = NULL;
 757        page_ref_sub(page, nr);
 758        return error;
 759}
 760
 761/*
 762 * Like delete_from_page_cache, but substitutes swap for page.
 763 */
 764static void shmem_delete_from_page_cache(struct page *page, void *radswap)
 765{
 766        struct address_space *mapping = page->mapping;
 767        int error;
 768
 769        VM_BUG_ON_PAGE(PageCompound(page), page);
 770
 771        xa_lock_irq(&mapping->i_pages);
 772        error = shmem_replace_entry(mapping, page->index, page, radswap);
 773        page->mapping = NULL;
 774        mapping->nrpages--;
 775        __dec_lruvec_page_state(page, NR_FILE_PAGES);
 776        __dec_lruvec_page_state(page, NR_SHMEM);
 777        xa_unlock_irq(&mapping->i_pages);
 778        put_page(page);
 779        BUG_ON(error);
 780}
 781
 782/*
 783 * Remove swap entry from page cache, free the swap and its page cache.
 784 */
 785static int shmem_free_swap(struct address_space *mapping,
 786                           pgoff_t index, void *radswap)
 787{
 788        void *old;
 789
 790        old = xa_cmpxchg_irq(&mapping->i_pages, index, radswap, NULL, 0);
 791        if (old != radswap)
 792                return -ENOENT;
 793        free_swap_and_cache(radix_to_swp_entry(radswap));
 794        return 0;
 795}
 796
 797/*
 798 * Determine (in bytes) how many of the shmem object's pages mapped by the
 799 * given offsets are swapped out.
 800 *
 801 * This is safe to call without i_rwsem or the i_pages lock thanks to RCU,
 802 * as long as the inode doesn't go away and racy results are not a problem.
 803 */
 804unsigned long shmem_partial_swap_usage(struct address_space *mapping,
 805                                                pgoff_t start, pgoff_t end)
 806{
 807        XA_STATE(xas, &mapping->i_pages, start);
 808        struct page *page;
 809        unsigned long swapped = 0;
 810
 811        rcu_read_lock();
 812        xas_for_each(&xas, page, end - 1) {
 813                if (xas_retry(&xas, page))
 814                        continue;
 815                if (xa_is_value(page))
 816                        swapped++;
 817
 818                if (need_resched()) {
 819                        xas_pause(&xas);
 820                        cond_resched_rcu();
 821                }
 822        }
 823
 824        rcu_read_unlock();
 825
 826        return swapped << PAGE_SHIFT;
 827}
 828
 829/*
 830 * Determine (in bytes) how many of the shmem object's pages mapped by the
 831 * given vma is swapped out.
 832 *
 833 * This is safe to call without i_rwsem or the i_pages lock thanks to RCU,
 834 * as long as the inode doesn't go away and racy results are not a problem.
 835 */
 836unsigned long shmem_swap_usage(struct vm_area_struct *vma)
 837{
 838        struct inode *inode = file_inode(vma->vm_file);
 839        struct shmem_inode_info *info = SHMEM_I(inode);
 840        struct address_space *mapping = inode->i_mapping;
 841        unsigned long swapped;
 842
 843        /* Be careful as we don't hold info->lock */
 844        swapped = READ_ONCE(info->swapped);
 845
 846        /*
 847         * The easier cases are when the shmem object has nothing in swap, or
 848         * the vma maps it whole. Then we can simply use the stats that we
 849         * already track.
 850         */
 851        if (!swapped)
 852                return 0;
 853
 854        if (!vma->vm_pgoff && vma->vm_end - vma->vm_start >= inode->i_size)
 855                return swapped << PAGE_SHIFT;
 856
 857        /* Here comes the more involved part */
 858        return shmem_partial_swap_usage(mapping, vma->vm_pgoff,
 859                                        vma->vm_pgoff + vma_pages(vma));
 860}
 861
 862/*
 863 * SysV IPC SHM_UNLOCK restore Unevictable pages to their evictable lists.
 864 */
 865void shmem_unlock_mapping(struct address_space *mapping)
 866{
 867        struct pagevec pvec;
 868        pgoff_t index = 0;
 869
 870        pagevec_init(&pvec);
 871        /*
 872         * Minor point, but we might as well stop if someone else SHM_LOCKs it.
 873         */
 874        while (!mapping_unevictable(mapping)) {
 875                if (!pagevec_lookup(&pvec, mapping, &index))
 876                        break;
 877                check_move_unevictable_pages(&pvec);
 878                pagevec_release(&pvec);
 879                cond_resched();
 880        }
 881}
 882
 883/*
 884 * Check whether a hole-punch or truncation needs to split a huge page,
 885 * returning true if no split was required, or the split has been successful.
 886 *
 887 * Eviction (or truncation to 0 size) should never need to split a huge page;
 888 * but in rare cases might do so, if shmem_undo_range() failed to trylock on
 889 * head, and then succeeded to trylock on tail.
 890 *
 891 * A split can only succeed when there are no additional references on the
 892 * huge page: so the split below relies upon find_get_entries() having stopped
 893 * when it found a subpage of the huge page, without getting further references.
 894 */
 895static bool shmem_punch_compound(struct page *page, pgoff_t start, pgoff_t end)
 896{
 897        if (!PageTransCompound(page))
 898                return true;
 899
 900        /* Just proceed to delete a huge page wholly within the range punched */
 901        if (PageHead(page) &&
 902            page->index >= start && page->index + HPAGE_PMD_NR <= end)
 903                return true;
 904
 905        /* Try to split huge page, so we can truly punch the hole or truncate */
 906        return split_huge_page(page) >= 0;
 907}
 908
 909/*
 910 * Remove range of pages and swap entries from page cache, and free them.
 911 * If !unfalloc, truncate or punch hole; if unfalloc, undo failed fallocate.
 912 */
 913static void shmem_undo_range(struct inode *inode, loff_t lstart, loff_t lend,
 914                                                                 bool unfalloc)
 915{
 916        struct address_space *mapping = inode->i_mapping;
 917        struct shmem_inode_info *info = SHMEM_I(inode);
 918        pgoff_t start = (lstart + PAGE_SIZE - 1) >> PAGE_SHIFT;
 919        pgoff_t end = (lend + 1) >> PAGE_SHIFT;
 920        unsigned int partial_start = lstart & (PAGE_SIZE - 1);
 921        unsigned int partial_end = (lend + 1) & (PAGE_SIZE - 1);
 922        struct pagevec pvec;
 923        pgoff_t indices[PAGEVEC_SIZE];
 924        long nr_swaps_freed = 0;
 925        pgoff_t index;
 926        int i;
 927
 928        if (lend == -1)
 929                end = -1;       /* unsigned, so actually very big */
 930
 931        if (info->fallocend > start && info->fallocend <= end && !unfalloc)
 932                info->fallocend = start;
 933
 934        pagevec_init(&pvec);
 935        index = start;
 936        while (index < end && find_lock_entries(mapping, index, end - 1,
 937                        &pvec, indices)) {
 938                for (i = 0; i < pagevec_count(&pvec); i++) {
 939                        struct page *page = pvec.pages[i];
 940
 941                        index = indices[i];
 942
 943                        if (xa_is_value(page)) {
 944                                if (unfalloc)
 945                                        continue;
 946                                nr_swaps_freed += !shmem_free_swap(mapping,
 947                                                                index, page);
 948                                continue;
 949                        }
 950                        index += thp_nr_pages(page) - 1;
 951
 952                        if (!unfalloc || !PageUptodate(page))
 953                                truncate_inode_page(mapping, page);
 954                        unlock_page(page);
 955                }
 956                pagevec_remove_exceptionals(&pvec);
 957                pagevec_release(&pvec);
 958                cond_resched();
 959                index++;
 960        }
 961
 962        if (partial_start) {
 963                struct page *page = NULL;
 964                shmem_getpage(inode, start - 1, &page, SGP_READ);
 965                if (page) {
 966                        unsigned int top = PAGE_SIZE;
 967                        if (start > end) {
 968                                top = partial_end;
 969                                partial_end = 0;
 970                        }
 971                        zero_user_segment(page, partial_start, top);
 972                        set_page_dirty(page);
 973                        unlock_page(page);
 974                        put_page(page);
 975                }
 976        }
 977        if (partial_end) {
 978                struct page *page = NULL;
 979                shmem_getpage(inode, end, &page, SGP_READ);
 980                if (page) {
 981                        zero_user_segment(page, 0, partial_end);
 982                        set_page_dirty(page);
 983                        unlock_page(page);
 984                        put_page(page);
 985                }
 986        }
 987        if (start >= end)
 988                return;
 989
 990        index = start;
 991        while (index < end) {
 992                cond_resched();
 993
 994                if (!find_get_entries(mapping, index, end - 1, &pvec,
 995                                indices)) {
 996                        /* If all gone or hole-punch or unfalloc, we're done */
 997                        if (index == start || end != -1)
 998                                break;
 999                        /* But if truncating, restart to make sure all gone */
1000                        index = start;
1001                        continue;
1002                }
1003                for (i = 0; i < pagevec_count(&pvec); i++) {
1004                        struct page *page = pvec.pages[i];
1005
1006                        index = indices[i];
1007                        if (xa_is_value(page)) {
1008                                if (unfalloc)
1009                                        continue;
1010                                if (shmem_free_swap(mapping, index, page)) {
1011                                        /* Swap was replaced by page: retry */
1012                                        index--;
1013                                        break;
1014                                }
1015                                nr_swaps_freed++;
1016                                continue;
1017                        }
1018
1019                        lock_page(page);
1020
1021                        if (!unfalloc || !PageUptodate(page)) {
1022                                if (page_mapping(page) != mapping) {
1023                                        /* Page was replaced by swap: retry */
1024                                        unlock_page(page);
1025                                        index--;
1026                                        break;
1027                                }
1028                                VM_BUG_ON_PAGE(PageWriteback(page), page);
1029                                if (shmem_punch_compound(page, start, end))
1030                                        truncate_inode_page(mapping, page);
1031                                else if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) {
1032                                        /* Wipe the page and don't get stuck */
1033                                        clear_highpage(page);
1034                                        flush_dcache_page(page);
1035                                        set_page_dirty(page);
1036                                        if (index <
1037                                            round_up(start, HPAGE_PMD_NR))
1038                                                start = index + 1;
1039                                }
1040                        }
1041                        unlock_page(page);
1042                }
1043                pagevec_remove_exceptionals(&pvec);
1044                pagevec_release(&pvec);
1045                index++;
1046        }
1047
1048        spin_lock_irq(&info->lock);
1049        info->swapped -= nr_swaps_freed;
1050        shmem_recalc_inode(inode);
1051        spin_unlock_irq(&info->lock);
1052}
1053
1054void shmem_truncate_range(struct inode *inode, loff_t lstart, loff_t lend)
1055{
1056        shmem_undo_range(inode, lstart, lend, false);
1057        inode->i_ctime = inode->i_mtime = current_time(inode);
1058}
1059EXPORT_SYMBOL_GPL(shmem_truncate_range);
1060
1061static int shmem_getattr(struct user_namespace *mnt_userns,
1062                         const struct path *path, struct kstat *stat,
1063                         u32 request_mask, unsigned int query_flags)
1064{
1065        struct inode *inode = path->dentry->d_inode;
1066        struct shmem_inode_info *info = SHMEM_I(inode);
1067
1068        if (info->alloced - info->swapped != inode->i_mapping->nrpages) {
1069                spin_lock_irq(&info->lock);
1070                shmem_recalc_inode(inode);
1071                spin_unlock_irq(&info->lock);
1072        }
1073        generic_fillattr(&init_user_ns, inode, stat);
1074
1075        if (shmem_is_huge(NULL, inode, 0))
1076                stat->blksize = HPAGE_PMD_SIZE;
1077
1078        return 0;
1079}
1080
1081static int shmem_setattr(struct user_namespace *mnt_userns,
1082                         struct dentry *dentry, struct iattr *attr)
1083{
1084        struct inode *inode = d_inode(dentry);
1085        struct shmem_inode_info *info = SHMEM_I(inode);
1086        int error;
1087
1088        error = setattr_prepare(&init_user_ns, dentry, attr);
1089        if (error)
1090                return error;
1091
1092        if (S_ISREG(inode->i_mode) && (attr->ia_valid & ATTR_SIZE)) {
1093                loff_t oldsize = inode->i_size;
1094                loff_t newsize = attr->ia_size;
1095
1096                /* protected by i_rwsem */
1097                if ((newsize < oldsize && (info->seals & F_SEAL_SHRINK)) ||
1098                    (newsize > oldsize && (info->seals & F_SEAL_GROW)))
1099                        return -EPERM;
1100
1101                if (newsize != oldsize) {
1102                        error = shmem_reacct_size(SHMEM_I(inode)->flags,
1103                                        oldsize, newsize);
1104                        if (error)
1105                                return error;
1106                        i_size_write(inode, newsize);
1107                        inode->i_ctime = inode->i_mtime = current_time(inode);
1108                }
1109                if (newsize <= oldsize) {
1110                        loff_t holebegin = round_up(newsize, PAGE_SIZE);
1111                        if (oldsize > holebegin)
1112                                unmap_mapping_range(inode->i_mapping,
1113                                                        holebegin, 0, 1);
1114                        if (info->alloced)
1115                                shmem_truncate_range(inode,
1116                                                        newsize, (loff_t)-1);
1117                        /* unmap again to remove racily COWed private pages */
1118                        if (oldsize > holebegin)
1119                                unmap_mapping_range(inode->i_mapping,
1120                                                        holebegin, 0, 1);
1121                }
1122        }
1123
1124        setattr_copy(&init_user_ns, inode, attr);
1125        if (attr->ia_valid & ATTR_MODE)
1126                error = posix_acl_chmod(&init_user_ns, inode, inode->i_mode);
1127        return error;
1128}
1129
1130static void shmem_evict_inode(struct inode *inode)
1131{
1132        struct shmem_inode_info *info = SHMEM_I(inode);
1133        struct shmem_sb_info *sbinfo = SHMEM_SB(inode->i_sb);
1134
1135        if (shmem_mapping(inode->i_mapping)) {
1136                shmem_unacct_size(info->flags, inode->i_size);
1137                inode->i_size = 0;
1138                shmem_truncate_range(inode, 0, (loff_t)-1);
1139                if (!list_empty(&info->shrinklist)) {
1140                        spin_lock(&sbinfo->shrinklist_lock);
1141                        if (!list_empty(&info->shrinklist)) {
1142                                list_del_init(&info->shrinklist);
1143                                sbinfo->shrinklist_len--;
1144                        }
1145                        spin_unlock(&sbinfo->shrinklist_lock);
1146                }
1147                while (!list_empty(&info->swaplist)) {
1148                        /* Wait while shmem_unuse() is scanning this inode... */
1149                        wait_var_event(&info->stop_eviction,
1150                                       !atomic_read(&info->stop_eviction));
1151                        mutex_lock(&shmem_swaplist_mutex);
1152                        /* ...but beware of the race if we peeked too early */
1153                        if (!atomic_read(&info->stop_eviction))
1154                                list_del_init(&info->swaplist);
1155                        mutex_unlock(&shmem_swaplist_mutex);
1156                }
1157        }
1158
1159        simple_xattrs_free(&info->xattrs);
1160        WARN_ON(inode->i_blocks);
1161        shmem_free_inode(inode->i_sb);
1162        clear_inode(inode);
1163}
1164
1165static int shmem_find_swap_entries(struct address_space *mapping,
1166                                   pgoff_t start, unsigned int nr_entries,
1167                                   struct page **entries, pgoff_t *indices,
1168                                   unsigned int type, bool frontswap)
1169{
1170        XA_STATE(xas, &mapping->i_pages, start);
1171        struct page *page;
1172        swp_entry_t entry;
1173        unsigned int ret = 0;
1174
1175        if (!nr_entries)
1176                return 0;
1177
1178        rcu_read_lock();
1179        xas_for_each(&xas, page, ULONG_MAX) {
1180                if (xas_retry(&xas, page))
1181                        continue;
1182
1183                if (!xa_is_value(page))
1184                        continue;
1185
1186                entry = radix_to_swp_entry(page);
1187                if (swp_type(entry) != type)
1188                        continue;
1189                if (frontswap &&
1190                    !frontswap_test(swap_info[type], swp_offset(entry)))
1191                        continue;
1192
1193                indices[ret] = xas.xa_index;
1194                entries[ret] = page;
1195
1196                if (need_resched()) {
1197                        xas_pause(&xas);
1198                        cond_resched_rcu();
1199                }
1200                if (++ret == nr_entries)
1201                        break;
1202        }
1203        rcu_read_unlock();
1204
1205        return ret;
1206}
1207
1208/*
1209 * Move the swapped pages for an inode to page cache. Returns the count
1210 * of pages swapped in, or the error in case of failure.
1211 */
1212static int shmem_unuse_swap_entries(struct inode *inode, struct pagevec pvec,
1213                                    pgoff_t *indices)
1214{
1215        int i = 0;
1216        int ret = 0;
1217        int error = 0;
1218        struct address_space *mapping = inode->i_mapping;
1219
1220        for (i = 0; i < pvec.nr; i++) {
1221                struct page *page = pvec.pages[i];
1222
1223                if (!xa_is_value(page))
1224                        continue;
1225                error = shmem_swapin_page(inode, indices[i],
1226                                          &page, SGP_CACHE,
1227                                          mapping_gfp_mask(mapping),
1228                                          NULL, NULL);
1229                if (error == 0) {
1230                        unlock_page(page);
1231                        put_page(page);
1232                        ret++;
1233                }
1234                if (error == -ENOMEM)
1235                        break;
1236                error = 0;
1237        }
1238        return error ? error : ret;
1239}
1240
1241/*
1242 * If swap found in inode, free it and move page from swapcache to filecache.
1243 */
1244static int shmem_unuse_inode(struct inode *inode, unsigned int type,
1245                             bool frontswap, unsigned long *fs_pages_to_unuse)
1246{
1247        struct address_space *mapping = inode->i_mapping;
1248        pgoff_t start = 0;
1249        struct pagevec pvec;
1250        pgoff_t indices[PAGEVEC_SIZE];
1251        bool frontswap_partial = (frontswap && *fs_pages_to_unuse > 0);
1252        int ret = 0;
1253
1254        pagevec_init(&pvec);
1255        do {
1256                unsigned int nr_entries = PAGEVEC_SIZE;
1257
1258                if (frontswap_partial && *fs_pages_to_unuse < PAGEVEC_SIZE)
1259                        nr_entries = *fs_pages_to_unuse;
1260
1261                pvec.nr = shmem_find_swap_entries(mapping, start, nr_entries,
1262                                                  pvec.pages, indices,
1263                                                  type, frontswap);
1264                if (pvec.nr == 0) {
1265                        ret = 0;
1266                        break;
1267                }
1268
1269                ret = shmem_unuse_swap_entries(inode, pvec, indices);
1270                if (ret < 0)
1271                        break;
1272
1273                if (frontswap_partial) {
1274                        *fs_pages_to_unuse -= ret;
1275                        if (*fs_pages_to_unuse == 0) {
1276                                ret = FRONTSWAP_PAGES_UNUSED;
1277                                break;
1278                        }
1279                }
1280
1281                start = indices[pvec.nr - 1];
1282        } while (true);
1283
1284        return ret;
1285}
1286
1287/*
1288 * Read all the shared memory data that resides in the swap
1289 * device 'type' back into memory, so the swap device can be
1290 * unused.
1291 */
1292int shmem_unuse(unsigned int type, bool frontswap,
1293                unsigned long *fs_pages_to_unuse)
1294{
1295        struct shmem_inode_info *info, *next;
1296        int error = 0;
1297
1298        if (list_empty(&shmem_swaplist))
1299                return 0;
1300
1301        mutex_lock(&shmem_swaplist_mutex);
1302        list_for_each_entry_safe(info, next, &shmem_swaplist, swaplist) {
1303                if (!info->swapped) {
1304                        list_del_init(&info->swaplist);
1305                        continue;
1306                }
1307                /*
1308                 * Drop the swaplist mutex while searching the inode for swap;
1309                 * but before doing so, make sure shmem_evict_inode() will not
1310                 * remove placeholder inode from swaplist, nor let it be freed
1311                 * (igrab() would protect from unlink, but not from unmount).
1312                 */
1313                atomic_inc(&info->stop_eviction);
1314                mutex_unlock(&shmem_swaplist_mutex);
1315
1316                error = shmem_unuse_inode(&info->vfs_inode, type, frontswap,
1317                                          fs_pages_to_unuse);
1318                cond_resched();
1319
1320                mutex_lock(&shmem_swaplist_mutex);
1321                next = list_next_entry(info, swaplist);
1322                if (!info->swapped)
1323                        list_del_init(&info->swaplist);
1324                if (atomic_dec_and_test(&info->stop_eviction))
1325                        wake_up_var(&info->stop_eviction);
1326                if (error)
1327                        break;
1328        }
1329        mutex_unlock(&shmem_swaplist_mutex);
1330
1331        return error;
1332}
1333
1334/*
1335 * Move the page from the page cache to the swap cache.
1336 */
1337static int shmem_writepage(struct page *page, struct writeback_control *wbc)
1338{
1339        struct shmem_inode_info *info;
1340        struct address_space *mapping;
1341        struct inode *inode;
1342        swp_entry_t swap;
1343        pgoff_t index;
1344
1345        /*
1346         * If /sys/kernel/mm/transparent_hugepage/shmem_enabled is "always" or
1347         * "force", drivers/gpu/drm/i915/gem/i915_gem_shmem.c gets huge pages,
1348         * and its shmem_writeback() needs them to be split when swapping.
1349         */
1350        if (PageTransCompound(page)) {
1351                /* Ensure the subpages are still dirty */
1352                SetPageDirty(page);
1353                if (split_huge_page(page) < 0)
1354                        goto redirty;
1355                ClearPageDirty(page);
1356        }
1357
1358        BUG_ON(!PageLocked(page));
1359        mapping = page->mapping;
1360        index = page->index;
1361        inode = mapping->host;
1362        info = SHMEM_I(inode);
1363        if (info->flags & VM_LOCKED)
1364                goto redirty;
1365        if (!total_swap_pages)
1366                goto redirty;
1367
1368        /*
1369         * Our capabilities prevent regular writeback or sync from ever calling
1370         * shmem_writepage; but a stacking filesystem might use ->writepage of
1371         * its underlying filesystem, in which case tmpfs should write out to
1372         * swap only in response to memory pressure, and not for the writeback
1373         * threads or sync.
1374         */
1375        if (!wbc->for_reclaim) {
1376                WARN_ON_ONCE(1);        /* Still happens? Tell us about it! */
1377                goto redirty;
1378        }
1379
1380        /*
1381         * This is somewhat ridiculous, but without plumbing a SWAP_MAP_FALLOC
1382         * value into swapfile.c, the only way we can correctly account for a
1383         * fallocated page arriving here is now to initialize it and write it.
1384         *
1385         * That's okay for a page already fallocated earlier, but if we have
1386         * not yet completed the fallocation, then (a) we want to keep track
1387         * of this page in case we have to undo it, and (b) it may not be a
1388         * good idea to continue anyway, once we're pushing into swap.  So
1389         * reactivate the page, and let shmem_fallocate() quit when too many.
1390         */
1391        if (!PageUptodate(page)) {
1392                if (inode->i_private) {
1393                        struct shmem_falloc *shmem_falloc;
1394                        spin_lock(&inode->i_lock);
1395                        shmem_falloc = inode->i_private;
1396                        if (shmem_falloc &&
1397                            !shmem_falloc->waitq &&
1398                            index >= shmem_falloc->start &&
1399                            index < shmem_falloc->next)
1400                                shmem_falloc->nr_unswapped++;
1401                        else
1402                                shmem_falloc = NULL;
1403                        spin_unlock(&inode->i_lock);
1404                        if (shmem_falloc)
1405                                goto redirty;
1406                }
1407                clear_highpage(page);
1408                flush_dcache_page(page);
1409                SetPageUptodate(page);
1410        }
1411
1412        swap = get_swap_page(page);
1413        if (!swap.val)
1414                goto redirty;
1415
1416        /*
1417         * Add inode to shmem_unuse()'s list of swapped-out inodes,
1418         * if it's not already there.  Do it now before the page is
1419         * moved to swap cache, when its pagelock no longer protects
1420         * the inode from eviction.  But don't unlock the mutex until
1421         * we've incremented swapped, because shmem_unuse_inode() will
1422         * prune a !swapped inode from the swaplist under this mutex.
1423         */
1424        mutex_lock(&shmem_swaplist_mutex);
1425        if (list_empty(&info->swaplist))
1426                list_add(&info->swaplist, &shmem_swaplist);
1427
1428        if (add_to_swap_cache(page, swap,
1429                        __GFP_HIGH | __GFP_NOMEMALLOC | __GFP_NOWARN,
1430                        NULL) == 0) {
1431                spin_lock_irq(&info->lock);
1432                shmem_recalc_inode(inode);
1433                info->swapped++;
1434                spin_unlock_irq(&info->lock);
1435
1436                swap_shmem_alloc(swap);
1437                shmem_delete_from_page_cache(page, swp_to_radix_entry(swap));
1438
1439                mutex_unlock(&shmem_swaplist_mutex);
1440                BUG_ON(page_mapped(page));
1441                swap_writepage(page, wbc);
1442                return 0;
1443        }
1444
1445        mutex_unlock(&shmem_swaplist_mutex);
1446        put_swap_page(page, swap);
1447redirty:
1448        set_page_dirty(page);
1449        if (wbc->for_reclaim)
1450                return AOP_WRITEPAGE_ACTIVATE;  /* Return with page locked */
1451        unlock_page(page);
1452        return 0;
1453}
1454
1455#if defined(CONFIG_NUMA) && defined(CONFIG_TMPFS)
1456static void shmem_show_mpol(struct seq_file *seq, struct mempolicy *mpol)
1457{
1458        char buffer[64];
1459
1460        if (!mpol || mpol->mode == MPOL_DEFAULT)
1461                return;         /* show nothing */
1462
1463        mpol_to_str(buffer, sizeof(buffer), mpol);
1464
1465        seq_printf(seq, ",mpol=%s", buffer);
1466}
1467
1468static struct mempolicy *shmem_get_sbmpol(struct shmem_sb_info *sbinfo)
1469{
1470        struct mempolicy *mpol = NULL;
1471        if (sbinfo->mpol) {
1472                raw_spin_lock(&sbinfo->stat_lock);      /* prevent replace/use races */
1473                mpol = sbinfo->mpol;
1474                mpol_get(mpol);
1475                raw_spin_unlock(&sbinfo->stat_lock);
1476        }
1477        return mpol;
1478}
1479#else /* !CONFIG_NUMA || !CONFIG_TMPFS */
1480static inline void shmem_show_mpol(struct seq_file *seq, struct mempolicy *mpol)
1481{
1482}
1483static inline struct mempolicy *shmem_get_sbmpol(struct shmem_sb_info *sbinfo)
1484{
1485        return NULL;
1486}
1487#endif /* CONFIG_NUMA && CONFIG_TMPFS */
1488#ifndef CONFIG_NUMA
1489#define vm_policy vm_private_data
1490#endif
1491
1492static void shmem_pseudo_vma_init(struct vm_area_struct *vma,
1493                struct shmem_inode_info *info, pgoff_t index)
1494{
1495        /* Create a pseudo vma that just contains the policy */
1496        vma_init(vma, NULL);
1497        /* Bias interleave by inode number to distribute better across nodes */
1498        vma->vm_pgoff = index + info->vfs_inode.i_ino;
1499        vma->vm_policy = mpol_shared_policy_lookup(&info->policy, index);
1500}
1501
1502static void shmem_pseudo_vma_destroy(struct vm_area_struct *vma)
1503{
1504        /* Drop reference taken by mpol_shared_policy_lookup() */
1505        mpol_cond_put(vma->vm_policy);
1506}
1507
1508static struct page *shmem_swapin(swp_entry_t swap, gfp_t gfp,
1509                        struct shmem_inode_info *info, pgoff_t index)
1510{
1511        struct vm_area_struct pvma;
1512        struct page *page;
1513        struct vm_fault vmf = {
1514                .vma = &pvma,
1515        };
1516
1517        shmem_pseudo_vma_init(&pvma, info, index);
1518        page = swap_cluster_readahead(swap, gfp, &vmf);
1519        shmem_pseudo_vma_destroy(&pvma);
1520
1521        return page;
1522}
1523
1524/*
1525 * Make sure huge_gfp is always more limited than limit_gfp.
1526 * Some of the flags set permissions, while others set limitations.
1527 */
1528static gfp_t limit_gfp_mask(gfp_t huge_gfp, gfp_t limit_gfp)
1529{
1530        gfp_t allowflags = __GFP_IO | __GFP_FS | __GFP_RECLAIM;
1531        gfp_t denyflags = __GFP_NOWARN | __GFP_NORETRY;
1532        gfp_t zoneflags = limit_gfp & GFP_ZONEMASK;
1533        gfp_t result = huge_gfp & ~(allowflags | GFP_ZONEMASK);
1534
1535        /* Allow allocations only from the originally specified zones. */
1536        result |= zoneflags;
1537
1538        /*
1539         * Minimize the result gfp by taking the union with the deny flags,
1540         * and the intersection of the allow flags.
1541         */
1542        result |= (limit_gfp & denyflags);
1543        result |= (huge_gfp & limit_gfp) & allowflags;
1544
1545        return result;
1546}
1547
1548static struct page *shmem_alloc_hugepage(gfp_t gfp,
1549                struct shmem_inode_info *info, pgoff_t index)
1550{
1551        struct vm_area_struct pvma;
1552        struct address_space *mapping = info->vfs_inode.i_mapping;
1553        pgoff_t hindex;
1554        struct page *page;
1555
1556        hindex = round_down(index, HPAGE_PMD_NR);
1557        if (xa_find(&mapping->i_pages, &hindex, hindex + HPAGE_PMD_NR - 1,
1558                                                                XA_PRESENT))
1559                return NULL;
1560
1561        shmem_pseudo_vma_init(&pvma, info, hindex);
1562        page = alloc_pages_vma(gfp, HPAGE_PMD_ORDER, &pvma, 0, numa_node_id(),
1563                               true);
1564        shmem_pseudo_vma_destroy(&pvma);
1565        if (page)
1566                prep_transhuge_page(page);
1567        else
1568                count_vm_event(THP_FILE_FALLBACK);
1569        return page;
1570}
1571
1572static struct page *shmem_alloc_page(gfp_t gfp,
1573                        struct shmem_inode_info *info, pgoff_t index)
1574{
1575        struct vm_area_struct pvma;
1576        struct page *page;
1577
1578        shmem_pseudo_vma_init(&pvma, info, index);
1579        page = alloc_page_vma(gfp, &pvma, 0);
1580        shmem_pseudo_vma_destroy(&pvma);
1581
1582        return page;
1583}
1584
1585static struct page *shmem_alloc_and_acct_page(gfp_t gfp,
1586                struct inode *inode,
1587                pgoff_t index, bool huge)
1588{
1589        struct shmem_inode_info *info = SHMEM_I(inode);
1590        struct page *page;
1591        int nr;
1592        int err = -ENOSPC;
1593
1594        if (!IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE))
1595                huge = false;
1596        nr = huge ? HPAGE_PMD_NR : 1;
1597
1598        if (!shmem_inode_acct_block(inode, nr))
1599                goto failed;
1600
1601        if (huge)
1602                page = shmem_alloc_hugepage(gfp, info, index);
1603        else
1604                page = shmem_alloc_page(gfp, info, index);
1605        if (page) {
1606                __SetPageLocked(page);
1607                __SetPageSwapBacked(page);
1608                return page;
1609        }
1610
1611        err = -ENOMEM;
1612        shmem_inode_unacct_blocks(inode, nr);
1613failed:
1614        return ERR_PTR(err);
1615}
1616
1617/*
1618 * When a page is moved from swapcache to shmem filecache (either by the
1619 * usual swapin of shmem_getpage_gfp(), or by the less common swapoff of
1620 * shmem_unuse_inode()), it may have been read in earlier from swap, in
1621 * ignorance of the mapping it belongs to.  If that mapping has special
1622 * constraints (like the gma500 GEM driver, which requires RAM below 4GB),
1623 * we may need to copy to a suitable page before moving to filecache.
1624 *
1625 * In a future release, this may well be extended to respect cpuset and
1626 * NUMA mempolicy, and applied also to anonymous pages in do_swap_page();
1627 * but for now it is a simple matter of zone.
1628 */
1629static bool shmem_should_replace_page(struct page *page, gfp_t gfp)
1630{
1631        return page_zonenum(page) > gfp_zone(gfp);
1632}
1633
1634static int shmem_replace_page(struct page **pagep, gfp_t gfp,
1635                                struct shmem_inode_info *info, pgoff_t index)
1636{
1637        struct page *oldpage, *newpage;
1638        struct folio *old, *new;
1639        struct address_space *swap_mapping;
1640        swp_entry_t entry;
1641        pgoff_t swap_index;
1642        int error;
1643
1644        oldpage = *pagep;
1645        entry.val = page_private(oldpage);
1646        swap_index = swp_offset(entry);
1647        swap_mapping = page_mapping(oldpage);
1648
1649        /*
1650         * We have arrived here because our zones are constrained, so don't
1651         * limit chance of success by further cpuset and node constraints.
1652         */
1653        gfp &= ~GFP_CONSTRAINT_MASK;
1654        newpage = shmem_alloc_page(gfp, info, index);
1655        if (!newpage)
1656                return -ENOMEM;
1657
1658        get_page(newpage);
1659        copy_highpage(newpage, oldpage);
1660        flush_dcache_page(newpage);
1661
1662        __SetPageLocked(newpage);
1663        __SetPageSwapBacked(newpage);
1664        SetPageUptodate(newpage);
1665        set_page_private(newpage, entry.val);
1666        SetPageSwapCache(newpage);
1667
1668        /*
1669         * Our caller will very soon move newpage out of swapcache, but it's
1670         * a nice clean interface for us to replace oldpage by newpage there.
1671         */
1672        xa_lock_irq(&swap_mapping->i_pages);
1673        error = shmem_replace_entry(swap_mapping, swap_index, oldpage, newpage);
1674        if (!error) {
1675                old = page_folio(oldpage);
1676                new = page_folio(newpage);
1677                mem_cgroup_migrate(old, new);
1678                __inc_lruvec_page_state(newpage, NR_FILE_PAGES);
1679                __dec_lruvec_page_state(oldpage, NR_FILE_PAGES);
1680        }
1681        xa_unlock_irq(&swap_mapping->i_pages);
1682
1683        if (unlikely(error)) {
1684                /*
1685                 * Is this possible?  I think not, now that our callers check
1686                 * both PageSwapCache and page_private after getting page lock;
1687                 * but be defensive.  Reverse old to newpage for clear and free.
1688                 */
1689                oldpage = newpage;
1690        } else {
1691                lru_cache_add(newpage);
1692                *pagep = newpage;
1693        }
1694
1695        ClearPageSwapCache(oldpage);
1696        set_page_private(oldpage, 0);
1697
1698        unlock_page(oldpage);
1699        put_page(oldpage);
1700        put_page(oldpage);
1701        return error;
1702}
1703
1704/*
1705 * Swap in the page pointed to by *pagep.
1706 * Caller has to make sure that *pagep contains a valid swapped page.
1707 * Returns 0 and the page in pagep if success. On failure, returns the
1708 * error code and NULL in *pagep.
1709 */
1710static int shmem_swapin_page(struct inode *inode, pgoff_t index,
1711                             struct page **pagep, enum sgp_type sgp,
1712                             gfp_t gfp, struct vm_area_struct *vma,
1713                             vm_fault_t *fault_type)
1714{
1715        struct address_space *mapping = inode->i_mapping;
1716        struct shmem_inode_info *info = SHMEM_I(inode);
1717        struct mm_struct *charge_mm = vma ? vma->vm_mm : NULL;
1718        struct page *page;
1719        swp_entry_t swap;
1720        int error;
1721
1722        VM_BUG_ON(!*pagep || !xa_is_value(*pagep));
1723        swap = radix_to_swp_entry(*pagep);
1724        *pagep = NULL;
1725
1726        /* Look it up and read it in.. */
1727        page = lookup_swap_cache(swap, NULL, 0);
1728        if (!page) {
1729                /* Or update major stats only when swapin succeeds?? */
1730                if (fault_type) {
1731                        *fault_type |= VM_FAULT_MAJOR;
1732                        count_vm_event(PGMAJFAULT);
1733                        count_memcg_event_mm(charge_mm, PGMAJFAULT);
1734                }
1735                /* Here we actually start the io */
1736                page = shmem_swapin(swap, gfp, info, index);
1737                if (!page) {
1738                        error = -ENOMEM;
1739                        goto failed;
1740                }
1741        }
1742
1743        /* We have to do this with page locked to prevent races */
1744        lock_page(page);
1745        if (!PageSwapCache(page) || page_private(page) != swap.val ||
1746            !shmem_confirm_swap(mapping, index, swap)) {
1747                error = -EEXIST;
1748                goto unlock;
1749        }
1750        if (!PageUptodate(page)) {
1751                error = -EIO;
1752                goto failed;
1753        }
1754        wait_on_page_writeback(page);
1755
1756        /*
1757         * Some architectures may have to restore extra metadata to the
1758         * physical page after reading from swap.
1759         */
1760        arch_swap_restore(swap, page);
1761
1762        if (shmem_should_replace_page(page, gfp)) {
1763                error = shmem_replace_page(&page, gfp, info, index);
1764                if (error)
1765                        goto failed;
1766        }
1767
1768        error = shmem_add_to_page_cache(page, mapping, index,
1769                                        swp_to_radix_entry(swap), gfp,
1770                                        charge_mm);
1771        if (error)
1772                goto failed;
1773
1774        spin_lock_irq(&info->lock);
1775        info->swapped--;
1776        shmem_recalc_inode(inode);
1777        spin_unlock_irq(&info->lock);
1778
1779        if (sgp == SGP_WRITE)
1780                mark_page_accessed(page);
1781
1782        delete_from_swap_cache(page);
1783        set_page_dirty(page);
1784        swap_free(swap);
1785
1786        *pagep = page;
1787        return 0;
1788failed:
1789        if (!shmem_confirm_swap(mapping, index, swap))
1790                error = -EEXIST;
1791unlock:
1792        if (page) {
1793                unlock_page(page);
1794                put_page(page);
1795        }
1796
1797        return error;
1798}
1799
1800/*
1801 * shmem_getpage_gfp - find page in cache, or get from swap, or allocate
1802 *
1803 * If we allocate a new one we do not mark it dirty. That's up to the
1804 * vm. If we swap it in we mark it dirty since we also free the swap
1805 * entry since a page cannot live in both the swap and page cache.
1806 *
1807 * vma, vmf, and fault_type are only supplied by shmem_fault:
1808 * otherwise they are NULL.
1809 */
1810static int shmem_getpage_gfp(struct inode *inode, pgoff_t index,
1811        struct page **pagep, enum sgp_type sgp, gfp_t gfp,
1812        struct vm_area_struct *vma, struct vm_fault *vmf,
1813                        vm_fault_t *fault_type)
1814{
1815        struct address_space *mapping = inode->i_mapping;
1816        struct shmem_inode_info *info = SHMEM_I(inode);
1817        struct shmem_sb_info *sbinfo;
1818        struct mm_struct *charge_mm;
1819        struct page *page;
1820        pgoff_t hindex = index;
1821        gfp_t huge_gfp;
1822        int error;
1823        int once = 0;
1824        int alloced = 0;
1825
1826        if (index > (MAX_LFS_FILESIZE >> PAGE_SHIFT))
1827                return -EFBIG;
1828repeat:
1829        if (sgp <= SGP_CACHE &&
1830            ((loff_t)index << PAGE_SHIFT) >= i_size_read(inode)) {
1831                return -EINVAL;
1832        }
1833
1834        sbinfo = SHMEM_SB(inode->i_sb);
1835        charge_mm = vma ? vma->vm_mm : NULL;
1836
1837        page = pagecache_get_page(mapping, index,
1838                                        FGP_ENTRY | FGP_HEAD | FGP_LOCK, 0);
1839
1840        if (page && vma && userfaultfd_minor(vma)) {
1841                if (!xa_is_value(page)) {
1842                        unlock_page(page);
1843                        put_page(page);
1844                }
1845                *fault_type = handle_userfault(vmf, VM_UFFD_MINOR);
1846                return 0;
1847        }
1848
1849        if (xa_is_value(page)) {
1850                error = shmem_swapin_page(inode, index, &page,
1851                                          sgp, gfp, vma, fault_type);
1852                if (error == -EEXIST)
1853                        goto repeat;
1854
1855                *pagep = page;
1856                return error;
1857        }
1858
1859        if (page) {
1860                hindex = page->index;
1861                if (sgp == SGP_WRITE)
1862                        mark_page_accessed(page);
1863                if (PageUptodate(page))
1864                        goto out;
1865                /* fallocated page */
1866                if (sgp != SGP_READ)
1867                        goto clear;
1868                unlock_page(page);
1869                put_page(page);
1870        }
1871
1872        /*
1873         * SGP_READ: succeed on hole, with NULL page, letting caller zero.
1874         * SGP_NOALLOC: fail on hole, with NULL page, letting caller fail.
1875         */
1876        *pagep = NULL;
1877        if (sgp == SGP_READ)
1878                return 0;
1879        if (sgp == SGP_NOALLOC)
1880                return -ENOENT;
1881
1882        /*
1883         * Fast cache lookup and swap lookup did not find it: allocate.
1884         */
1885
1886        if (vma && userfaultfd_missing(vma)) {
1887                *fault_type = handle_userfault(vmf, VM_UFFD_MISSING);
1888                return 0;
1889        }
1890
1891        /* Never use a huge page for shmem_symlink() */
1892        if (S_ISLNK(inode->i_mode))
1893                goto alloc_nohuge;
1894        if (!shmem_is_huge(vma, inode, index))
1895                goto alloc_nohuge;
1896
1897        huge_gfp = vma_thp_gfp_mask(vma);
1898        huge_gfp = limit_gfp_mask(huge_gfp, gfp);
1899        page = shmem_alloc_and_acct_page(huge_gfp, inode, index, true);
1900        if (IS_ERR(page)) {
1901alloc_nohuge:
1902                page = shmem_alloc_and_acct_page(gfp, inode,
1903                                                 index, false);
1904        }
1905        if (IS_ERR(page)) {
1906                int retry = 5;
1907
1908                error = PTR_ERR(page);
1909                page = NULL;
1910                if (error != -ENOSPC)
1911                        goto unlock;
1912                /*
1913                 * Try to reclaim some space by splitting a huge page
1914                 * beyond i_size on the filesystem.
1915                 */
1916                while (retry--) {
1917                        int ret;
1918
1919                        ret = shmem_unused_huge_shrink(sbinfo, NULL, 1);
1920                        if (ret == SHRINK_STOP)
1921                                break;
1922                        if (ret)
1923                                goto alloc_nohuge;
1924                }
1925                goto unlock;
1926        }
1927
1928        if (PageTransHuge(page))
1929                hindex = round_down(index, HPAGE_PMD_NR);
1930        else
1931                hindex = index;
1932
1933        if (sgp == SGP_WRITE)
1934                __SetPageReferenced(page);
1935
1936        error = shmem_add_to_page_cache(page, mapping, hindex,
1937                                        NULL, gfp & GFP_RECLAIM_MASK,
1938                                        charge_mm);
1939        if (error)
1940                goto unacct;
1941        lru_cache_add(page);
1942
1943        spin_lock_irq(&info->lock);
1944        info->alloced += compound_nr(page);
1945        inode->i_blocks += BLOCKS_PER_PAGE << compound_order(page);
1946        shmem_recalc_inode(inode);
1947        spin_unlock_irq(&info->lock);
1948        alloced = true;
1949
1950        if (PageTransHuge(page) &&
1951            DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE) <
1952                        hindex + HPAGE_PMD_NR - 1) {
1953                /*
1954                 * Part of the huge page is beyond i_size: subject
1955                 * to shrink under memory pressure.
1956                 */
1957                spin_lock(&sbinfo->shrinklist_lock);
1958                /*
1959                 * _careful to defend against unlocked access to
1960                 * ->shrink_list in shmem_unused_huge_shrink()
1961                 */
1962                if (list_empty_careful(&info->shrinklist)) {
1963                        list_add_tail(&info->shrinklist,
1964                                      &sbinfo->shrinklist);
1965                        sbinfo->shrinklist_len++;
1966                }
1967                spin_unlock(&sbinfo->shrinklist_lock);
1968        }
1969
1970        /*
1971         * Let SGP_FALLOC use the SGP_WRITE optimization on a new page.
1972         */
1973        if (sgp == SGP_FALLOC)
1974                sgp = SGP_WRITE;
1975clear:
1976        /*
1977         * Let SGP_WRITE caller clear ends if write does not fill page;
1978         * but SGP_FALLOC on a page fallocated earlier must initialize
1979         * it now, lest undo on failure cancel our earlier guarantee.
1980         */
1981        if (sgp != SGP_WRITE && !PageUptodate(page)) {
1982                int i;
1983
1984                for (i = 0; i < compound_nr(page); i++) {
1985                        clear_highpage(page + i);
1986                        flush_dcache_page(page + i);
1987                }
1988                SetPageUptodate(page);
1989        }
1990
1991        /* Perhaps the file has been truncated since we checked */
1992        if (sgp <= SGP_CACHE &&
1993            ((loff_t)index << PAGE_SHIFT) >= i_size_read(inode)) {
1994                if (alloced) {
1995                        ClearPageDirty(page);
1996                        delete_from_page_cache(page);
1997                        spin_lock_irq(&info->lock);
1998                        shmem_recalc_inode(inode);
1999                        spin_unlock_irq(&info->lock);
2000                }
2001                error = -EINVAL;
2002                goto unlock;
2003        }
2004out:
2005        *pagep = page + index - hindex;
2006        return 0;
2007
2008        /*
2009         * Error recovery.
2010         */
2011unacct:
2012        shmem_inode_unacct_blocks(inode, compound_nr(page));
2013
2014        if (PageTransHuge(page)) {
2015                unlock_page(page);
2016                put_page(page);
2017                goto alloc_nohuge;
2018        }
2019unlock:
2020        if (page) {
2021                unlock_page(page);
2022                put_page(page);
2023        }
2024        if (error == -ENOSPC && !once++) {
2025                spin_lock_irq(&info->lock);
2026                shmem_recalc_inode(inode);
2027                spin_unlock_irq(&info->lock);
2028                goto repeat;
2029        }
2030        if (error == -EEXIST)
2031                goto repeat;
2032        return error;
2033}
2034
2035/*
2036 * This is like autoremove_wake_function, but it removes the wait queue
2037 * entry unconditionally - even if something else had already woken the
2038 * target.
2039 */
2040static int synchronous_wake_function(wait_queue_entry_t *wait, unsigned mode, int sync, void *key)
2041{
2042        int ret = default_wake_function(wait, mode, sync, key);
2043        list_del_init(&wait->entry);
2044        return ret;
2045}
2046
2047static vm_fault_t shmem_fault(struct vm_fault *vmf)
2048{
2049        struct vm_area_struct *vma = vmf->vma;
2050        struct inode *inode = file_inode(vma->vm_file);
2051        gfp_t gfp = mapping_gfp_mask(inode->i_mapping);
2052        int err;
2053        vm_fault_t ret = VM_FAULT_LOCKED;
2054
2055        /*
2056         * Trinity finds that probing a hole which tmpfs is punching can
2057         * prevent the hole-punch from ever completing: which in turn
2058         * locks writers out with its hold on i_rwsem.  So refrain from
2059         * faulting pages into the hole while it's being punched.  Although
2060         * shmem_undo_range() does remove the additions, it may be unable to
2061         * keep up, as each new page needs its own unmap_mapping_range() call,
2062         * and the i_mmap tree grows ever slower to scan if new vmas are added.
2063         *
2064         * It does not matter if we sometimes reach this check just before the
2065         * hole-punch begins, so that one fault then races with the punch:
2066         * we just need to make racing faults a rare case.
2067         *
2068         * The implementation below would be much simpler if we just used a
2069         * standard mutex or completion: but we cannot take i_rwsem in fault,
2070         * and bloating every shmem inode for this unlikely case would be sad.
2071         */
2072        if (unlikely(inode->i_private)) {
2073                struct shmem_falloc *shmem_falloc;
2074
2075                spin_lock(&inode->i_lock);
2076                shmem_falloc = inode->i_private;
2077                if (shmem_falloc &&
2078                    shmem_falloc->waitq &&
2079                    vmf->pgoff >= shmem_falloc->start &&
2080                    vmf->pgoff < shmem_falloc->next) {
2081                        struct file *fpin;
2082                        wait_queue_head_t *shmem_falloc_waitq;
2083                        DEFINE_WAIT_FUNC(shmem_fault_wait, synchronous_wake_function);
2084
2085                        ret = VM_FAULT_NOPAGE;
2086                        fpin = maybe_unlock_mmap_for_io(vmf, NULL);
2087                        if (fpin)
2088                                ret = VM_FAULT_RETRY;
2089
2090                        shmem_falloc_waitq = shmem_falloc->waitq;
2091                        prepare_to_wait(shmem_falloc_waitq, &shmem_fault_wait,
2092                                        TASK_UNINTERRUPTIBLE);
2093                        spin_unlock(&inode->i_lock);
2094                        schedule();
2095
2096                        /*
2097                         * shmem_falloc_waitq points into the shmem_fallocate()
2098                         * stack of the hole-punching task: shmem_falloc_waitq
2099                         * is usually invalid by the time we reach here, but
2100                         * finish_wait() does not dereference it in that case;
2101                         * though i_lock needed lest racing with wake_up_all().
2102                         */
2103                        spin_lock(&inode->i_lock);
2104                        finish_wait(shmem_falloc_waitq, &shmem_fault_wait);
2105                        spin_unlock(&inode->i_lock);
2106
2107                        if (fpin)
2108                                fput(fpin);
2109                        return ret;
2110                }
2111                spin_unlock(&inode->i_lock);
2112        }
2113
2114        err = shmem_getpage_gfp(inode, vmf->pgoff, &vmf->page, SGP_CACHE,
2115                                  gfp, vma, vmf, &ret);
2116        if (err)
2117                return vmf_error(err);
2118        return ret;
2119}
2120
2121unsigned long shmem_get_unmapped_area(struct file *file,
2122                                      unsigned long uaddr, unsigned long len,
2123                                      unsigned long pgoff, unsigned long flags)
2124{
2125        unsigned long (*get_area)(struct file *,
2126                unsigned long, unsigned long, unsigned long, unsigned long);
2127        unsigned long addr;
2128        unsigned long offset;
2129        unsigned long inflated_len;
2130        unsigned long inflated_addr;
2131        unsigned long inflated_offset;
2132
2133        if (len > TASK_SIZE)
2134                return -ENOMEM;
2135
2136        get_area = current->mm->get_unmapped_area;
2137        addr = get_area(file, uaddr, len, pgoff, flags);
2138
2139        if (!IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE))
2140                return addr;
2141        if (IS_ERR_VALUE(addr))
2142                return addr;
2143        if (addr & ~PAGE_MASK)
2144                return addr;
2145        if (addr > TASK_SIZE - len)
2146                return addr;
2147
2148        if (shmem_huge == SHMEM_HUGE_DENY)
2149                return addr;
2150        if (len < HPAGE_PMD_SIZE)
2151                return addr;
2152        if (flags & MAP_FIXED)
2153                return addr;
2154        /*
2155         * Our priority is to support MAP_SHARED mapped hugely;
2156         * and support MAP_PRIVATE mapped hugely too, until it is COWed.
2157         * But if caller specified an address hint and we allocated area there
2158         * successfully, respect that as before.
2159         */
2160        if (uaddr == addr)
2161                return addr;
2162
2163        if (shmem_huge != SHMEM_HUGE_FORCE) {
2164                struct super_block *sb;
2165
2166                if (file) {
2167                        VM_BUG_ON(file->f_op != &shmem_file_operations);
2168                        sb = file_inode(file)->i_sb;
2169                } else {
2170                        /*
2171                         * Called directly from mm/mmap.c, or drivers/char/mem.c
2172                         * for "/dev/zero", to create a shared anonymous object.
2173                         */
2174                        if (IS_ERR(shm_mnt))
2175                                return addr;
2176                        sb = shm_mnt->mnt_sb;
2177                }
2178                if (SHMEM_SB(sb)->huge == SHMEM_HUGE_NEVER)
2179                        return addr;
2180        }
2181
2182        offset = (pgoff << PAGE_SHIFT) & (HPAGE_PMD_SIZE-1);
2183        if (offset && offset + len < 2 * HPAGE_PMD_SIZE)
2184                return addr;
2185        if ((addr & (HPAGE_PMD_SIZE-1)) == offset)
2186                return addr;
2187
2188        inflated_len = len + HPAGE_PMD_SIZE - PAGE_SIZE;
2189        if (inflated_len > TASK_SIZE)
2190                return addr;
2191        if (inflated_len < len)
2192                return addr;
2193
2194        inflated_addr = get_area(NULL, uaddr, inflated_len, 0, flags);
2195        if (IS_ERR_VALUE(inflated_addr))
2196                return addr;
2197        if (inflated_addr & ~PAGE_MASK)
2198                return addr;
2199
2200        inflated_offset = inflated_addr & (HPAGE_PMD_SIZE-1);
2201        inflated_addr += offset - inflated_offset;
2202        if (inflated_offset > offset)
2203                inflated_addr += HPAGE_PMD_SIZE;
2204
2205        if (inflated_addr > TASK_SIZE - len)
2206                return addr;
2207        return inflated_addr;
2208}
2209
2210#ifdef CONFIG_NUMA
2211static int shmem_set_policy(struct vm_area_struct *vma, struct mempolicy *mpol)
2212{
2213        struct inode *inode = file_inode(vma->vm_file);
2214        return mpol_set_shared_policy(&SHMEM_I(inode)->policy, vma, mpol);
2215}
2216
2217static struct mempolicy *shmem_get_policy(struct vm_area_struct *vma,
2218                                          unsigned long addr)
2219{
2220        struct inode *inode = file_inode(vma->vm_file);
2221        pgoff_t index;
2222
2223        index = ((addr - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
2224        return mpol_shared_policy_lookup(&SHMEM_I(inode)->policy, index);
2225}
2226#endif
2227
2228int shmem_lock(struct file *file, int lock, struct ucounts *ucounts)
2229{
2230        struct inode *inode = file_inode(file);
2231        struct shmem_inode_info *info = SHMEM_I(inode);
2232        int retval = -ENOMEM;
2233
2234        /*
2235         * What serializes the accesses to info->flags?
2236         * ipc_lock_object() when called from shmctl_do_lock(),
2237         * no serialization needed when called from shm_destroy().
2238         */
2239        if (lock && !(info->flags & VM_LOCKED)) {
2240                if (!user_shm_lock(inode->i_size, ucounts))
2241                        goto out_nomem;
2242                info->flags |= VM_LOCKED;
2243                mapping_set_unevictable(file->f_mapping);
2244        }
2245        if (!lock && (info->flags & VM_LOCKED) && ucounts) {
2246                user_shm_unlock(inode->i_size, ucounts);
2247                info->flags &= ~VM_LOCKED;
2248                mapping_clear_unevictable(file->f_mapping);
2249        }
2250        retval = 0;
2251
2252out_nomem:
2253        return retval;
2254}
2255
2256static int shmem_mmap(struct file *file, struct vm_area_struct *vma)
2257{
2258        struct shmem_inode_info *info = SHMEM_I(file_inode(file));
2259        int ret;
2260
2261        ret = seal_check_future_write(info->seals, vma);
2262        if (ret)
2263                return ret;
2264
2265        /* arm64 - allow memory tagging on RAM-based files */
2266        vma->vm_flags |= VM_MTE_ALLOWED;
2267
2268        file_accessed(file);
2269        vma->vm_ops = &shmem_vm_ops;
2270        if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) &&
2271                        ((vma->vm_start + ~HPAGE_PMD_MASK) & HPAGE_PMD_MASK) <
2272                        (vma->vm_end & HPAGE_PMD_MASK)) {
2273                khugepaged_enter(vma, vma->vm_flags);
2274        }
2275        return 0;
2276}
2277
2278static struct inode *shmem_get_inode(struct super_block *sb, const struct inode *dir,
2279                                     umode_t mode, dev_t dev, unsigned long flags)
2280{
2281        struct inode *inode;
2282        struct shmem_inode_info *info;
2283        struct shmem_sb_info *sbinfo = SHMEM_SB(sb);
2284        ino_t ino;
2285
2286        if (shmem_reserve_inode(sb, &ino))
2287                return NULL;
2288
2289        inode = new_inode(sb);
2290        if (inode) {
2291                inode->i_ino = ino;
2292                inode_init_owner(&init_user_ns, inode, dir, mode);
2293                inode->i_blocks = 0;
2294                inode->i_atime = inode->i_mtime = inode->i_ctime = current_time(inode);
2295                inode->i_generation = prandom_u32();
2296                info = SHMEM_I(inode);
2297                memset(info, 0, (char *)inode - (char *)info);
2298                spin_lock_init(&info->lock);
2299                atomic_set(&info->stop_eviction, 0);
2300                info->seals = F_SEAL_SEAL;
2301                info->flags = flags & VM_NORESERVE;
2302                INIT_LIST_HEAD(&info->shrinklist);
2303                INIT_LIST_HEAD(&info->swaplist);
2304                simple_xattrs_init(&info->xattrs);
2305                cache_no_acl(inode);
2306                mapping_set_large_folios(inode->i_mapping);
2307
2308                switch (mode & S_IFMT) {
2309                default:
2310                        inode->i_op = &shmem_special_inode_operations;
2311                        init_special_inode(inode, mode, dev);
2312                        break;
2313                case S_IFREG:
2314                        inode->i_mapping->a_ops = &shmem_aops;
2315                        inode->i_op = &shmem_inode_operations;
2316                        inode->i_fop = &shmem_file_operations;
2317                        mpol_shared_policy_init(&info->policy,
2318                                                 shmem_get_sbmpol(sbinfo));
2319                        break;
2320                case S_IFDIR:
2321                        inc_nlink(inode);
2322                        /* Some things misbehave if size == 0 on a directory */
2323                        inode->i_size = 2 * BOGO_DIRENT_SIZE;
2324                        inode->i_op = &shmem_dir_inode_operations;
2325                        inode->i_fop = &simple_dir_operations;
2326                        break;
2327                case S_IFLNK:
2328                        /*
2329                         * Must not load anything in the rbtree,
2330                         * mpol_free_shared_policy will not be called.
2331                         */
2332                        mpol_shared_policy_init(&info->policy, NULL);
2333                        break;
2334                }
2335
2336                lockdep_annotate_inode_mutex_key(inode);
2337        } else
2338                shmem_free_inode(sb);
2339        return inode;
2340}
2341
2342#ifdef CONFIG_USERFAULTFD
2343int shmem_mfill_atomic_pte(struct mm_struct *dst_mm,
2344                           pmd_t *dst_pmd,
2345                           struct vm_area_struct *dst_vma,
2346                           unsigned long dst_addr,
2347                           unsigned long src_addr,
2348                           bool zeropage,
2349                           struct page **pagep)
2350{
2351        struct inode *inode = file_inode(dst_vma->vm_file);
2352        struct shmem_inode_info *info = SHMEM_I(inode);
2353        struct address_space *mapping = inode->i_mapping;
2354        gfp_t gfp = mapping_gfp_mask(mapping);
2355        pgoff_t pgoff = linear_page_index(dst_vma, dst_addr);
2356        void *page_kaddr;
2357        struct page *page;
2358        int ret;
2359        pgoff_t max_off;
2360
2361        if (!shmem_inode_acct_block(inode, 1)) {
2362                /*
2363                 * We may have got a page, returned -ENOENT triggering a retry,
2364                 * and now we find ourselves with -ENOMEM. Release the page, to
2365                 * avoid a BUG_ON in our caller.
2366                 */
2367                if (unlikely(*pagep)) {
2368                        put_page(*pagep);
2369                        *pagep = NULL;
2370                }
2371                return -ENOMEM;
2372        }
2373
2374        if (!*pagep) {
2375                ret = -ENOMEM;
2376                page = shmem_alloc_page(gfp, info, pgoff);
2377                if (!page)
2378                        goto out_unacct_blocks;
2379
2380                if (!zeropage) {        /* COPY */
2381                        page_kaddr = kmap_atomic(page);
2382                        ret = copy_from_user(page_kaddr,
2383                                             (const void __user *)src_addr,
2384                                             PAGE_SIZE);
2385                        kunmap_atomic(page_kaddr);
2386
2387                        /* fallback to copy_from_user outside mmap_lock */
2388                        if (unlikely(ret)) {
2389                                *pagep = page;
2390                                ret = -ENOENT;
2391                                /* don't free the page */
2392                                goto out_unacct_blocks;
2393                        }
2394                } else {                /* ZEROPAGE */
2395                        clear_highpage(page);
2396                }
2397        } else {
2398                page = *pagep;
2399                *pagep = NULL;
2400        }
2401
2402        VM_BUG_ON(PageLocked(page));
2403        VM_BUG_ON(PageSwapBacked(page));
2404        __SetPageLocked(page);
2405        __SetPageSwapBacked(page);
2406        __SetPageUptodate(page);
2407
2408        ret = -EFAULT;
2409        max_off = DIV_ROUND_UP(i_size_read(inode), PAGE_SIZE);
2410        if (unlikely(pgoff >= max_off))
2411                goto out_release;
2412
2413        ret = shmem_add_to_page_cache(page, mapping, pgoff, NULL,
2414                                      gfp & GFP_RECLAIM_MASK, dst_mm);
2415        if (ret)
2416                goto out_release;
2417
2418        ret = mfill_atomic_install_pte(dst_mm, dst_pmd, dst_vma, dst_addr,
2419                                       page, true, false);
2420        if (ret)
2421                goto out_delete_from_cache;
2422
2423        spin_lock_irq(&info->lock);
2424        info->alloced++;
2425        inode->i_blocks += BLOCKS_PER_PAGE;
2426        shmem_recalc_inode(inode);
2427        spin_unlock_irq(&info->lock);
2428
2429        unlock_page(page);
2430        return 0;
2431out_delete_from_cache:
2432        delete_from_page_cache(page);
2433out_release:
2434        unlock_page(page);
2435        put_page(page);
2436out_unacct_blocks:
2437        shmem_inode_unacct_blocks(inode, 1);
2438        return ret;
2439}
2440#endif /* CONFIG_USERFAULTFD */
2441
2442#ifdef CONFIG_TMPFS
2443static const struct inode_operations shmem_symlink_inode_operations;
2444static const struct inode_operations shmem_short_symlink_operations;
2445
2446#ifdef CONFIG_TMPFS_XATTR
2447static int shmem_initxattrs(struct inode *, const struct xattr *, void *);
2448#else
2449#define shmem_initxattrs NULL
2450#endif
2451
2452static int
2453shmem_write_begin(struct file *file, struct address_space *mapping,
2454                        loff_t pos, unsigned len, unsigned flags,
2455                        struct page **pagep, void **fsdata)
2456{
2457        struct inode *inode = mapping->host;
2458        struct shmem_inode_info *info = SHMEM_I(inode);
2459        pgoff_t index = pos >> PAGE_SHIFT;
2460
2461        /* i_rwsem is held by caller */
2462        if (unlikely(info->seals & (F_SEAL_GROW |
2463                                   F_SEAL_WRITE | F_SEAL_FUTURE_WRITE))) {
2464                if (info->seals & (F_SEAL_WRITE | F_SEAL_FUTURE_WRITE))
2465                        return -EPERM;
2466                if ((info->seals & F_SEAL_GROW) && pos + len > inode->i_size)
2467                        return -EPERM;
2468        }
2469
2470        return shmem_getpage(inode, index, pagep, SGP_WRITE);
2471}
2472
2473static int
2474shmem_write_end(struct file *file, struct address_space *mapping,
2475                        loff_t pos, unsigned len, unsigned copied,
2476                        struct page *page, void *fsdata)
2477{
2478        struct inode *inode = mapping->host;
2479
2480        if (pos + copied > inode->i_size)
2481                i_size_write(inode, pos + copied);
2482
2483        if (!PageUptodate(page)) {
2484                struct page *head = compound_head(page);
2485                if (PageTransCompound(page)) {
2486                        int i;
2487
2488                        for (i = 0; i < HPAGE_PMD_NR; i++) {
2489                                if (head + i == page)
2490                                        continue;
2491                                clear_highpage(head + i);
2492                                flush_dcache_page(head + i);
2493                        }
2494                }
2495                if (copied < PAGE_SIZE) {
2496                        unsigned from = pos & (PAGE_SIZE - 1);
2497                        zero_user_segments(page, 0, from,
2498                                        from + copied, PAGE_SIZE);
2499                }
2500                SetPageUptodate(head);
2501        }
2502        set_page_dirty(page);
2503        unlock_page(page);
2504        put_page(page);
2505
2506        return copied;
2507}
2508
2509static ssize_t shmem_file_read_iter(struct kiocb *iocb, struct iov_iter *to)
2510{
2511        struct file *file = iocb->ki_filp;
2512        struct inode *inode = file_inode(file);
2513        struct address_space *mapping = inode->i_mapping;
2514        pgoff_t index;
2515        unsigned long offset;
2516        enum sgp_type sgp = SGP_READ;
2517        int error = 0;
2518        ssize_t retval = 0;
2519        loff_t *ppos = &iocb->ki_pos;
2520
2521        /*
2522         * Might this read be for a stacking filesystem?  Then when reading
2523         * holes of a sparse file, we actually need to allocate those pages,
2524         * and even mark them dirty, so it cannot exceed the max_blocks limit.
2525         */
2526        if (!iter_is_iovec(to))
2527                sgp = SGP_CACHE;
2528
2529        index = *ppos >> PAGE_SHIFT;
2530        offset = *ppos & ~PAGE_MASK;
2531
2532        for (;;) {
2533                struct page *page = NULL;
2534                pgoff_t end_index;
2535                unsigned long nr, ret;
2536                loff_t i_size = i_size_read(inode);
2537
2538                end_index = i_size >> PAGE_SHIFT;
2539                if (index > end_index)
2540                        break;
2541                if (index == end_index) {
2542                        nr = i_size & ~PAGE_MASK;
2543                        if (nr <= offset)
2544                                break;
2545                }
2546
2547                error = shmem_getpage(inode, index, &page, sgp);
2548                if (error) {
2549                        if (error == -EINVAL)
2550                                error = 0;
2551                        break;
2552                }
2553                if (page) {
2554                        if (sgp == SGP_CACHE)
2555                                set_page_dirty(page);
2556                        unlock_page(page);
2557                }
2558
2559                /*
2560                 * We must evaluate after, since reads (unlike writes)
2561                 * are called without i_rwsem protection against truncate
2562                 */
2563                nr = PAGE_SIZE;
2564                i_size = i_size_read(inode);
2565                end_index = i_size >> PAGE_SHIFT;
2566                if (index == end_index) {
2567                        nr = i_size & ~PAGE_MASK;
2568                        if (nr <= offset) {
2569                                if (page)
2570                                        put_page(page);
2571                                break;
2572                        }
2573                }
2574                nr -= offset;
2575
2576                if (page) {
2577                        /*
2578                         * If users can be writing to this page using arbitrary
2579                         * virtual addresses, take care about potential aliasing
2580                         * before reading the page on the kernel side.
2581                         */
2582                        if (mapping_writably_mapped(mapping))
2583                                flush_dcache_page(page);
2584                        /*
2585                         * Mark the page accessed if we read the beginning.
2586                         */
2587                        if (!offset)
2588                                mark_page_accessed(page);
2589                } else {
2590                        page = ZERO_PAGE(0);
2591                        get_page(page);
2592                }
2593
2594                /*
2595                 * Ok, we have the page, and it's up-to-date, so
2596                 * now we can copy it to user space...
2597                 */
2598                ret = copy_page_to_iter(page, offset, nr, to);
2599                retval += ret;
2600                offset += ret;
2601                index += offset >> PAGE_SHIFT;
2602                offset &= ~PAGE_MASK;
2603
2604                put_page(page);
2605                if (!iov_iter_count(to))
2606                        break;
2607                if (ret < nr) {
2608                        error = -EFAULT;
2609                        break;
2610                }
2611                cond_resched();
2612        }
2613
2614        *ppos = ((loff_t) index << PAGE_SHIFT) + offset;
2615        file_accessed(file);
2616        return retval ? retval : error;
2617}
2618
2619static loff_t shmem_file_llseek(struct file *file, loff_t offset, int whence)
2620{
2621        struct address_space *mapping = file->f_mapping;
2622        struct inode *inode = mapping->host;
2623
2624        if (whence != SEEK_DATA && whence != SEEK_HOLE)
2625                return generic_file_llseek_size(file, offset, whence,
2626                                        MAX_LFS_FILESIZE, i_size_read(inode));
2627        if (offset < 0)
2628                return -ENXIO;
2629
2630        inode_lock(inode);
2631        /* We're holding i_rwsem so we can access i_size directly */
2632        offset = mapping_seek_hole_data(mapping, offset, inode->i_size, whence);
2633        if (offset >= 0)
2634                offset = vfs_setpos(file, offset, MAX_LFS_FILESIZE);
2635        inode_unlock(inode);
2636        return offset;
2637}
2638
2639static long shmem_fallocate(struct file *file, int mode, loff_t offset,
2640                                                         loff_t len)
2641{
2642        struct inode *inode = file_inode(file);
2643        struct shmem_sb_info *sbinfo = SHMEM_SB(inode->i_sb);
2644        struct shmem_inode_info *info = SHMEM_I(inode);
2645        struct shmem_falloc shmem_falloc;
2646        pgoff_t start, index, end, undo_fallocend;
2647        int error;
2648
2649        if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE))
2650                return -EOPNOTSUPP;
2651
2652        inode_lock(inode);
2653
2654        if (mode & FALLOC_FL_PUNCH_HOLE) {
2655                struct address_space *mapping = file->f_mapping;
2656                loff_t unmap_start = round_up(offset, PAGE_SIZE);
2657                loff_t unmap_end = round_down(offset + len, PAGE_SIZE) - 1;
2658                DECLARE_WAIT_QUEUE_HEAD_ONSTACK(shmem_falloc_waitq);
2659
2660                /* protected by i_rwsem */
2661                if (info->seals & (F_SEAL_WRITE | F_SEAL_FUTURE_WRITE)) {
2662                        error = -EPERM;
2663                        goto out;
2664                }
2665
2666                shmem_falloc.waitq = &shmem_falloc_waitq;
2667                shmem_falloc.start = (u64)unmap_start >> PAGE_SHIFT;
2668                shmem_falloc.next = (unmap_end + 1) >> PAGE_SHIFT;
2669                spin_lock(&inode->i_lock);
2670                inode->i_private = &shmem_falloc;
2671                spin_unlock(&inode->i_lock);
2672
2673                if ((u64)unmap_end > (u64)unmap_start)
2674                        unmap_mapping_range(mapping, unmap_start,
2675                                            1 + unmap_end - unmap_start, 0);
2676                shmem_truncate_range(inode, offset, offset + len - 1);
2677                /* No need to unmap again: hole-punching leaves COWed pages */
2678
2679                spin_lock(&inode->i_lock);
2680                inode->i_private = NULL;
2681                wake_up_all(&shmem_falloc_waitq);
2682                WARN_ON_ONCE(!list_empty(&shmem_falloc_waitq.head));
2683                spin_unlock(&inode->i_lock);
2684                error = 0;
2685                goto out;
2686        }
2687
2688        /* We need to check rlimit even when FALLOC_FL_KEEP_SIZE */
2689        error = inode_newsize_ok(inode, offset + len);
2690        if (error)
2691                goto out;
2692
2693        if ((info->seals & F_SEAL_GROW) && offset + len > inode->i_size) {
2694                error = -EPERM;
2695                goto out;
2696        }
2697
2698        start = offset >> PAGE_SHIFT;
2699        end = (offset + len + PAGE_SIZE - 1) >> PAGE_SHIFT;
2700        /* Try to avoid a swapstorm if len is impossible to satisfy */
2701        if (sbinfo->max_blocks && end - start > sbinfo->max_blocks) {
2702                error = -ENOSPC;
2703                goto out;
2704        }
2705
2706        shmem_falloc.waitq = NULL;
2707        shmem_falloc.start = start;
2708        shmem_falloc.next  = start;
2709        shmem_falloc.nr_falloced = 0;
2710        shmem_falloc.nr_unswapped = 0;
2711        spin_lock(&inode->i_lock);
2712        inode->i_private = &shmem_falloc;
2713        spin_unlock(&inode->i_lock);
2714
2715        /*
2716         * info->fallocend is only relevant when huge pages might be
2717         * involved: to prevent split_huge_page() freeing fallocated
2718         * pages when FALLOC_FL_KEEP_SIZE committed beyond i_size.
2719         */
2720        undo_fallocend = info->fallocend;
2721        if (info->fallocend < end)
2722                info->fallocend = end;
2723
2724        for (index = start; index < end; ) {
2725                struct page *page;
2726
2727                /*
2728                 * Good, the fallocate(2) manpage permits EINTR: we may have
2729                 * been interrupted because we are using up too much memory.
2730                 */
2731                if (signal_pending(current))
2732                        error = -EINTR;
2733                else if (shmem_falloc.nr_unswapped > shmem_falloc.nr_falloced)
2734                        error = -ENOMEM;
2735                else
2736                        error = shmem_getpage(inode, index, &page, SGP_FALLOC);
2737                if (error) {
2738                        info->fallocend = undo_fallocend;
2739                        /* Remove the !PageUptodate pages we added */
2740                        if (index > start) {
2741                                shmem_undo_range(inode,
2742                                    (loff_t)start << PAGE_SHIFT,
2743                                    ((loff_t)index << PAGE_SHIFT) - 1, true);
2744                        }
2745                        goto undone;
2746                }
2747
2748                index++;
2749                /*
2750                 * Here is a more important optimization than it appears:
2751                 * a second SGP_FALLOC on the same huge page will clear it,
2752                 * making it PageUptodate and un-undoable if we fail later.
2753                 */
2754                if (PageTransCompound(page)) {
2755                        index = round_up(index, HPAGE_PMD_NR);
2756                        /* Beware 32-bit wraparound */
2757                        if (!index)
2758                                index--;
2759                }
2760
2761                /*
2762                 * Inform shmem_writepage() how far we have reached.
2763                 * No need for lock or barrier: we have the page lock.
2764                 */
2765                if (!PageUptodate(page))
2766                        shmem_falloc.nr_falloced += index - shmem_falloc.next;
2767                shmem_falloc.next = index;
2768
2769                /*
2770                 * If !PageUptodate, leave it that way so that freeable pages
2771                 * can be recognized if we need to rollback on error later.
2772                 * But set_page_dirty so that memory pressure will swap rather
2773                 * than free the pages we are allocating (and SGP_CACHE pages
2774                 * might still be clean: we now need to mark those dirty too).
2775                 */
2776                set_page_dirty(page);
2777                unlock_page(page);
2778                put_page(page);
2779                cond_resched();
2780        }
2781
2782        if (!(mode & FALLOC_FL_KEEP_SIZE) && offset + len > inode->i_size)
2783                i_size_write(inode, offset + len);
2784        inode->i_ctime = current_time(inode);
2785undone:
2786        spin_lock(&inode->i_lock);
2787        inode->i_private = NULL;
2788        spin_unlock(&inode->i_lock);
2789out:
2790        inode_unlock(inode);
2791        return error;
2792}
2793
2794static int shmem_statfs(struct dentry *dentry, struct kstatfs *buf)
2795{
2796        struct shmem_sb_info *sbinfo = SHMEM_SB(dentry->d_sb);
2797
2798        buf->f_type = TMPFS_MAGIC;
2799        buf->f_bsize = PAGE_SIZE;
2800        buf->f_namelen = NAME_MAX;
2801        if (sbinfo->max_blocks) {
2802                buf->f_blocks = sbinfo->max_blocks;
2803                buf->f_bavail =
2804                buf->f_bfree  = sbinfo->max_blocks -
2805                                percpu_counter_sum(&sbinfo->used_blocks);
2806        }
2807        if (sbinfo->max_inodes) {
2808                buf->f_files = sbinfo->max_inodes;
2809                buf->f_ffree = sbinfo->free_inodes;
2810        }
2811        /* else leave those fields 0 like simple_statfs */
2812
2813        buf->f_fsid = uuid_to_fsid(dentry->d_sb->s_uuid.b);
2814
2815        return 0;
2816}
2817
2818/*
2819 * File creation. Allocate an inode, and we're done..
2820 */
2821static int
2822shmem_mknod(struct user_namespace *mnt_userns, struct inode *dir,
2823            struct dentry *dentry, umode_t mode, dev_t dev)
2824{
2825        struct inode *inode;
2826        int error = -ENOSPC;
2827
2828        inode = shmem_get_inode(dir->i_sb, dir, mode, dev, VM_NORESERVE);
2829        if (inode) {
2830                error = simple_acl_create(dir, inode);
2831                if (error)
2832                        goto out_iput;
2833                error = security_inode_init_security(inode, dir,
2834                                                     &dentry->d_name,
2835                                                     shmem_initxattrs, NULL);
2836                if (error && error != -EOPNOTSUPP)
2837                        goto out_iput;
2838
2839                error = 0;
2840                dir->i_size += BOGO_DIRENT_SIZE;
2841                dir->i_ctime = dir->i_mtime = current_time(dir);
2842                d_instantiate(dentry, inode);
2843                dget(dentry); /* Extra count - pin the dentry in core */
2844        }
2845        return error;
2846out_iput:
2847        iput(inode);
2848        return error;
2849}
2850
2851static int
2852shmem_tmpfile(struct user_namespace *mnt_userns, struct inode *dir,
2853              struct dentry *dentry, umode_t mode)
2854{
2855        struct inode *inode;
2856        int error = -ENOSPC;
2857
2858        inode = shmem_get_inode(dir->i_sb, dir, mode, 0, VM_NORESERVE);
2859        if (inode) {
2860                error = security_inode_init_security(inode, dir,
2861                                                     NULL,
2862                                                     shmem_initxattrs, NULL);
2863                if (error && error != -EOPNOTSUPP)
2864                        goto out_iput;
2865                error = simple_acl_create(dir, inode);
2866                if (error)
2867                        goto out_iput;
2868                d_tmpfile(dentry, inode);
2869        }
2870        return error;
2871out_iput:
2872        iput(inode);
2873        return error;
2874}
2875
2876static int shmem_mkdir(struct user_namespace *mnt_userns, struct inode *dir,
2877                       struct dentry *dentry, umode_t mode)
2878{
2879        int error;
2880
2881        if ((error = shmem_mknod(&init_user_ns, dir, dentry,
2882                                 mode | S_IFDIR, 0)))
2883                return error;
2884        inc_nlink(dir);
2885        return 0;
2886}
2887
2888static int shmem_create(struct user_namespace *mnt_userns, struct inode *dir,
2889                        struct dentry *dentry, umode_t mode, bool excl)
2890{
2891        return shmem_mknod(&init_user_ns, dir, dentry, mode | S_IFREG, 0);
2892}
2893
2894/*
2895 * Link a file..
2896 */
2897static int shmem_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
2898{
2899        struct inode *inode = d_inode(old_dentry);
2900        int ret = 0;
2901
2902        /*
2903         * No ordinary (disk based) filesystem counts links as inodes;
2904         * but each new link needs a new dentry, pinning lowmem, and
2905         * tmpfs dentries cannot be pruned until they are unlinked.
2906         * But if an O_TMPFILE file is linked into the tmpfs, the
2907         * first link must skip that, to get the accounting right.
2908         */
2909        if (inode->i_nlink) {
2910                ret = shmem_reserve_inode(inode->i_sb, NULL);
2911                if (ret)
2912                        goto out;
2913        }
2914
2915        dir->i_size += BOGO_DIRENT_SIZE;
2916        inode->i_ctime = dir->i_ctime = dir->i_mtime = current_time(inode);
2917        inc_nlink(inode);
2918        ihold(inode);   /* New dentry reference */
2919        dget(dentry);           /* Extra pinning count for the created dentry */
2920        d_instantiate(dentry, inode);
2921out:
2922        return ret;
2923}
2924
2925static int shmem_unlink(struct inode *dir, struct dentry *dentry)
2926{
2927        struct inode *inode = d_inode(dentry);
2928
2929        if (inode->i_nlink > 1 && !S_ISDIR(inode->i_mode))
2930                shmem_free_inode(inode->i_sb);
2931
2932        dir->i_size -= BOGO_DIRENT_SIZE;
2933        inode->i_ctime = dir->i_ctime = dir->i_mtime = current_time(inode);
2934        drop_nlink(inode);
2935        dput(dentry);   /* Undo the count from "create" - this does all the work */
2936        return 0;
2937}
2938
2939static int shmem_rmdir(struct inode *dir, struct dentry *dentry)
2940{
2941        if (!simple_empty(dentry))
2942                return -ENOTEMPTY;
2943
2944        drop_nlink(d_inode(dentry));
2945        drop_nlink(dir);
2946        return shmem_unlink(dir, dentry);
2947}
2948
2949static int shmem_whiteout(struct user_namespace *mnt_userns,
2950                          struct inode *old_dir, struct dentry *old_dentry)
2951{
2952        struct dentry *whiteout;
2953        int error;
2954
2955        whiteout = d_alloc(old_dentry->d_parent, &old_dentry->d_name);
2956        if (!whiteout)
2957                return -ENOMEM;
2958
2959        error = shmem_mknod(&init_user_ns, old_dir, whiteout,
2960                            S_IFCHR | WHITEOUT_MODE, WHITEOUT_DEV);
2961        dput(whiteout);
2962        if (error)
2963                return error;
2964
2965        /*
2966         * Cheat and hash the whiteout while the old dentry is still in
2967         * place, instead of playing games with FS_RENAME_DOES_D_MOVE.
2968         *
2969         * d_lookup() will consistently find one of them at this point,
2970         * not sure which one, but that isn't even important.
2971         */
2972        d_rehash(whiteout);
2973        return 0;
2974}
2975
2976/*
2977 * The VFS layer already does all the dentry stuff for rename,
2978 * we just have to decrement the usage count for the target if
2979 * it exists so that the VFS layer correctly free's it when it
2980 * gets overwritten.
2981 */
2982static int shmem_rename2(struct user_namespace *mnt_userns,
2983                         struct inode *old_dir, struct dentry *old_dentry,
2984                         struct inode *new_dir, struct dentry *new_dentry,
2985                         unsigned int flags)
2986{
2987        struct inode *inode = d_inode(old_dentry);
2988        int they_are_dirs = S_ISDIR(inode->i_mode);
2989
2990        if (flags & ~(RENAME_NOREPLACE | RENAME_EXCHANGE | RENAME_WHITEOUT))
2991                return -EINVAL;
2992
2993        if (flags & RENAME_EXCHANGE)
2994                return simple_rename_exchange(old_dir, old_dentry, new_dir, new_dentry);
2995
2996        if (!simple_empty(new_dentry))
2997                return -ENOTEMPTY;
2998
2999        if (flags & RENAME_WHITEOUT) {
3000                int error;
3001
3002                error = shmem_whiteout(&init_user_ns, old_dir, old_dentry);
3003                if (error)
3004                        return error;
3005        }
3006
3007        if (d_really_is_positive(new_dentry)) {
3008                (void) shmem_unlink(new_dir, new_dentry);
3009                if (they_are_dirs) {
3010                        drop_nlink(d_inode(new_dentry));
3011                        drop_nlink(old_dir);
3012                }
3013        } else if (they_are_dirs) {
3014                drop_nlink(old_dir);
3015                inc_nlink(new_dir);
3016        }
3017
3018        old_dir->i_size -= BOGO_DIRENT_SIZE;
3019        new_dir->i_size += BOGO_DIRENT_SIZE;
3020        old_dir->i_ctime = old_dir->i_mtime =
3021        new_dir->i_ctime = new_dir->i_mtime =
3022        inode->i_ctime = current_time(old_dir);
3023        return 0;
3024}
3025
3026static int shmem_symlink(struct user_namespace *mnt_userns, struct inode *dir,
3027                         struct dentry *dentry, const char *symname)
3028{
3029        int error;
3030        int len;
3031        struct inode *inode;
3032        struct page *page;
3033
3034        len = strlen(symname) + 1;
3035        if (len > PAGE_SIZE)
3036                return -ENAMETOOLONG;
3037
3038        inode = shmem_get_inode(dir->i_sb, dir, S_IFLNK | 0777, 0,
3039                                VM_NORESERVE);
3040        if (!inode)
3041                return -ENOSPC;
3042
3043        error = security_inode_init_security(inode, dir, &dentry->d_name,
3044                                             shmem_initxattrs, NULL);
3045        if (error && error != -EOPNOTSUPP) {
3046                iput(inode);
3047                return error;
3048        }
3049
3050        inode->i_size = len-1;
3051        if (len <= SHORT_SYMLINK_LEN) {
3052                inode->i_link = kmemdup(symname, len, GFP_KERNEL);
3053                if (!inode->i_link) {
3054                        iput(inode);
3055                        return -ENOMEM;
3056                }
3057                inode->i_op = &shmem_short_symlink_operations;
3058        } else {
3059                inode_nohighmem(inode);
3060                error = shmem_getpage(inode, 0, &page, SGP_WRITE);
3061                if (error) {
3062                        iput(inode);
3063                        return error;
3064                }
3065                inode->i_mapping->a_ops = &shmem_aops;
3066                inode->i_op = &shmem_symlink_inode_operations;
3067                memcpy(page_address(page), symname, len);
3068                SetPageUptodate(page);
3069                set_page_dirty(page);
3070                unlock_page(page);
3071                put_page(page);
3072        }
3073        dir->i_size += BOGO_DIRENT_SIZE;
3074        dir->i_ctime = dir->i_mtime = current_time(dir);
3075        d_instantiate(dentry, inode);
3076        dget(dentry);
3077        return 0;
3078}
3079
3080static void shmem_put_link(void *arg)
3081{
3082        mark_page_accessed(arg);
3083        put_page(arg);
3084}
3085
3086static const char *shmem_get_link(struct dentry *dentry,
3087                                  struct inode *inode,
3088                                  struct delayed_call *done)
3089{
3090        struct page *page = NULL;
3091        int error;
3092        if (!dentry) {
3093                page = find_get_page(inode->i_mapping, 0);
3094                if (!page)
3095                        return ERR_PTR(-ECHILD);
3096                if (!PageUptodate(page)) {
3097                        put_page(page);
3098                        return ERR_PTR(-ECHILD);
3099                }
3100        } else {
3101                error = shmem_getpage(inode, 0, &page, SGP_READ);
3102                if (error)
3103                        return ERR_PTR(error);
3104                unlock_page(page);
3105        }
3106        set_delayed_call(done, shmem_put_link, page);
3107        return page_address(page);
3108}
3109
3110#ifdef CONFIG_TMPFS_XATTR
3111/*
3112 * Superblocks without xattr inode operations may get some security.* xattr
3113 * support from the LSM "for free". As soon as we have any other xattrs
3114 * like ACLs, we also need to implement the security.* handlers at
3115 * filesystem level, though.
3116 */
3117
3118/*
3119 * Callback for security_inode_init_security() for acquiring xattrs.
3120 */
3121static int shmem_initxattrs(struct inode *inode,
3122                            const struct xattr *xattr_array,
3123                            void *fs_info)
3124{
3125        struct shmem_inode_info *info = SHMEM_I(inode);
3126        const struct xattr *xattr;
3127        struct simple_xattr *new_xattr;
3128        size_t len;
3129
3130        for (xattr = xattr_array; xattr->name != NULL; xattr++) {
3131                new_xattr = simple_xattr_alloc(xattr->value, xattr->value_len);
3132                if (!new_xattr)
3133                        return -ENOMEM;
3134
3135                len = strlen(xattr->name) + 1;
3136                new_xattr->name = kmalloc(XATTR_SECURITY_PREFIX_LEN + len,
3137                                          GFP_KERNEL);
3138                if (!new_xattr->name) {
3139                        kvfree(new_xattr);
3140                        return -ENOMEM;
3141                }
3142
3143                memcpy(new_xattr->name, XATTR_SECURITY_PREFIX,
3144                       XATTR_SECURITY_PREFIX_LEN);
3145                memcpy(new_xattr->name + XATTR_SECURITY_PREFIX_LEN,
3146                       xattr->name, len);
3147
3148                simple_xattr_list_add(&info->xattrs, new_xattr);
3149        }
3150
3151        return 0;
3152}
3153
3154static int shmem_xattr_handler_get(const struct xattr_handler *handler,
3155                                   struct dentry *unused, struct inode *inode,
3156                                   const char *name, void *buffer, size_t size)
3157{
3158        struct shmem_inode_info *info = SHMEM_I(inode);
3159
3160        name = xattr_full_name(handler, name);
3161        return simple_xattr_get(&info->xattrs, name, buffer, size);
3162}
3163
3164static int shmem_xattr_handler_set(const struct xattr_handler *handler,
3165                                   struct user_namespace *mnt_userns,
3166                                   struct dentry *unused, struct inode *inode,
3167                                   const char *name, const void *value,
3168                                   size_t size, int flags)
3169{
3170        struct shmem_inode_info *info = SHMEM_I(inode);
3171
3172        name = xattr_full_name(handler, name);
3173        return simple_xattr_set(&info->xattrs, name, value, size, flags, NULL);
3174}
3175
3176static const struct xattr_handler shmem_security_xattr_handler = {
3177        .prefix = XATTR_SECURITY_PREFIX,
3178        .get = shmem_xattr_handler_get,
3179        .set = shmem_xattr_handler_set,
3180};
3181
3182static const struct xattr_handler shmem_trusted_xattr_handler = {
3183        .prefix = XATTR_TRUSTED_PREFIX,
3184        .get = shmem_xattr_handler_get,
3185        .set = shmem_xattr_handler_set,
3186};
3187
3188static const struct xattr_handler *shmem_xattr_handlers[] = {
3189#ifdef CONFIG_TMPFS_POSIX_ACL
3190        &posix_acl_access_xattr_handler,
3191        &posix_acl_default_xattr_handler,
3192#endif
3193        &shmem_security_xattr_handler,
3194        &shmem_trusted_xattr_handler,
3195        NULL
3196};
3197
3198static ssize_t shmem_listxattr(struct dentry *dentry, char *buffer, size_t size)
3199{
3200        struct shmem_inode_info *info = SHMEM_I(d_inode(dentry));
3201        return simple_xattr_list(d_inode(dentry), &info->xattrs, buffer, size);
3202}
3203#endif /* CONFIG_TMPFS_XATTR */
3204
3205static const struct inode_operations shmem_short_symlink_operations = {
3206        .get_link       = simple_get_link,
3207#ifdef CONFIG_TMPFS_XATTR
3208        .listxattr      = shmem_listxattr,
3209#endif
3210};
3211
3212static const struct inode_operations shmem_symlink_inode_operations = {
3213        .get_link       = shmem_get_link,
3214#ifdef CONFIG_TMPFS_XATTR
3215        .listxattr      = shmem_listxattr,
3216#endif
3217};
3218
3219static struct dentry *shmem_get_parent(struct dentry *child)
3220{
3221        return ERR_PTR(-ESTALE);
3222}
3223
3224static int shmem_match(struct inode *ino, void *vfh)
3225{
3226        __u32 *fh = vfh;
3227        __u64 inum = fh[2];
3228        inum = (inum << 32) | fh[1];
3229        return ino->i_ino == inum && fh[0] == ino->i_generation;
3230}
3231
3232/* Find any alias of inode, but prefer a hashed alias */
3233static struct dentry *shmem_find_alias(struct inode *inode)
3234{
3235        struct dentry *alias = d_find_alias(inode);
3236
3237        return alias ?: d_find_any_alias(inode);
3238}
3239
3240
3241static struct dentry *shmem_fh_to_dentry(struct super_block *sb,
3242                struct fid *fid, int fh_len, int fh_type)
3243{
3244        struct inode *inode;
3245        struct dentry *dentry = NULL;
3246        u64 inum;
3247
3248        if (fh_len < 3)
3249                return NULL;
3250
3251        inum = fid->raw[2];
3252        inum = (inum << 32) | fid->raw[1];
3253
3254        inode = ilookup5(sb, (unsigned long)(inum + fid->raw[0]),
3255                        shmem_match, fid->raw);
3256        if (inode) {
3257                dentry = shmem_find_alias(inode);
3258                iput(inode);
3259        }
3260
3261        return dentry;
3262}
3263
3264static int shmem_encode_fh(struct inode *inode, __u32 *fh, int *len,
3265                                struct inode *parent)
3266{
3267        if (*len < 3) {
3268                *len = 3;
3269                return FILEID_INVALID;
3270        }
3271
3272        if (inode_unhashed(inode)) {
3273                /* Unfortunately insert_inode_hash is not idempotent,
3274                 * so as we hash inodes here rather than at creation
3275                 * time, we need a lock to ensure we only try
3276                 * to do it once
3277                 */
3278                static DEFINE_SPINLOCK(lock);
3279                spin_lock(&lock);
3280                if (inode_unhashed(inode))
3281                        __insert_inode_hash(inode,
3282                                            inode->i_ino + inode->i_generation);
3283                spin_unlock(&lock);
3284        }
3285
3286        fh[0] = inode->i_generation;
3287        fh[1] = inode->i_ino;
3288        fh[2] = ((__u64)inode->i_ino) >> 32;
3289
3290        *len = 3;
3291        return 1;
3292}
3293
3294static const struct export_operations shmem_export_ops = {
3295        .get_parent     = shmem_get_parent,
3296        .encode_fh      = shmem_encode_fh,
3297        .fh_to_dentry   = shmem_fh_to_dentry,
3298};
3299
3300enum shmem_param {
3301        Opt_gid,
3302        Opt_huge,
3303        Opt_mode,
3304        Opt_mpol,
3305        Opt_nr_blocks,
3306        Opt_nr_inodes,
3307        Opt_size,
3308        Opt_uid,
3309        Opt_inode32,
3310        Opt_inode64,
3311};
3312
3313static const struct constant_table shmem_param_enums_huge[] = {
3314        {"never",       SHMEM_HUGE_NEVER },
3315        {"always",      SHMEM_HUGE_ALWAYS },
3316        {"within_size", SHMEM_HUGE_WITHIN_SIZE },
3317        {"advise",      SHMEM_HUGE_ADVISE },
3318        {}
3319};
3320
3321const struct fs_parameter_spec shmem_fs_parameters[] = {
3322        fsparam_u32   ("gid",           Opt_gid),
3323        fsparam_enum  ("huge",          Opt_huge,  shmem_param_enums_huge),
3324        fsparam_u32oct("mode",          Opt_mode),
3325        fsparam_string("mpol",          Opt_mpol),
3326        fsparam_string("nr_blocks",     Opt_nr_blocks),
3327        fsparam_string("nr_inodes",     Opt_nr_inodes),
3328        fsparam_string("size",          Opt_size),
3329        fsparam_u32   ("uid",           Opt_uid),
3330        fsparam_flag  ("inode32",       Opt_inode32),
3331        fsparam_flag  ("inode64",       Opt_inode64),
3332        {}
3333};
3334
3335static int shmem_parse_one(struct fs_context *fc, struct fs_parameter *param)
3336{
3337        struct shmem_options *ctx = fc->fs_private;
3338        struct fs_parse_result result;
3339        unsigned long long size;
3340        char *rest;
3341        int opt;
3342
3343        opt = fs_parse(fc, shmem_fs_parameters, param, &result);
3344        if (opt < 0)
3345                return opt;
3346
3347        switch (opt) {
3348        case Opt_size:
3349                size = memparse(param->string, &rest);
3350                if (*rest == '%') {
3351                        size <<= PAGE_SHIFT;
3352                        size *= totalram_pages();
3353                        do_div(size, 100);
3354                        rest++;
3355                }
3356                if (*rest)
3357                        goto bad_value;
3358                ctx->blocks = DIV_ROUND_UP(size, PAGE_SIZE);
3359                ctx->seen |= SHMEM_SEEN_BLOCKS;
3360                break;
3361        case Opt_nr_blocks:
3362                ctx->blocks = memparse(param->string, &rest);
3363                if (*rest)
3364                        goto bad_value;
3365                ctx->seen |= SHMEM_SEEN_BLOCKS;
3366                break;
3367        case Opt_nr_inodes:
3368                ctx->inodes = memparse(param->string, &rest);
3369                if (*rest)
3370                        goto bad_value;
3371                ctx->seen |= SHMEM_SEEN_INODES;
3372                break;
3373        case Opt_mode:
3374                ctx->mode = result.uint_32 & 07777;
3375                break;
3376        case Opt_uid:
3377                ctx->uid = make_kuid(current_user_ns(), result.uint_32);
3378                if (!uid_valid(ctx->uid))
3379                        goto bad_value;
3380                break;
3381        case Opt_gid:
3382                ctx->gid = make_kgid(current_user_ns(), result.uint_32);
3383                if (!gid_valid(ctx->gid))
3384                        goto bad_value;
3385                break;
3386        case Opt_huge:
3387                ctx->huge = result.uint_32;
3388                if (ctx->huge != SHMEM_HUGE_NEVER &&
3389                    !(IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) &&
3390                      has_transparent_hugepage()))
3391                        goto unsupported_parameter;
3392                ctx->seen |= SHMEM_SEEN_HUGE;
3393                break;
3394        case Opt_mpol:
3395                if (IS_ENABLED(CONFIG_NUMA)) {
3396                        mpol_put(ctx->mpol);
3397                        ctx->mpol = NULL;
3398                        if (mpol_parse_str(param->string, &ctx->mpol))
3399                                goto bad_value;
3400                        break;
3401                }
3402                goto unsupported_parameter;
3403        case Opt_inode32:
3404                ctx->full_inums = false;
3405                ctx->seen |= SHMEM_SEEN_INUMS;
3406                break;
3407        case Opt_inode64:
3408                if (sizeof(ino_t) < 8) {
3409                        return invalfc(fc,
3410                                       "Cannot use inode64 with <64bit inums in kernel\n");
3411                }
3412                ctx->full_inums = true;
3413                ctx->seen |= SHMEM_SEEN_INUMS;
3414                break;
3415        }
3416        return 0;
3417
3418unsupported_parameter:
3419        return invalfc(fc, "Unsupported parameter '%s'", param->key);
3420bad_value:
3421        return invalfc(fc, "Bad value for '%s'", param->key);
3422}
3423
3424static int shmem_parse_options(struct fs_context *fc, void *data)
3425{
3426        char *options = data;
3427
3428        if (options) {
3429                int err = security_sb_eat_lsm_opts(options, &fc->security);
3430                if (err)
3431                        return err;
3432        }
3433
3434        while (options != NULL) {
3435                char *this_char = options;
3436                for (;;) {
3437                        /*
3438                         * NUL-terminate this option: unfortunately,
3439                         * mount options form a comma-separated list,
3440                         * but mpol's nodelist may also contain commas.
3441                         */
3442                        options = strchr(options, ',');
3443                        if (options == NULL)
3444                                break;
3445                        options++;
3446                        if (!isdigit(*options)) {
3447                                options[-1] = '\0';
3448                                break;
3449                        }
3450                }
3451                if (*this_char) {
3452                        char *value = strchr(this_char, '=');
3453                        size_t len = 0;
3454                        int err;
3455
3456                        if (value) {
3457                                *value++ = '\0';
3458                                len = strlen(value);
3459                        }
3460                        err = vfs_parse_fs_string(fc, this_char, value, len);
3461                        if (err < 0)
3462                                return err;
3463                }
3464        }
3465        return 0;
3466}
3467
3468/*
3469 * Reconfigure a shmem filesystem.
3470 *
3471 * Note that we disallow change from limited->unlimited blocks/inodes while any
3472 * are in use; but we must separately disallow unlimited->limited, because in
3473 * that case we have no record of how much is already in use.
3474 */
3475static int shmem_reconfigure(struct fs_context *fc)
3476{
3477        struct shmem_options *ctx = fc->fs_private;
3478        struct shmem_sb_info *sbinfo = SHMEM_SB(fc->root->d_sb);
3479        unsigned long inodes;
3480        struct mempolicy *mpol = NULL;
3481        const char *err;
3482
3483        raw_spin_lock(&sbinfo->stat_lock);
3484        inodes = sbinfo->max_inodes - sbinfo->free_inodes;
3485        if ((ctx->seen & SHMEM_SEEN_BLOCKS) && ctx->blocks) {
3486                if (!sbinfo->max_blocks) {
3487                        err = "Cannot retroactively limit size";
3488                        goto out;
3489                }
3490                if (percpu_counter_compare(&sbinfo->used_blocks,
3491                                           ctx->blocks) > 0) {
3492                        err = "Too small a size for current use";
3493                        goto out;
3494                }
3495        }
3496        if ((ctx->seen & SHMEM_SEEN_INODES) && ctx->inodes) {
3497                if (!sbinfo->max_inodes) {
3498                        err = "Cannot retroactively limit inodes";
3499                        goto out;
3500                }
3501                if (ctx->inodes < inodes) {
3502                        err = "Too few inodes for current use";
3503                        goto out;
3504                }
3505        }
3506
3507        if ((ctx->seen & SHMEM_SEEN_INUMS) && !ctx->full_inums &&
3508            sbinfo->next_ino > UINT_MAX) {
3509                err = "Current inum too high to switch to 32-bit inums";
3510                goto out;
3511        }
3512
3513        if (ctx->seen & SHMEM_SEEN_HUGE)
3514                sbinfo->huge = ctx->huge;
3515        if (ctx->seen & SHMEM_SEEN_INUMS)
3516                sbinfo->full_inums = ctx->full_inums;
3517        if (ctx->seen & SHMEM_SEEN_BLOCKS)
3518                sbinfo->max_blocks  = ctx->blocks;
3519        if (ctx->seen & SHMEM_SEEN_INODES) {
3520                sbinfo->max_inodes  = ctx->inodes;
3521                sbinfo->free_inodes = ctx->inodes - inodes;
3522        }
3523
3524        /*
3525         * Preserve previous mempolicy unless mpol remount option was specified.
3526         */
3527        if (ctx->mpol) {
3528                mpol = sbinfo->mpol;
3529                sbinfo->mpol = ctx->mpol;       /* transfers initial ref */
3530                ctx->mpol = NULL;
3531        }
3532        raw_spin_unlock(&sbinfo->stat_lock);
3533        mpol_put(mpol);
3534        return 0;
3535out:
3536        raw_spin_unlock(&sbinfo->stat_lock);
3537        return invalfc(fc, "%s", err);
3538}
3539
3540static int shmem_show_options(struct seq_file *seq, struct dentry *root)
3541{
3542        struct shmem_sb_info *sbinfo = SHMEM_SB(root->d_sb);
3543
3544        if (sbinfo->max_blocks != shmem_default_max_blocks())
3545                seq_printf(seq, ",size=%luk",
3546                        sbinfo->max_blocks << (PAGE_SHIFT - 10));
3547        if (sbinfo->max_inodes != shmem_default_max_inodes())
3548                seq_printf(seq, ",nr_inodes=%lu", sbinfo->max_inodes);
3549        if (sbinfo->mode != (0777 | S_ISVTX))
3550                seq_printf(seq, ",mode=%03ho", sbinfo->mode);
3551        if (!uid_eq(sbinfo->uid, GLOBAL_ROOT_UID))
3552                seq_printf(seq, ",uid=%u",
3553                                from_kuid_munged(&init_user_ns, sbinfo->uid));
3554        if (!gid_eq(sbinfo->gid, GLOBAL_ROOT_GID))
3555                seq_printf(seq, ",gid=%u",
3556                                from_kgid_munged(&init_user_ns, sbinfo->gid));
3557
3558        /*
3559         * Showing inode{64,32} might be useful even if it's the system default,
3560         * since then people don't have to resort to checking both here and
3561         * /proc/config.gz to confirm 64-bit inums were successfully applied
3562         * (which may not even exist if IKCONFIG_PROC isn't enabled).
3563         *
3564         * We hide it when inode64 isn't the default and we are using 32-bit
3565         * inodes, since that probably just means the feature isn't even under
3566         * consideration.
3567         *
3568         * As such:
3569         *
3570         *                     +-----------------+-----------------+
3571         *                     | TMPFS_INODE64=y | TMPFS_INODE64=n |
3572         *  +------------------+-----------------+-----------------+
3573         *  | full_inums=true  | show            | show            |
3574         *  | full_inums=false | show            | hide            |
3575         *  +------------------+-----------------+-----------------+
3576         *
3577         */
3578        if (IS_ENABLED(CONFIG_TMPFS_INODE64) || sbinfo->full_inums)
3579                seq_printf(seq, ",inode%d", (sbinfo->full_inums ? 64 : 32));
3580#ifdef CONFIG_TRANSPARENT_HUGEPAGE
3581        /* Rightly or wrongly, show huge mount option unmasked by shmem_huge */
3582        if (sbinfo->huge)
3583                seq_printf(seq, ",huge=%s", shmem_format_huge(sbinfo->huge));
3584#endif
3585        shmem_show_mpol(seq, sbinfo->mpol);
3586        return 0;
3587}
3588
3589#endif /* CONFIG_TMPFS */
3590
3591static void shmem_put_super(struct super_block *sb)
3592{
3593        struct shmem_sb_info *sbinfo = SHMEM_SB(sb);
3594
3595        free_percpu(sbinfo->ino_batch);
3596        percpu_counter_destroy(&sbinfo->used_blocks);
3597        mpol_put(sbinfo->mpol);
3598        kfree(sbinfo);
3599        sb->s_fs_info = NULL;
3600}
3601
3602static int shmem_fill_super(struct super_block *sb, struct fs_context *fc)
3603{
3604        struct shmem_options *ctx = fc->fs_private;
3605        struct inode *inode;
3606        struct shmem_sb_info *sbinfo;
3607
3608        /* Round up to L1_CACHE_BYTES to resist false sharing */
3609        sbinfo = kzalloc(max((int)sizeof(struct shmem_sb_info),
3610                                L1_CACHE_BYTES), GFP_KERNEL);
3611        if (!sbinfo)
3612                return -ENOMEM;
3613
3614        sb->s_fs_info = sbinfo;
3615
3616#ifdef CONFIG_TMPFS
3617        /*
3618         * Per default we only allow half of the physical ram per
3619         * tmpfs instance, limiting inodes to one per page of lowmem;
3620         * but the internal instance is left unlimited.
3621         */
3622        if (!(sb->s_flags & SB_KERNMOUNT)) {
3623                if (!(ctx->seen & SHMEM_SEEN_BLOCKS))
3624                        ctx->blocks = shmem_default_max_blocks();
3625                if (!(ctx->seen & SHMEM_SEEN_INODES))
3626                        ctx->inodes = shmem_default_max_inodes();
3627                if (!(ctx->seen & SHMEM_SEEN_INUMS))
3628                        ctx->full_inums = IS_ENABLED(CONFIG_TMPFS_INODE64);
3629        } else {
3630                sb->s_flags |= SB_NOUSER;
3631        }
3632        sb->s_export_op = &shmem_export_ops;
3633        sb->s_flags |= SB_NOSEC;
3634#else
3635        sb->s_flags |= SB_NOUSER;
3636#endif
3637        sbinfo->max_blocks = ctx->blocks;
3638        sbinfo->free_inodes = sbinfo->max_inodes = ctx->inodes;
3639        if (sb->s_flags & SB_KERNMOUNT) {
3640                sbinfo->ino_batch = alloc_percpu(ino_t);
3641                if (!sbinfo->ino_batch)
3642                        goto failed;
3643        }
3644        sbinfo->uid = ctx->uid;
3645        sbinfo->gid = ctx->gid;
3646        sbinfo->full_inums = ctx->full_inums;
3647        sbinfo->mode = ctx->mode;
3648        sbinfo->huge = ctx->huge;
3649        sbinfo->mpol = ctx->mpol;
3650        ctx->mpol = NULL;
3651
3652        raw_spin_lock_init(&sbinfo->stat_lock);
3653        if (percpu_counter_init(&sbinfo->used_blocks, 0, GFP_KERNEL))
3654                goto failed;
3655        spin_lock_init(&sbinfo->shrinklist_lock);
3656        INIT_LIST_HEAD(&sbinfo->shrinklist);
3657
3658        sb->s_maxbytes = MAX_LFS_FILESIZE;
3659        sb->s_blocksize = PAGE_SIZE;
3660        sb->s_blocksize_bits = PAGE_SHIFT;
3661        sb->s_magic = TMPFS_MAGIC;
3662        sb->s_op = &shmem_ops;
3663        sb->s_time_gran = 1;
3664#ifdef CONFIG_TMPFS_XATTR
3665        sb->s_xattr = shmem_xattr_handlers;
3666#endif
3667#ifdef CONFIG_TMPFS_POSIX_ACL
3668        sb->s_flags |= SB_POSIXACL;
3669#endif
3670        uuid_gen(&sb->s_uuid);
3671
3672        inode = shmem_get_inode(sb, NULL, S_IFDIR | sbinfo->mode, 0, VM_NORESERVE);
3673        if (!inode)
3674                goto failed;
3675        inode->i_uid = sbinfo->uid;
3676        inode->i_gid = sbinfo->gid;
3677        sb->s_root = d_make_root(inode);
3678        if (!sb->s_root)
3679                goto failed;
3680        return 0;
3681
3682failed:
3683        shmem_put_super(sb);
3684        return -ENOMEM;
3685}
3686
3687static int shmem_get_tree(struct fs_context *fc)
3688{
3689        return get_tree_nodev(fc, shmem_fill_super);
3690}
3691
3692static void shmem_free_fc(struct fs_context *fc)
3693{
3694        struct shmem_options *ctx = fc->fs_private;
3695
3696        if (ctx) {
3697                mpol_put(ctx->mpol);
3698                kfree(ctx);
3699        }
3700}
3701
3702static const struct fs_context_operations shmem_fs_context_ops = {
3703        .free                   = shmem_free_fc,
3704        .get_tree               = shmem_get_tree,
3705#ifdef CONFIG_TMPFS
3706        .parse_monolithic       = shmem_parse_options,
3707        .parse_param            = shmem_parse_one,
3708        .reconfigure            = shmem_reconfigure,
3709#endif
3710};
3711
3712static struct kmem_cache *shmem_inode_cachep;
3713
3714static struct inode *shmem_alloc_inode(struct super_block *sb)
3715{
3716        struct shmem_inode_info *info;
3717        info = kmem_cache_alloc(shmem_inode_cachep, GFP_KERNEL);
3718        if (!info)
3719                return NULL;
3720        return &info->vfs_inode;
3721}
3722
3723static void shmem_free_in_core_inode(struct inode *inode)
3724{
3725        if (S_ISLNK(inode->i_mode))
3726                kfree(inode->i_link);
3727        kmem_cache_free(shmem_inode_cachep, SHMEM_I(inode));
3728}
3729
3730static void shmem_destroy_inode(struct inode *inode)
3731{
3732        if (S_ISREG(inode->i_mode))
3733                mpol_free_shared_policy(&SHMEM_I(inode)->policy);
3734}
3735
3736static void shmem_init_inode(void *foo)
3737{
3738        struct shmem_inode_info *info = foo;
3739        inode_init_once(&info->vfs_inode);
3740}
3741
3742static void shmem_init_inodecache(void)
3743{
3744        shmem_inode_cachep = kmem_cache_create("shmem_inode_cache",
3745                                sizeof(struct shmem_inode_info),
3746                                0, SLAB_PANIC|SLAB_ACCOUNT, shmem_init_inode);
3747}
3748
3749static void shmem_destroy_inodecache(void)
3750{
3751        kmem_cache_destroy(shmem_inode_cachep);
3752}
3753
3754const struct address_space_operations shmem_aops = {
3755        .writepage      = shmem_writepage,
3756        .set_page_dirty = __set_page_dirty_no_writeback,
3757#ifdef CONFIG_TMPFS
3758        .write_begin    = shmem_write_begin,
3759        .write_end      = shmem_write_end,
3760#endif
3761#ifdef CONFIG_MIGRATION
3762        .migratepage    = migrate_page,
3763#endif
3764        .error_remove_page = generic_error_remove_page,
3765};
3766EXPORT_SYMBOL(shmem_aops);
3767
3768static const struct file_operations shmem_file_operations = {
3769        .mmap           = shmem_mmap,
3770        .get_unmapped_area = shmem_get_unmapped_area,
3771#ifdef CONFIG_TMPFS
3772        .llseek         = shmem_file_llseek,
3773        .read_iter      = shmem_file_read_iter,
3774        .write_iter     = generic_file_write_iter,
3775        .fsync          = noop_fsync,
3776        .splice_read    = generic_file_splice_read,
3777        .splice_write   = iter_file_splice_write,
3778        .fallocate      = shmem_fallocate,
3779#endif
3780};
3781
3782static const struct inode_operations shmem_inode_operations = {
3783        .getattr        = shmem_getattr,
3784        .setattr        = shmem_setattr,
3785#ifdef CONFIG_TMPFS_XATTR
3786        .listxattr      = shmem_listxattr,
3787        .set_acl        = simple_set_acl,
3788#endif
3789};
3790
3791static const struct inode_operations shmem_dir_inode_operations = {
3792#ifdef CONFIG_TMPFS
3793        .create         = shmem_create,
3794        .lookup         = simple_lookup,
3795        .link           = shmem_link,
3796        .unlink         = shmem_unlink,
3797        .symlink        = shmem_symlink,
3798        .mkdir          = shmem_mkdir,
3799        .rmdir          = shmem_rmdir,
3800        .mknod          = shmem_mknod,
3801        .rename         = shmem_rename2,
3802        .tmpfile        = shmem_tmpfile,
3803#endif
3804#ifdef CONFIG_TMPFS_XATTR
3805        .listxattr      = shmem_listxattr,
3806#endif
3807#ifdef CONFIG_TMPFS_POSIX_ACL
3808        .setattr        = shmem_setattr,
3809        .set_acl        = simple_set_acl,
3810#endif
3811};
3812
3813static const struct inode_operations shmem_special_inode_operations = {
3814#ifdef CONFIG_TMPFS_XATTR
3815        .listxattr      = shmem_listxattr,
3816#endif
3817#ifdef CONFIG_TMPFS_POSIX_ACL
3818        .setattr        = shmem_setattr,
3819        .set_acl        = simple_set_acl,
3820#endif
3821};
3822
3823static const struct super_operations shmem_ops = {
3824        .alloc_inode    = shmem_alloc_inode,
3825        .free_inode     = shmem_free_in_core_inode,
3826        .destroy_inode  = shmem_destroy_inode,
3827#ifdef CONFIG_TMPFS
3828        .statfs         = shmem_statfs,
3829        .show_options   = shmem_show_options,
3830#endif
3831        .evict_inode    = shmem_evict_inode,
3832        .drop_inode     = generic_delete_inode,
3833        .put_super      = shmem_put_super,
3834#ifdef CONFIG_TRANSPARENT_HUGEPAGE
3835        .nr_cached_objects      = shmem_unused_huge_count,
3836        .free_cached_objects    = shmem_unused_huge_scan,
3837#endif
3838};
3839
3840static const struct vm_operations_struct shmem_vm_ops = {
3841        .fault          = shmem_fault,
3842        .map_pages      = filemap_map_pages,
3843#ifdef CONFIG_NUMA
3844        .set_policy     = shmem_set_policy,
3845        .get_policy     = shmem_get_policy,
3846#endif
3847};
3848
3849int shmem_init_fs_context(struct fs_context *fc)
3850{
3851        struct shmem_options *ctx;
3852
3853        ctx = kzalloc(sizeof(struct shmem_options), GFP_KERNEL);
3854        if (!ctx)
3855                return -ENOMEM;
3856
3857        ctx->mode = 0777 | S_ISVTX;
3858        ctx->uid = current_fsuid();
3859        ctx->gid = current_fsgid();
3860
3861        fc->fs_private = ctx;
3862        fc->ops = &shmem_fs_context_ops;
3863        return 0;
3864}
3865
3866static struct file_system_type shmem_fs_type = {
3867        .owner          = THIS_MODULE,
3868        .name           = "tmpfs",
3869        .init_fs_context = shmem_init_fs_context,
3870#ifdef CONFIG_TMPFS
3871        .parameters     = shmem_fs_parameters,
3872#endif
3873        .kill_sb        = kill_litter_super,
3874        .fs_flags       = FS_USERNS_MOUNT,
3875};
3876
3877int __init shmem_init(void)
3878{
3879        int error;
3880
3881        shmem_init_inodecache();
3882
3883        error = register_filesystem(&shmem_fs_type);
3884        if (error) {
3885                pr_err("Could not register tmpfs\n");
3886                goto out2;
3887        }
3888
3889        shm_mnt = kern_mount(&shmem_fs_type);
3890        if (IS_ERR(shm_mnt)) {
3891                error = PTR_ERR(shm_mnt);
3892                pr_err("Could not kern_mount tmpfs\n");
3893                goto out1;
3894        }
3895
3896#ifdef CONFIG_TRANSPARENT_HUGEPAGE
3897        if (has_transparent_hugepage() && shmem_huge > SHMEM_HUGE_DENY)
3898                SHMEM_SB(shm_mnt->mnt_sb)->huge = shmem_huge;
3899        else
3900                shmem_huge = SHMEM_HUGE_NEVER; /* just in case it was patched */
3901#endif
3902        return 0;
3903
3904out1:
3905        unregister_filesystem(&shmem_fs_type);
3906out2:
3907        shmem_destroy_inodecache();
3908        shm_mnt = ERR_PTR(error);
3909        return error;
3910}
3911
3912#if defined(CONFIG_TRANSPARENT_HUGEPAGE) && defined(CONFIG_SYSFS)
3913static ssize_t shmem_enabled_show(struct kobject *kobj,
3914                                  struct kobj_attribute *attr, char *buf)
3915{
3916        static const int values[] = {
3917                SHMEM_HUGE_ALWAYS,
3918                SHMEM_HUGE_WITHIN_SIZE,
3919                SHMEM_HUGE_ADVISE,
3920                SHMEM_HUGE_NEVER,
3921                SHMEM_HUGE_DENY,
3922                SHMEM_HUGE_FORCE,
3923        };
3924        int len = 0;
3925        int i;
3926
3927        for (i = 0; i < ARRAY_SIZE(values); i++) {
3928                len += sysfs_emit_at(buf, len,
3929                                     shmem_huge == values[i] ? "%s[%s]" : "%s%s",
3930                                     i ? " " : "",
3931                                     shmem_format_huge(values[i]));
3932        }
3933
3934        len += sysfs_emit_at(buf, len, "\n");
3935
3936        return len;
3937}
3938
3939static ssize_t shmem_enabled_store(struct kobject *kobj,
3940                struct kobj_attribute *attr, const char *buf, size_t count)
3941{
3942        char tmp[16];
3943        int huge;
3944
3945        if (count + 1 > sizeof(tmp))
3946                return -EINVAL;
3947        memcpy(tmp, buf, count);
3948        tmp[count] = '\0';
3949        if (count && tmp[count - 1] == '\n')
3950                tmp[count - 1] = '\0';
3951
3952        huge = shmem_parse_huge(tmp);
3953        if (huge == -EINVAL)
3954                return -EINVAL;
3955        if (!has_transparent_hugepage() &&
3956                        huge != SHMEM_HUGE_NEVER && huge != SHMEM_HUGE_DENY)
3957                return -EINVAL;
3958
3959        shmem_huge = huge;
3960        if (shmem_huge > SHMEM_HUGE_DENY)
3961                SHMEM_SB(shm_mnt->mnt_sb)->huge = shmem_huge;
3962        return count;
3963}
3964
3965struct kobj_attribute shmem_enabled_attr =
3966        __ATTR(shmem_enabled, 0644, shmem_enabled_show, shmem_enabled_store);
3967#endif /* CONFIG_TRANSPARENT_HUGEPAGE && CONFIG_SYSFS */
3968
3969#else /* !CONFIG_SHMEM */
3970
3971/*
3972 * tiny-shmem: simple shmemfs and tmpfs using ramfs code
3973 *
3974 * This is intended for small system where the benefits of the full
3975 * shmem code (swap-backed and resource-limited) are outweighed by
3976 * their complexity. On systems without swap this code should be
3977 * effectively equivalent, but much lighter weight.
3978 */
3979
3980static struct file_system_type shmem_fs_type = {
3981        .name           = "tmpfs",
3982        .init_fs_context = ramfs_init_fs_context,
3983        .parameters     = ramfs_fs_parameters,
3984        .kill_sb        = kill_litter_super,
3985        .fs_flags       = FS_USERNS_MOUNT,
3986};
3987
3988int __init shmem_init(void)
3989{
3990        BUG_ON(register_filesystem(&shmem_fs_type) != 0);
3991
3992        shm_mnt = kern_mount(&shmem_fs_type);
3993        BUG_ON(IS_ERR(shm_mnt));
3994
3995        return 0;
3996}
3997
3998int shmem_unuse(unsigned int type, bool frontswap,
3999                unsigned long *fs_pages_to_unuse)
4000{
4001        return 0;
4002}
4003
4004int shmem_lock(struct file *file, int lock, struct ucounts *ucounts)
4005{
4006        return 0;
4007}
4008
4009void shmem_unlock_mapping(struct address_space *mapping)
4010{
4011}
4012
4013#ifdef CONFIG_MMU
4014unsigned long shmem_get_unmapped_area(struct file *file,
4015                                      unsigned long addr, unsigned long len,
4016                                      unsigned long pgoff, unsigned long flags)
4017{
4018        return current->mm->get_unmapped_area(file, addr, len, pgoff, flags);
4019}
4020#endif
4021
4022void shmem_truncate_range(struct inode *inode, loff_t lstart, loff_t lend)
4023{
4024        truncate_inode_pages_range(inode->i_mapping, lstart, lend);
4025}
4026EXPORT_SYMBOL_GPL(shmem_truncate_range);
4027
4028#define shmem_vm_ops                            generic_file_vm_ops
4029#define shmem_file_operations                   ramfs_file_operations
4030#define shmem_get_inode(sb, dir, mode, dev, flags)      ramfs_get_inode(sb, dir, mode, dev)
4031#define shmem_acct_size(flags, size)            0
4032#define shmem_unacct_size(flags, size)          do {} while (0)
4033
4034#endif /* CONFIG_SHMEM */
4035
4036/* common code */
4037
4038static struct file *__shmem_file_setup(struct vfsmount *mnt, const char *name, loff_t size,
4039                                       unsigned long flags, unsigned int i_flags)
4040{
4041        struct inode *inode;
4042        struct file *res;
4043
4044        if (IS_ERR(mnt))
4045                return ERR_CAST(mnt);
4046
4047        if (size < 0 || size > MAX_LFS_FILESIZE)
4048                return ERR_PTR(-EINVAL);
4049
4050        if (shmem_acct_size(flags, size))
4051                return ERR_PTR(-ENOMEM);
4052
4053        inode = shmem_get_inode(mnt->mnt_sb, NULL, S_IFREG | S_IRWXUGO, 0,
4054                                flags);
4055        if (unlikely(!inode)) {
4056                shmem_unacct_size(flags, size);
4057                return ERR_PTR(-ENOSPC);
4058        }
4059        inode->i_flags |= i_flags;
4060        inode->i_size = size;
4061        clear_nlink(inode);     /* It is unlinked */
4062        res = ERR_PTR(ramfs_nommu_expand_for_mapping(inode, size));
4063        if (!IS_ERR(res))
4064                res = alloc_file_pseudo(inode, mnt, name, O_RDWR,
4065                                &shmem_file_operations);
4066        if (IS_ERR(res))
4067                iput(inode);
4068        return res;
4069}
4070
4071/**
4072 * shmem_kernel_file_setup - get an unlinked file living in tmpfs which must be
4073 *      kernel internal.  There will be NO LSM permission checks against the
4074 *      underlying inode.  So users of this interface must do LSM checks at a
4075 *      higher layer.  The users are the big_key and shm implementations.  LSM
4076 *      checks are provided at the key or shm level rather than the inode.
4077 * @name: name for dentry (to be seen in /proc/<pid>/maps
4078 * @size: size to be set for the file
4079 * @flags: VM_NORESERVE suppresses pre-accounting of the entire object size
4080 */
4081struct file *shmem_kernel_file_setup(const char *name, loff_t size, unsigned long flags)
4082{
4083        return __shmem_file_setup(shm_mnt, name, size, flags, S_PRIVATE);
4084}
4085
4086/**
4087 * shmem_file_setup - get an unlinked file living in tmpfs
4088 * @name: name for dentry (to be seen in /proc/<pid>/maps
4089 * @size: size to be set for the file
4090 * @flags: VM_NORESERVE suppresses pre-accounting of the entire object size
4091 */
4092struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags)
4093{
4094        return __shmem_file_setup(shm_mnt, name, size, flags, 0);
4095}
4096EXPORT_SYMBOL_GPL(shmem_file_setup);
4097
4098/**
4099 * shmem_file_setup_with_mnt - get an unlinked file living in tmpfs
4100 * @mnt: the tmpfs mount where the file will be created
4101 * @name: name for dentry (to be seen in /proc/<pid>/maps
4102 * @size: size to be set for the file
4103 * @flags: VM_NORESERVE suppresses pre-accounting of the entire object size
4104 */
4105struct file *shmem_file_setup_with_mnt(struct vfsmount *mnt, const char *name,
4106                                       loff_t size, unsigned long flags)
4107{
4108        return __shmem_file_setup(mnt, name, size, flags, 0);
4109}
4110EXPORT_SYMBOL_GPL(shmem_file_setup_with_mnt);
4111
4112/**
4113 * shmem_zero_setup - setup a shared anonymous mapping
4114 * @vma: the vma to be mmapped is prepared by do_mmap
4115 */
4116int shmem_zero_setup(struct vm_area_struct *vma)
4117{
4118        struct file *file;
4119        loff_t size = vma->vm_end - vma->vm_start;
4120
4121        /*
4122         * Cloning a new file under mmap_lock leads to a lock ordering conflict
4123         * between XFS directory reading and selinux: since this file is only
4124         * accessible to the user through its mapping, use S_PRIVATE flag to
4125         * bypass file security, in the same way as shmem_kernel_file_setup().
4126         */
4127        file = shmem_kernel_file_setup("dev/zero", size, vma->vm_flags);
4128        if (IS_ERR(file))
4129                return PTR_ERR(file);
4130
4131        if (vma->vm_file)
4132                fput(vma->vm_file);
4133        vma->vm_file = file;
4134        vma->vm_ops = &shmem_vm_ops;
4135
4136        if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE) &&
4137                        ((vma->vm_start + ~HPAGE_PMD_MASK) & HPAGE_PMD_MASK) <
4138                        (vma->vm_end & HPAGE_PMD_MASK)) {
4139                khugepaged_enter(vma, vma->vm_flags);
4140        }
4141
4142        return 0;
4143}
4144
4145/**
4146 * shmem_read_mapping_page_gfp - read into page cache, using specified page allocation flags.
4147 * @mapping:    the page's address_space
4148 * @index:      the page index
4149 * @gfp:        the page allocator flags to use if allocating
4150 *
4151 * This behaves as a tmpfs "read_cache_page_gfp(mapping, index, gfp)",
4152 * with any new page allocations done using the specified allocation flags.
4153 * But read_cache_page_gfp() uses the ->readpage() method: which does not
4154 * suit tmpfs, since it may have pages in swapcache, and needs to find those
4155 * for itself; although drivers/gpu/drm i915 and ttm rely upon this support.
4156 *
4157 * i915_gem_object_get_pages_gtt() mixes __GFP_NORETRY | __GFP_NOWARN in
4158 * with the mapping_gfp_mask(), to avoid OOMing the machine unnecessarily.
4159 */
4160struct page *shmem_read_mapping_page_gfp(struct address_space *mapping,
4161                                         pgoff_t index, gfp_t gfp)
4162{
4163#ifdef CONFIG_SHMEM
4164        struct inode *inode = mapping->host;
4165        struct page *page;
4166        int error;
4167
4168        BUG_ON(!shmem_mapping(mapping));
4169        error = shmem_getpage_gfp(inode, index, &page, SGP_CACHE,
4170                                  gfp, NULL, NULL, NULL);
4171        if (error)
4172                page = ERR_PTR(error);
4173        else
4174                unlock_page(page);
4175        return page;
4176#else
4177        /*
4178         * The tiny !SHMEM case uses ramfs without swap
4179         */
4180        return read_cache_page_gfp(mapping, index, gfp);
4181#endif
4182}
4183EXPORT_SYMBOL_GPL(shmem_read_mapping_page_gfp);
4184