mount options: fix tmpfs
[safe/jmp/linux-2.6] / mm / shmem.c
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-2005 Hugh Dickins.
10  * Copyright (C) 2002-2005 VERITAS Software Corporation.
11  * Copyright (C) 2004 Andi Kleen, SuSE Labs
12  *
13  * Extended attribute support for tmpfs:
14  * Copyright (c) 2004, Luke Kenneth Casson Leighton <lkcl@lkcl.net>
15  * Copyright (c) 2004 Red Hat, Inc., James Morris <jmorris@redhat.com>
16  *
17  * This file is released under the GPL.
18  */
19
20 /*
21  * This virtual memory filesystem is heavily based on the ramfs. It
22  * extends ramfs by the ability to use swap and honor resource limits
23  * which makes it a completely usable filesystem.
24  */
25
26 #include <linux/module.h>
27 #include <linux/init.h>
28 #include <linux/fs.h>
29 #include <linux/xattr.h>
30 #include <linux/exportfs.h>
31 #include <linux/generic_acl.h>
32 #include <linux/mm.h>
33 #include <linux/mman.h>
34 #include <linux/file.h>
35 #include <linux/swap.h>
36 #include <linux/pagemap.h>
37 #include <linux/string.h>
38 #include <linux/slab.h>
39 #include <linux/backing-dev.h>
40 #include <linux/shmem_fs.h>
41 #include <linux/mount.h>
42 #include <linux/writeback.h>
43 #include <linux/vfs.h>
44 #include <linux/blkdev.h>
45 #include <linux/security.h>
46 #include <linux/swapops.h>
47 #include <linux/mempolicy.h>
48 #include <linux/namei.h>
49 #include <linux/ctype.h>
50 #include <linux/migrate.h>
51 #include <linux/highmem.h>
52 #include <linux/seq_file.h>
53
54 #include <asm/uaccess.h>
55 #include <asm/div64.h>
56 #include <asm/pgtable.h>
57
58 /* This magic number is used in glibc for posix shared memory */
59 #define TMPFS_MAGIC     0x01021994
60
61 #define ENTRIES_PER_PAGE (PAGE_CACHE_SIZE/sizeof(unsigned long))
62 #define ENTRIES_PER_PAGEPAGE (ENTRIES_PER_PAGE*ENTRIES_PER_PAGE)
63 #define BLOCKS_PER_PAGE  (PAGE_CACHE_SIZE/512)
64
65 #define SHMEM_MAX_INDEX  (SHMEM_NR_DIRECT + (ENTRIES_PER_PAGEPAGE/2) * (ENTRIES_PER_PAGE+1))
66 #define SHMEM_MAX_BYTES  ((unsigned long long)SHMEM_MAX_INDEX << PAGE_CACHE_SHIFT)
67
68 #define VM_ACCT(size)    (PAGE_CACHE_ALIGN(size) >> PAGE_SHIFT)
69
70 /* info->flags needs VM_flags to handle pagein/truncate races efficiently */
71 #define SHMEM_PAGEIN     VM_READ
72 #define SHMEM_TRUNCATE   VM_WRITE
73
74 /* Definition to limit shmem_truncate's steps between cond_rescheds */
75 #define LATENCY_LIMIT    64
76
77 /* Pretend that each entry is of this size in directory's i_size */
78 #define BOGO_DIRENT_SIZE 20
79
80 /* Flag allocation requirements to shmem_getpage and shmem_swp_alloc */
81 enum sgp_type {
82         SGP_READ,       /* don't exceed i_size, don't allocate page */
83         SGP_CACHE,      /* don't exceed i_size, may allocate page */
84         SGP_DIRTY,      /* like SGP_CACHE, but set new page dirty */
85         SGP_WRITE,      /* may exceed i_size, may allocate page */
86 };
87
88 static unsigned long shmem_default_max_blocks(void)
89 {
90         return totalram_pages / 2;
91 }
92
93 static unsigned long shmem_default_max_inodes(void)
94 {
95         return min(totalram_pages - totalhigh_pages, totalram_pages / 2);
96 }
97
98 static int shmem_getpage(struct inode *inode, unsigned long idx,
99                          struct page **pagep, enum sgp_type sgp, int *type);
100
101 static inline struct page *shmem_dir_alloc(gfp_t gfp_mask)
102 {
103         /*
104          * The above definition of ENTRIES_PER_PAGE, and the use of
105          * BLOCKS_PER_PAGE on indirect pages, assume PAGE_CACHE_SIZE:
106          * might be reconsidered if it ever diverges from PAGE_SIZE.
107          *
108          * Mobility flags are masked out as swap vectors cannot move
109          */
110         return alloc_pages((gfp_mask & ~GFP_MOVABLE_MASK) | __GFP_ZERO,
111                                 PAGE_CACHE_SHIFT-PAGE_SHIFT);
112 }
113
114 static inline void shmem_dir_free(struct page *page)
115 {
116         __free_pages(page, PAGE_CACHE_SHIFT-PAGE_SHIFT);
117 }
118
119 static struct page **shmem_dir_map(struct page *page)
120 {
121         return (struct page **)kmap_atomic(page, KM_USER0);
122 }
123
124 static inline void shmem_dir_unmap(struct page **dir)
125 {
126         kunmap_atomic(dir, KM_USER0);
127 }
128
129 static swp_entry_t *shmem_swp_map(struct page *page)
130 {
131         return (swp_entry_t *)kmap_atomic(page, KM_USER1);
132 }
133
134 static inline void shmem_swp_balance_unmap(void)
135 {
136         /*
137          * When passing a pointer to an i_direct entry, to code which
138          * also handles indirect entries and so will shmem_swp_unmap,
139          * we must arrange for the preempt count to remain in balance.
140          * What kmap_atomic of a lowmem page does depends on config
141          * and architecture, so pretend to kmap_atomic some lowmem page.
142          */
143         (void) kmap_atomic(ZERO_PAGE(0), KM_USER1);
144 }
145
146 static inline void shmem_swp_unmap(swp_entry_t *entry)
147 {
148         kunmap_atomic(entry, KM_USER1);
149 }
150
151 static inline struct shmem_sb_info *SHMEM_SB(struct super_block *sb)
152 {
153         return sb->s_fs_info;
154 }
155
156 /*
157  * shmem_file_setup pre-accounts the whole fixed size of a VM object,
158  * for shared memory and for shared anonymous (/dev/zero) mappings
159  * (unless MAP_NORESERVE and sysctl_overcommit_memory <= 1),
160  * consistent with the pre-accounting of private mappings ...
161  */
162 static inline int shmem_acct_size(unsigned long flags, loff_t size)
163 {
164         return (flags & VM_ACCOUNT)?
165                 security_vm_enough_memory(VM_ACCT(size)): 0;
166 }
167
168 static inline void shmem_unacct_size(unsigned long flags, loff_t size)
169 {
170         if (flags & VM_ACCOUNT)
171                 vm_unacct_memory(VM_ACCT(size));
172 }
173
174 /*
175  * ... whereas tmpfs objects are accounted incrementally as
176  * pages are allocated, in order to allow huge sparse files.
177  * shmem_getpage reports shmem_acct_block failure as -ENOSPC not -ENOMEM,
178  * so that a failure on a sparse tmpfs mapping will give SIGBUS not OOM.
179  */
180 static inline int shmem_acct_block(unsigned long flags)
181 {
182         return (flags & VM_ACCOUNT)?
183                 0: security_vm_enough_memory(VM_ACCT(PAGE_CACHE_SIZE));
184 }
185
186 static inline void shmem_unacct_blocks(unsigned long flags, long pages)
187 {
188         if (!(flags & VM_ACCOUNT))
189                 vm_unacct_memory(pages * VM_ACCT(PAGE_CACHE_SIZE));
190 }
191
192 static const struct super_operations shmem_ops;
193 static const struct address_space_operations shmem_aops;
194 static const struct file_operations shmem_file_operations;
195 static const struct inode_operations shmem_inode_operations;
196 static const struct inode_operations shmem_dir_inode_operations;
197 static const struct inode_operations shmem_special_inode_operations;
198 static struct vm_operations_struct shmem_vm_ops;
199
200 static struct backing_dev_info shmem_backing_dev_info  __read_mostly = {
201         .ra_pages       = 0,    /* No readahead */
202         .capabilities   = BDI_CAP_NO_ACCT_DIRTY | BDI_CAP_NO_WRITEBACK,
203         .unplug_io_fn   = default_unplug_io_fn,
204 };
205
206 static LIST_HEAD(shmem_swaplist);
207 static DEFINE_MUTEX(shmem_swaplist_mutex);
208
209 static void shmem_free_blocks(struct inode *inode, long pages)
210 {
211         struct shmem_sb_info *sbinfo = SHMEM_SB(inode->i_sb);
212         if (sbinfo->max_blocks) {
213                 spin_lock(&sbinfo->stat_lock);
214                 sbinfo->free_blocks += pages;
215                 inode->i_blocks -= pages*BLOCKS_PER_PAGE;
216                 spin_unlock(&sbinfo->stat_lock);
217         }
218 }
219
220 static int shmem_reserve_inode(struct super_block *sb)
221 {
222         struct shmem_sb_info *sbinfo = SHMEM_SB(sb);
223         if (sbinfo->max_inodes) {
224                 spin_lock(&sbinfo->stat_lock);
225                 if (!sbinfo->free_inodes) {
226                         spin_unlock(&sbinfo->stat_lock);
227                         return -ENOSPC;
228                 }
229                 sbinfo->free_inodes--;
230                 spin_unlock(&sbinfo->stat_lock);
231         }
232         return 0;
233 }
234
235 static void shmem_free_inode(struct super_block *sb)
236 {
237         struct shmem_sb_info *sbinfo = SHMEM_SB(sb);
238         if (sbinfo->max_inodes) {
239                 spin_lock(&sbinfo->stat_lock);
240                 sbinfo->free_inodes++;
241                 spin_unlock(&sbinfo->stat_lock);
242         }
243 }
244
245 /*
246  * shmem_recalc_inode - recalculate the size of an inode
247  *
248  * @inode: inode to recalc
249  *
250  * We have to calculate the free blocks since the mm can drop
251  * undirtied hole pages behind our back.
252  *
253  * But normally   info->alloced == inode->i_mapping->nrpages + info->swapped
254  * So mm freed is info->alloced - (inode->i_mapping->nrpages + info->swapped)
255  *
256  * It has to be called with the spinlock held.
257  */
258 static void shmem_recalc_inode(struct inode *inode)
259 {
260         struct shmem_inode_info *info = SHMEM_I(inode);
261         long freed;
262
263         freed = info->alloced - info->swapped - inode->i_mapping->nrpages;
264         if (freed > 0) {
265                 info->alloced -= freed;
266                 shmem_unacct_blocks(info->flags, freed);
267                 shmem_free_blocks(inode, freed);
268         }
269 }
270
271 /*
272  * shmem_swp_entry - find the swap vector position in the info structure
273  *
274  * @info:  info structure for the inode
275  * @index: index of the page to find
276  * @page:  optional page to add to the structure. Has to be preset to
277  *         all zeros
278  *
279  * If there is no space allocated yet it will return NULL when
280  * page is NULL, else it will use the page for the needed block,
281  * setting it to NULL on return to indicate that it has been used.
282  *
283  * The swap vector is organized the following way:
284  *
285  * There are SHMEM_NR_DIRECT entries directly stored in the
286  * shmem_inode_info structure. So small files do not need an addional
287  * allocation.
288  *
289  * For pages with index > SHMEM_NR_DIRECT there is the pointer
290  * i_indirect which points to a page which holds in the first half
291  * doubly indirect blocks, in the second half triple indirect blocks:
292  *
293  * For an artificial ENTRIES_PER_PAGE = 4 this would lead to the
294  * following layout (for SHMEM_NR_DIRECT == 16):
295  *
296  * i_indirect -> dir --> 16-19
297  *            |      +-> 20-23
298  *            |
299  *            +-->dir2 --> 24-27
300  *            |        +-> 28-31
301  *            |        +-> 32-35
302  *            |        +-> 36-39
303  *            |
304  *            +-->dir3 --> 40-43
305  *                     +-> 44-47
306  *                     +-> 48-51
307  *                     +-> 52-55
308  */
309 static swp_entry_t *shmem_swp_entry(struct shmem_inode_info *info, unsigned long index, struct page **page)
310 {
311         unsigned long offset;
312         struct page **dir;
313         struct page *subdir;
314
315         if (index < SHMEM_NR_DIRECT) {
316                 shmem_swp_balance_unmap();
317                 return info->i_direct+index;
318         }
319         if (!info->i_indirect) {
320                 if (page) {
321                         info->i_indirect = *page;
322                         *page = NULL;
323                 }
324                 return NULL;                    /* need another page */
325         }
326
327         index -= SHMEM_NR_DIRECT;
328         offset = index % ENTRIES_PER_PAGE;
329         index /= ENTRIES_PER_PAGE;
330         dir = shmem_dir_map(info->i_indirect);
331
332         if (index >= ENTRIES_PER_PAGE/2) {
333                 index -= ENTRIES_PER_PAGE/2;
334                 dir += ENTRIES_PER_PAGE/2 + index/ENTRIES_PER_PAGE;
335                 index %= ENTRIES_PER_PAGE;
336                 subdir = *dir;
337                 if (!subdir) {
338                         if (page) {
339                                 *dir = *page;
340                                 *page = NULL;
341                         }
342                         shmem_dir_unmap(dir);
343                         return NULL;            /* need another page */
344                 }
345                 shmem_dir_unmap(dir);
346                 dir = shmem_dir_map(subdir);
347         }
348
349         dir += index;
350         subdir = *dir;
351         if (!subdir) {
352                 if (!page || !(subdir = *page)) {
353                         shmem_dir_unmap(dir);
354                         return NULL;            /* need a page */
355                 }
356                 *dir = subdir;
357                 *page = NULL;
358         }
359         shmem_dir_unmap(dir);
360         return shmem_swp_map(subdir) + offset;
361 }
362
363 static void shmem_swp_set(struct shmem_inode_info *info, swp_entry_t *entry, unsigned long value)
364 {
365         long incdec = value? 1: -1;
366
367         entry->val = value;
368         info->swapped += incdec;
369         if ((unsigned long)(entry - info->i_direct) >= SHMEM_NR_DIRECT) {
370                 struct page *page = kmap_atomic_to_page(entry);
371                 set_page_private(page, page_private(page) + incdec);
372         }
373 }
374
375 /*
376  * shmem_swp_alloc - get the position of the swap entry for the page.
377  *                   If it does not exist allocate the entry.
378  *
379  * @info:       info structure for the inode
380  * @index:      index of the page to find
381  * @sgp:        check and recheck i_size? skip allocation?
382  */
383 static swp_entry_t *shmem_swp_alloc(struct shmem_inode_info *info, unsigned long index, enum sgp_type sgp)
384 {
385         struct inode *inode = &info->vfs_inode;
386         struct shmem_sb_info *sbinfo = SHMEM_SB(inode->i_sb);
387         struct page *page = NULL;
388         swp_entry_t *entry;
389
390         if (sgp != SGP_WRITE &&
391             ((loff_t) index << PAGE_CACHE_SHIFT) >= i_size_read(inode))
392                 return ERR_PTR(-EINVAL);
393
394         while (!(entry = shmem_swp_entry(info, index, &page))) {
395                 if (sgp == SGP_READ)
396                         return shmem_swp_map(ZERO_PAGE(0));
397                 /*
398                  * Test free_blocks against 1 not 0, since we have 1 data
399                  * page (and perhaps indirect index pages) yet to allocate:
400                  * a waste to allocate index if we cannot allocate data.
401                  */
402                 if (sbinfo->max_blocks) {
403                         spin_lock(&sbinfo->stat_lock);
404                         if (sbinfo->free_blocks <= 1) {
405                                 spin_unlock(&sbinfo->stat_lock);
406                                 return ERR_PTR(-ENOSPC);
407                         }
408                         sbinfo->free_blocks--;
409                         inode->i_blocks += BLOCKS_PER_PAGE;
410                         spin_unlock(&sbinfo->stat_lock);
411                 }
412
413                 spin_unlock(&info->lock);
414                 page = shmem_dir_alloc(mapping_gfp_mask(inode->i_mapping));
415                 if (page)
416                         set_page_private(page, 0);
417                 spin_lock(&info->lock);
418
419                 if (!page) {
420                         shmem_free_blocks(inode, 1);
421                         return ERR_PTR(-ENOMEM);
422                 }
423                 if (sgp != SGP_WRITE &&
424                     ((loff_t) index << PAGE_CACHE_SHIFT) >= i_size_read(inode)) {
425                         entry = ERR_PTR(-EINVAL);
426                         break;
427                 }
428                 if (info->next_index <= index)
429                         info->next_index = index + 1;
430         }
431         if (page) {
432                 /* another task gave its page, or truncated the file */
433                 shmem_free_blocks(inode, 1);
434                 shmem_dir_free(page);
435         }
436         if (info->next_index <= index && !IS_ERR(entry))
437                 info->next_index = index + 1;
438         return entry;
439 }
440
441 /*
442  * shmem_free_swp - free some swap entries in a directory
443  *
444  * @dir:        pointer to the directory
445  * @edir:       pointer after last entry of the directory
446  * @punch_lock: pointer to spinlock when needed for the holepunch case
447  */
448 static int shmem_free_swp(swp_entry_t *dir, swp_entry_t *edir,
449                                                 spinlock_t *punch_lock)
450 {
451         spinlock_t *punch_unlock = NULL;
452         swp_entry_t *ptr;
453         int freed = 0;
454
455         for (ptr = dir; ptr < edir; ptr++) {
456                 if (ptr->val) {
457                         if (unlikely(punch_lock)) {
458                                 punch_unlock = punch_lock;
459                                 punch_lock = NULL;
460                                 spin_lock(punch_unlock);
461                                 if (!ptr->val)
462                                         continue;
463                         }
464                         free_swap_and_cache(*ptr);
465                         *ptr = (swp_entry_t){0};
466                         freed++;
467                 }
468         }
469         if (punch_unlock)
470                 spin_unlock(punch_unlock);
471         return freed;
472 }
473
474 static int shmem_map_and_free_swp(struct page *subdir, int offset,
475                 int limit, struct page ***dir, spinlock_t *punch_lock)
476 {
477         swp_entry_t *ptr;
478         int freed = 0;
479
480         ptr = shmem_swp_map(subdir);
481         for (; offset < limit; offset += LATENCY_LIMIT) {
482                 int size = limit - offset;
483                 if (size > LATENCY_LIMIT)
484                         size = LATENCY_LIMIT;
485                 freed += shmem_free_swp(ptr+offset, ptr+offset+size,
486                                                         punch_lock);
487                 if (need_resched()) {
488                         shmem_swp_unmap(ptr);
489                         if (*dir) {
490                                 shmem_dir_unmap(*dir);
491                                 *dir = NULL;
492                         }
493                         cond_resched();
494                         ptr = shmem_swp_map(subdir);
495                 }
496         }
497         shmem_swp_unmap(ptr);
498         return freed;
499 }
500
501 static void shmem_free_pages(struct list_head *next)
502 {
503         struct page *page;
504         int freed = 0;
505
506         do {
507                 page = container_of(next, struct page, lru);
508                 next = next->next;
509                 shmem_dir_free(page);
510                 freed++;
511                 if (freed >= LATENCY_LIMIT) {
512                         cond_resched();
513                         freed = 0;
514                 }
515         } while (next);
516 }
517
518 static void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end)
519 {
520         struct shmem_inode_info *info = SHMEM_I(inode);
521         unsigned long idx;
522         unsigned long size;
523         unsigned long limit;
524         unsigned long stage;
525         unsigned long diroff;
526         struct page **dir;
527         struct page *topdir;
528         struct page *middir;
529         struct page *subdir;
530         swp_entry_t *ptr;
531         LIST_HEAD(pages_to_free);
532         long nr_pages_to_free = 0;
533         long nr_swaps_freed = 0;
534         int offset;
535         int freed;
536         int punch_hole;
537         spinlock_t *needs_lock;
538         spinlock_t *punch_lock;
539         unsigned long upper_limit;
540
541         inode->i_ctime = inode->i_mtime = CURRENT_TIME;
542         idx = (start + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
543         if (idx >= info->next_index)
544                 return;
545
546         spin_lock(&info->lock);
547         info->flags |= SHMEM_TRUNCATE;
548         if (likely(end == (loff_t) -1)) {
549                 limit = info->next_index;
550                 upper_limit = SHMEM_MAX_INDEX;
551                 info->next_index = idx;
552                 needs_lock = NULL;
553                 punch_hole = 0;
554         } else {
555                 if (end + 1 >= inode->i_size) { /* we may free a little more */
556                         limit = (inode->i_size + PAGE_CACHE_SIZE - 1) >>
557                                                         PAGE_CACHE_SHIFT;
558                         upper_limit = SHMEM_MAX_INDEX;
559                 } else {
560                         limit = (end + 1) >> PAGE_CACHE_SHIFT;
561                         upper_limit = limit;
562                 }
563                 needs_lock = &info->lock;
564                 punch_hole = 1;
565         }
566
567         topdir = info->i_indirect;
568         if (topdir && idx <= SHMEM_NR_DIRECT && !punch_hole) {
569                 info->i_indirect = NULL;
570                 nr_pages_to_free++;
571                 list_add(&topdir->lru, &pages_to_free);
572         }
573         spin_unlock(&info->lock);
574
575         if (info->swapped && idx < SHMEM_NR_DIRECT) {
576                 ptr = info->i_direct;
577                 size = limit;
578                 if (size > SHMEM_NR_DIRECT)
579                         size = SHMEM_NR_DIRECT;
580                 nr_swaps_freed = shmem_free_swp(ptr+idx, ptr+size, needs_lock);
581         }
582
583         /*
584          * If there are no indirect blocks or we are punching a hole
585          * below indirect blocks, nothing to be done.
586          */
587         if (!topdir || limit <= SHMEM_NR_DIRECT)
588                 goto done2;
589
590         /*
591          * The truncation case has already dropped info->lock, and we're safe
592          * because i_size and next_index have already been lowered, preventing
593          * access beyond.  But in the punch_hole case, we still need to take
594          * the lock when updating the swap directory, because there might be
595          * racing accesses by shmem_getpage(SGP_CACHE), shmem_unuse_inode or
596          * shmem_writepage.  However, whenever we find we can remove a whole
597          * directory page (not at the misaligned start or end of the range),
598          * we first NULLify its pointer in the level above, and then have no
599          * need to take the lock when updating its contents: needs_lock and
600          * punch_lock (either pointing to info->lock or NULL) manage this.
601          */
602
603         upper_limit -= SHMEM_NR_DIRECT;
604         limit -= SHMEM_NR_DIRECT;
605         idx = (idx > SHMEM_NR_DIRECT)? (idx - SHMEM_NR_DIRECT): 0;
606         offset = idx % ENTRIES_PER_PAGE;
607         idx -= offset;
608
609         dir = shmem_dir_map(topdir);
610         stage = ENTRIES_PER_PAGEPAGE/2;
611         if (idx < ENTRIES_PER_PAGEPAGE/2) {
612                 middir = topdir;
613                 diroff = idx/ENTRIES_PER_PAGE;
614         } else {
615                 dir += ENTRIES_PER_PAGE/2;
616                 dir += (idx - ENTRIES_PER_PAGEPAGE/2)/ENTRIES_PER_PAGEPAGE;
617                 while (stage <= idx)
618                         stage += ENTRIES_PER_PAGEPAGE;
619                 middir = *dir;
620                 if (*dir) {
621                         diroff = ((idx - ENTRIES_PER_PAGEPAGE/2) %
622                                 ENTRIES_PER_PAGEPAGE) / ENTRIES_PER_PAGE;
623                         if (!diroff && !offset && upper_limit >= stage) {
624                                 if (needs_lock) {
625                                         spin_lock(needs_lock);
626                                         *dir = NULL;
627                                         spin_unlock(needs_lock);
628                                         needs_lock = NULL;
629                                 } else
630                                         *dir = NULL;
631                                 nr_pages_to_free++;
632                                 list_add(&middir->lru, &pages_to_free);
633                         }
634                         shmem_dir_unmap(dir);
635                         dir = shmem_dir_map(middir);
636                 } else {
637                         diroff = 0;
638                         offset = 0;
639                         idx = stage;
640                 }
641         }
642
643         for (; idx < limit; idx += ENTRIES_PER_PAGE, diroff++) {
644                 if (unlikely(idx == stage)) {
645                         shmem_dir_unmap(dir);
646                         dir = shmem_dir_map(topdir) +
647                             ENTRIES_PER_PAGE/2 + idx/ENTRIES_PER_PAGEPAGE;
648                         while (!*dir) {
649                                 dir++;
650                                 idx += ENTRIES_PER_PAGEPAGE;
651                                 if (idx >= limit)
652                                         goto done1;
653                         }
654                         stage = idx + ENTRIES_PER_PAGEPAGE;
655                         middir = *dir;
656                         if (punch_hole)
657                                 needs_lock = &info->lock;
658                         if (upper_limit >= stage) {
659                                 if (needs_lock) {
660                                         spin_lock(needs_lock);
661                                         *dir = NULL;
662                                         spin_unlock(needs_lock);
663                                         needs_lock = NULL;
664                                 } else
665                                         *dir = NULL;
666                                 nr_pages_to_free++;
667                                 list_add(&middir->lru, &pages_to_free);
668                         }
669                         shmem_dir_unmap(dir);
670                         cond_resched();
671                         dir = shmem_dir_map(middir);
672                         diroff = 0;
673                 }
674                 punch_lock = needs_lock;
675                 subdir = dir[diroff];
676                 if (subdir && !offset && upper_limit-idx >= ENTRIES_PER_PAGE) {
677                         if (needs_lock) {
678                                 spin_lock(needs_lock);
679                                 dir[diroff] = NULL;
680                                 spin_unlock(needs_lock);
681                                 punch_lock = NULL;
682                         } else
683                                 dir[diroff] = NULL;
684                         nr_pages_to_free++;
685                         list_add(&subdir->lru, &pages_to_free);
686                 }
687                 if (subdir && page_private(subdir) /* has swap entries */) {
688                         size = limit - idx;
689                         if (size > ENTRIES_PER_PAGE)
690                                 size = ENTRIES_PER_PAGE;
691                         freed = shmem_map_and_free_swp(subdir,
692                                         offset, size, &dir, punch_lock);
693                         if (!dir)
694                                 dir = shmem_dir_map(middir);
695                         nr_swaps_freed += freed;
696                         if (offset || punch_lock) {
697                                 spin_lock(&info->lock);
698                                 set_page_private(subdir,
699                                         page_private(subdir) - freed);
700                                 spin_unlock(&info->lock);
701                         } else
702                                 BUG_ON(page_private(subdir) != freed);
703                 }
704                 offset = 0;
705         }
706 done1:
707         shmem_dir_unmap(dir);
708 done2:
709         if (inode->i_mapping->nrpages && (info->flags & SHMEM_PAGEIN)) {
710                 /*
711                  * Call truncate_inode_pages again: racing shmem_unuse_inode
712                  * may have swizzled a page in from swap since vmtruncate or
713                  * generic_delete_inode did it, before we lowered next_index.
714                  * Also, though shmem_getpage checks i_size before adding to
715                  * cache, no recheck after: so fix the narrow window there too.
716                  *
717                  * Recalling truncate_inode_pages_range and unmap_mapping_range
718                  * every time for punch_hole (which never got a chance to clear
719                  * SHMEM_PAGEIN at the start of vmtruncate_range) is expensive,
720                  * yet hardly ever necessary: try to optimize them out later.
721                  */
722                 truncate_inode_pages_range(inode->i_mapping, start, end);
723                 if (punch_hole)
724                         unmap_mapping_range(inode->i_mapping, start,
725                                                         end - start, 1);
726         }
727
728         spin_lock(&info->lock);
729         info->flags &= ~SHMEM_TRUNCATE;
730         info->swapped -= nr_swaps_freed;
731         if (nr_pages_to_free)
732                 shmem_free_blocks(inode, nr_pages_to_free);
733         shmem_recalc_inode(inode);
734         spin_unlock(&info->lock);
735
736         /*
737          * Empty swap vector directory pages to be freed?
738          */
739         if (!list_empty(&pages_to_free)) {
740                 pages_to_free.prev->next = NULL;
741                 shmem_free_pages(pages_to_free.next);
742         }
743 }
744
745 static void shmem_truncate(struct inode *inode)
746 {
747         shmem_truncate_range(inode, inode->i_size, (loff_t)-1);
748 }
749
750 static int shmem_notify_change(struct dentry *dentry, struct iattr *attr)
751 {
752         struct inode *inode = dentry->d_inode;
753         struct page *page = NULL;
754         int error;
755
756         if (S_ISREG(inode->i_mode) && (attr->ia_valid & ATTR_SIZE)) {
757                 if (attr->ia_size < inode->i_size) {
758                         /*
759                          * If truncating down to a partial page, then
760                          * if that page is already allocated, hold it
761                          * in memory until the truncation is over, so
762                          * truncate_partial_page cannnot miss it were
763                          * it assigned to swap.
764                          */
765                         if (attr->ia_size & (PAGE_CACHE_SIZE-1)) {
766                                 (void) shmem_getpage(inode,
767                                         attr->ia_size>>PAGE_CACHE_SHIFT,
768                                                 &page, SGP_READ, NULL);
769                                 if (page)
770                                         unlock_page(page);
771                         }
772                         /*
773                          * Reset SHMEM_PAGEIN flag so that shmem_truncate can
774                          * detect if any pages might have been added to cache
775                          * after truncate_inode_pages.  But we needn't bother
776                          * if it's being fully truncated to zero-length: the
777                          * nrpages check is efficient enough in that case.
778                          */
779                         if (attr->ia_size) {
780                                 struct shmem_inode_info *info = SHMEM_I(inode);
781                                 spin_lock(&info->lock);
782                                 info->flags &= ~SHMEM_PAGEIN;
783                                 spin_unlock(&info->lock);
784                         }
785                 }
786         }
787
788         error = inode_change_ok(inode, attr);
789         if (!error)
790                 error = inode_setattr(inode, attr);
791 #ifdef CONFIG_TMPFS_POSIX_ACL
792         if (!error && (attr->ia_valid & ATTR_MODE))
793                 error = generic_acl_chmod(inode, &shmem_acl_ops);
794 #endif
795         if (page)
796                 page_cache_release(page);
797         return error;
798 }
799
800 static void shmem_delete_inode(struct inode *inode)
801 {
802         struct shmem_inode_info *info = SHMEM_I(inode);
803
804         if (inode->i_op->truncate == shmem_truncate) {
805                 truncate_inode_pages(inode->i_mapping, 0);
806                 shmem_unacct_size(info->flags, inode->i_size);
807                 inode->i_size = 0;
808                 shmem_truncate(inode);
809                 if (!list_empty(&info->swaplist)) {
810                         mutex_lock(&shmem_swaplist_mutex);
811                         list_del_init(&info->swaplist);
812                         mutex_unlock(&shmem_swaplist_mutex);
813                 }
814         }
815         BUG_ON(inode->i_blocks);
816         shmem_free_inode(inode->i_sb);
817         clear_inode(inode);
818 }
819
820 static inline int shmem_find_swp(swp_entry_t entry, swp_entry_t *dir, swp_entry_t *edir)
821 {
822         swp_entry_t *ptr;
823
824         for (ptr = dir; ptr < edir; ptr++) {
825                 if (ptr->val == entry.val)
826                         return ptr - dir;
827         }
828         return -1;
829 }
830
831 static int shmem_unuse_inode(struct shmem_inode_info *info, swp_entry_t entry, struct page *page)
832 {
833         struct inode *inode;
834         unsigned long idx;
835         unsigned long size;
836         unsigned long limit;
837         unsigned long stage;
838         struct page **dir;
839         struct page *subdir;
840         swp_entry_t *ptr;
841         int offset;
842         int error;
843
844         idx = 0;
845         ptr = info->i_direct;
846         spin_lock(&info->lock);
847         if (!info->swapped) {
848                 list_del_init(&info->swaplist);
849                 goto lost2;
850         }
851         limit = info->next_index;
852         size = limit;
853         if (size > SHMEM_NR_DIRECT)
854                 size = SHMEM_NR_DIRECT;
855         offset = shmem_find_swp(entry, ptr, ptr+size);
856         if (offset >= 0)
857                 goto found;
858         if (!info->i_indirect)
859                 goto lost2;
860
861         dir = shmem_dir_map(info->i_indirect);
862         stage = SHMEM_NR_DIRECT + ENTRIES_PER_PAGEPAGE/2;
863
864         for (idx = SHMEM_NR_DIRECT; idx < limit; idx += ENTRIES_PER_PAGE, dir++) {
865                 if (unlikely(idx == stage)) {
866                         shmem_dir_unmap(dir-1);
867                         if (cond_resched_lock(&info->lock)) {
868                                 /* check it has not been truncated */
869                                 if (limit > info->next_index) {
870                                         limit = info->next_index;
871                                         if (idx >= limit)
872                                                 goto lost2;
873                                 }
874                         }
875                         dir = shmem_dir_map(info->i_indirect) +
876                             ENTRIES_PER_PAGE/2 + idx/ENTRIES_PER_PAGEPAGE;
877                         while (!*dir) {
878                                 dir++;
879                                 idx += ENTRIES_PER_PAGEPAGE;
880                                 if (idx >= limit)
881                                         goto lost1;
882                         }
883                         stage = idx + ENTRIES_PER_PAGEPAGE;
884                         subdir = *dir;
885                         shmem_dir_unmap(dir);
886                         dir = shmem_dir_map(subdir);
887                 }
888                 subdir = *dir;
889                 if (subdir && page_private(subdir)) {
890                         ptr = shmem_swp_map(subdir);
891                         size = limit - idx;
892                         if (size > ENTRIES_PER_PAGE)
893                                 size = ENTRIES_PER_PAGE;
894                         offset = shmem_find_swp(entry, ptr, ptr+size);
895                         shmem_swp_unmap(ptr);
896                         if (offset >= 0) {
897                                 shmem_dir_unmap(dir);
898                                 goto found;
899                         }
900                 }
901         }
902 lost1:
903         shmem_dir_unmap(dir-1);
904 lost2:
905         spin_unlock(&info->lock);
906         return 0;
907 found:
908         idx += offset;
909         inode = igrab(&info->vfs_inode);
910         spin_unlock(&info->lock);
911
912         /*
913          * Move _head_ to start search for next from here.
914          * But be careful: shmem_delete_inode checks list_empty without taking
915          * mutex, and there's an instant in list_move_tail when info->swaplist
916          * would appear empty, if it were the only one on shmem_swaplist.  We
917          * could avoid doing it if inode NULL; or use this minor optimization.
918          */
919         if (shmem_swaplist.next != &info->swaplist)
920                 list_move_tail(&shmem_swaplist, &info->swaplist);
921         mutex_unlock(&shmem_swaplist_mutex);
922
923         error = 1;
924         if (!inode)
925                 goto out;
926         /* Precharge page while we can wait, compensate afterwards */
927         error = mem_cgroup_cache_charge(page, current->mm, GFP_KERNEL);
928         if (error)
929                 goto out;
930         error = radix_tree_preload(GFP_KERNEL);
931         if (error)
932                 goto uncharge;
933         error = 1;
934
935         spin_lock(&info->lock);
936         ptr = shmem_swp_entry(info, idx, NULL);
937         if (ptr && ptr->val == entry.val)
938                 error = add_to_page_cache(page, inode->i_mapping,
939                                                 idx, GFP_NOWAIT);
940         if (error == -EEXIST) {
941                 struct page *filepage = find_get_page(inode->i_mapping, idx);
942                 error = 1;
943                 if (filepage) {
944                         /*
945                          * There might be a more uptodate page coming down
946                          * from a stacked writepage: forget our swappage if so.
947                          */
948                         if (PageUptodate(filepage))
949                                 error = 0;
950                         page_cache_release(filepage);
951                 }
952         }
953         if (!error) {
954                 delete_from_swap_cache(page);
955                 set_page_dirty(page);
956                 info->flags |= SHMEM_PAGEIN;
957                 shmem_swp_set(info, ptr, 0);
958                 swap_free(entry);
959                 error = 1;      /* not an error, but entry was found */
960         }
961         if (ptr)
962                 shmem_swp_unmap(ptr);
963         spin_unlock(&info->lock);
964         radix_tree_preload_end();
965 uncharge:
966         mem_cgroup_uncharge_page(page);
967 out:
968         unlock_page(page);
969         page_cache_release(page);
970         iput(inode);            /* allows for NULL */
971         return error;
972 }
973
974 /*
975  * shmem_unuse() search for an eventually swapped out shmem page.
976  */
977 int shmem_unuse(swp_entry_t entry, struct page *page)
978 {
979         struct list_head *p, *next;
980         struct shmem_inode_info *info;
981         int found = 0;
982
983         mutex_lock(&shmem_swaplist_mutex);
984         list_for_each_safe(p, next, &shmem_swaplist) {
985                 info = list_entry(p, struct shmem_inode_info, swaplist);
986                 found = shmem_unuse_inode(info, entry, page);
987                 cond_resched();
988                 if (found)
989                         goto out;
990         }
991         mutex_unlock(&shmem_swaplist_mutex);
992 out:    return found;   /* 0 or 1 or -ENOMEM */
993 }
994
995 /*
996  * Move the page from the page cache to the swap cache.
997  */
998 static int shmem_writepage(struct page *page, struct writeback_control *wbc)
999 {
1000         struct shmem_inode_info *info;
1001         swp_entry_t *entry, swap;
1002         struct address_space *mapping;
1003         unsigned long index;
1004         struct inode *inode;
1005
1006         BUG_ON(!PageLocked(page));
1007         mapping = page->mapping;
1008         index = page->index;
1009         inode = mapping->host;
1010         info = SHMEM_I(inode);
1011         if (info->flags & VM_LOCKED)
1012                 goto redirty;
1013         if (!total_swap_pages)
1014                 goto redirty;
1015
1016         /*
1017          * shmem_backing_dev_info's capabilities prevent regular writeback or
1018          * sync from ever calling shmem_writepage; but a stacking filesystem
1019          * may use the ->writepage of its underlying filesystem, in which case
1020          * tmpfs should write out to swap only in response to memory pressure,
1021          * and not for pdflush or sync.  However, in those cases, we do still
1022          * want to check if there's a redundant swappage to be discarded.
1023          */
1024         if (wbc->for_reclaim)
1025                 swap = get_swap_page();
1026         else
1027                 swap.val = 0;
1028
1029         spin_lock(&info->lock);
1030         if (index >= info->next_index) {
1031                 BUG_ON(!(info->flags & SHMEM_TRUNCATE));
1032                 goto unlock;
1033         }
1034         entry = shmem_swp_entry(info, index, NULL);
1035         if (entry->val) {
1036                 /*
1037                  * The more uptodate page coming down from a stacked
1038                  * writepage should replace our old swappage.
1039                  */
1040                 free_swap_and_cache(*entry);
1041                 shmem_swp_set(info, entry, 0);
1042         }
1043         shmem_recalc_inode(inode);
1044
1045         if (swap.val && add_to_swap_cache(page, swap, GFP_ATOMIC) == 0) {
1046                 remove_from_page_cache(page);
1047                 shmem_swp_set(info, entry, swap.val);
1048                 shmem_swp_unmap(entry);
1049                 if (list_empty(&info->swaplist))
1050                         inode = igrab(inode);
1051                 else
1052                         inode = NULL;
1053                 spin_unlock(&info->lock);
1054                 swap_duplicate(swap);
1055                 BUG_ON(page_mapped(page));
1056                 page_cache_release(page);       /* pagecache ref */
1057                 set_page_dirty(page);
1058                 unlock_page(page);
1059                 if (inode) {
1060                         mutex_lock(&shmem_swaplist_mutex);
1061                         /* move instead of add in case we're racing */
1062                         list_move_tail(&info->swaplist, &shmem_swaplist);
1063                         mutex_unlock(&shmem_swaplist_mutex);
1064                         iput(inode);
1065                 }
1066                 return 0;
1067         }
1068
1069         shmem_swp_unmap(entry);
1070 unlock:
1071         spin_unlock(&info->lock);
1072         swap_free(swap);
1073 redirty:
1074         set_page_dirty(page);
1075         if (wbc->for_reclaim)
1076                 return AOP_WRITEPAGE_ACTIVATE;  /* Return with page locked */
1077         unlock_page(page);
1078         return 0;
1079 }
1080
1081 #ifdef CONFIG_NUMA
1082 #ifdef CONFIG_TMPFS
1083 static int shmem_parse_mpol(char *value, int *policy, nodemask_t *policy_nodes)
1084 {
1085         char *nodelist = strchr(value, ':');
1086         int err = 1;
1087
1088         if (nodelist) {
1089                 /* NUL-terminate policy string */
1090                 *nodelist++ = '\0';
1091                 if (nodelist_parse(nodelist, *policy_nodes))
1092                         goto out;
1093                 if (!nodes_subset(*policy_nodes, node_states[N_HIGH_MEMORY]))
1094                         goto out;
1095         }
1096         if (!strcmp(value, "default")) {
1097                 *policy = MPOL_DEFAULT;
1098                 /* Don't allow a nodelist */
1099                 if (!nodelist)
1100                         err = 0;
1101         } else if (!strcmp(value, "prefer")) {
1102                 *policy = MPOL_PREFERRED;
1103                 /* Insist on a nodelist of one node only */
1104                 if (nodelist) {
1105                         char *rest = nodelist;
1106                         while (isdigit(*rest))
1107                                 rest++;
1108                         if (!*rest)
1109                                 err = 0;
1110                 }
1111         } else if (!strcmp(value, "bind")) {
1112                 *policy = MPOL_BIND;
1113                 /* Insist on a nodelist */
1114                 if (nodelist)
1115                         err = 0;
1116         } else if (!strcmp(value, "interleave")) {
1117                 *policy = MPOL_INTERLEAVE;
1118                 /*
1119                  * Default to online nodes with memory if no nodelist
1120                  */
1121                 if (!nodelist)
1122                         *policy_nodes = node_states[N_HIGH_MEMORY];
1123                 err = 0;
1124         }
1125 out:
1126         /* Restore string for error message */
1127         if (nodelist)
1128                 *--nodelist = ':';
1129         return err;
1130 }
1131
1132 static void shmem_show_mpol(struct seq_file *seq, int policy,
1133                             const nodemask_t policy_nodes)
1134 {
1135         char *policy_string;
1136
1137         switch (policy) {
1138         case MPOL_PREFERRED:
1139                 policy_string = "prefer";
1140                 break;
1141         case MPOL_BIND:
1142                 policy_string = "bind";
1143                 break;
1144         case MPOL_INTERLEAVE:
1145                 policy_string = "interleave";
1146                 break;
1147         default:
1148                 /* MPOL_DEFAULT */
1149                 return;
1150         }
1151
1152         seq_printf(seq, ",mpol=%s", policy_string);
1153
1154         if (policy != MPOL_INTERLEAVE ||
1155             !nodes_equal(policy_nodes, node_states[N_HIGH_MEMORY])) {
1156                 char buffer[64];
1157                 int len;
1158
1159                 len = nodelist_scnprintf(buffer, sizeof(buffer), policy_nodes);
1160                 if (len < sizeof(buffer))
1161                         seq_printf(seq, ":%s", buffer);
1162                 else
1163                         seq_printf(seq, ":?");
1164         }
1165 }
1166 #endif /* CONFIG_TMPFS */
1167
1168 static struct page *shmem_swapin(swp_entry_t entry, gfp_t gfp,
1169                         struct shmem_inode_info *info, unsigned long idx)
1170 {
1171         struct vm_area_struct pvma;
1172         struct page *page;
1173
1174         /* Create a pseudo vma that just contains the policy */
1175         pvma.vm_start = 0;
1176         pvma.vm_pgoff = idx;
1177         pvma.vm_ops = NULL;
1178         pvma.vm_policy = mpol_shared_policy_lookup(&info->policy, idx);
1179         page = swapin_readahead(entry, gfp, &pvma, 0);
1180         mpol_free(pvma.vm_policy);
1181         return page;
1182 }
1183
1184 static struct page *shmem_alloc_page(gfp_t gfp,
1185                         struct shmem_inode_info *info, unsigned long idx)
1186 {
1187         struct vm_area_struct pvma;
1188         struct page *page;
1189
1190         /* Create a pseudo vma that just contains the policy */
1191         pvma.vm_start = 0;
1192         pvma.vm_pgoff = idx;
1193         pvma.vm_ops = NULL;
1194         pvma.vm_policy = mpol_shared_policy_lookup(&info->policy, idx);
1195         page = alloc_page_vma(gfp, &pvma, 0);
1196         mpol_free(pvma.vm_policy);
1197         return page;
1198 }
1199 #else /* !CONFIG_NUMA */
1200 #ifdef CONFIG_TMPFS
1201 static inline int shmem_parse_mpol(char *value, int *policy,
1202                                                 nodemask_t *policy_nodes)
1203 {
1204         return 1;
1205 }
1206
1207 static inline void shmem_show_mpol(struct seq_file *seq, int policy,
1208                             const nodemask_t policy_nodes)
1209 {
1210 }
1211 #endif /* CONFIG_TMPFS */
1212
1213 static inline struct page *shmem_swapin(swp_entry_t entry, gfp_t gfp,
1214                         struct shmem_inode_info *info, unsigned long idx)
1215 {
1216         return swapin_readahead(entry, gfp, NULL, 0);
1217 }
1218
1219 static inline struct page *shmem_alloc_page(gfp_t gfp,
1220                         struct shmem_inode_info *info, unsigned long idx)
1221 {
1222         return alloc_page(gfp);
1223 }
1224 #endif /* CONFIG_NUMA */
1225
1226 /*
1227  * shmem_getpage - either get the page from swap or allocate a new one
1228  *
1229  * If we allocate a new one we do not mark it dirty. That's up to the
1230  * vm. If we swap it in we mark it dirty since we also free the swap
1231  * entry since a page cannot live in both the swap and page cache
1232  */
1233 static int shmem_getpage(struct inode *inode, unsigned long idx,
1234                         struct page **pagep, enum sgp_type sgp, int *type)
1235 {
1236         struct address_space *mapping = inode->i_mapping;
1237         struct shmem_inode_info *info = SHMEM_I(inode);
1238         struct shmem_sb_info *sbinfo;
1239         struct page *filepage = *pagep;
1240         struct page *swappage;
1241         swp_entry_t *entry;
1242         swp_entry_t swap;
1243         gfp_t gfp;
1244         int error;
1245
1246         if (idx >= SHMEM_MAX_INDEX)
1247                 return -EFBIG;
1248
1249         if (type)
1250                 *type = 0;
1251
1252         /*
1253          * Normally, filepage is NULL on entry, and either found
1254          * uptodate immediately, or allocated and zeroed, or read
1255          * in under swappage, which is then assigned to filepage.
1256          * But shmem_readpage (required for splice) passes in a locked
1257          * filepage, which may be found not uptodate by other callers
1258          * too, and may need to be copied from the swappage read in.
1259          */
1260 repeat:
1261         if (!filepage)
1262                 filepage = find_lock_page(mapping, idx);
1263         if (filepage && PageUptodate(filepage))
1264                 goto done;
1265         error = 0;
1266         gfp = mapping_gfp_mask(mapping);
1267         if (!filepage) {
1268                 /*
1269                  * Try to preload while we can wait, to not make a habit of
1270                  * draining atomic reserves; but don't latch on to this cpu.
1271                  */
1272                 error = radix_tree_preload(gfp & ~__GFP_HIGHMEM);
1273                 if (error)
1274                         goto failed;
1275                 radix_tree_preload_end();
1276         }
1277
1278         spin_lock(&info->lock);
1279         shmem_recalc_inode(inode);
1280         entry = shmem_swp_alloc(info, idx, sgp);
1281         if (IS_ERR(entry)) {
1282                 spin_unlock(&info->lock);
1283                 error = PTR_ERR(entry);
1284                 goto failed;
1285         }
1286         swap = *entry;
1287
1288         if (swap.val) {
1289                 /* Look it up and read it in.. */
1290                 swappage = lookup_swap_cache(swap);
1291                 if (!swappage) {
1292                         shmem_swp_unmap(entry);
1293                         /* here we actually do the io */
1294                         if (type && !(*type & VM_FAULT_MAJOR)) {
1295                                 __count_vm_event(PGMAJFAULT);
1296                                 *type |= VM_FAULT_MAJOR;
1297                         }
1298                         spin_unlock(&info->lock);
1299                         swappage = shmem_swapin(swap, gfp, info, idx);
1300                         if (!swappage) {
1301                                 spin_lock(&info->lock);
1302                                 entry = shmem_swp_alloc(info, idx, sgp);
1303                                 if (IS_ERR(entry))
1304                                         error = PTR_ERR(entry);
1305                                 else {
1306                                         if (entry->val == swap.val)
1307                                                 error = -ENOMEM;
1308                                         shmem_swp_unmap(entry);
1309                                 }
1310                                 spin_unlock(&info->lock);
1311                                 if (error)
1312                                         goto failed;
1313                                 goto repeat;
1314                         }
1315                         wait_on_page_locked(swappage);
1316                         page_cache_release(swappage);
1317                         goto repeat;
1318                 }
1319
1320                 /* We have to do this with page locked to prevent races */
1321                 if (TestSetPageLocked(swappage)) {
1322                         shmem_swp_unmap(entry);
1323                         spin_unlock(&info->lock);
1324                         wait_on_page_locked(swappage);
1325                         page_cache_release(swappage);
1326                         goto repeat;
1327                 }
1328                 if (PageWriteback(swappage)) {
1329                         shmem_swp_unmap(entry);
1330                         spin_unlock(&info->lock);
1331                         wait_on_page_writeback(swappage);
1332                         unlock_page(swappage);
1333                         page_cache_release(swappage);
1334                         goto repeat;
1335                 }
1336                 if (!PageUptodate(swappage)) {
1337                         shmem_swp_unmap(entry);
1338                         spin_unlock(&info->lock);
1339                         unlock_page(swappage);
1340                         page_cache_release(swappage);
1341                         error = -EIO;
1342                         goto failed;
1343                 }
1344
1345                 if (filepage) {
1346                         shmem_swp_set(info, entry, 0);
1347                         shmem_swp_unmap(entry);
1348                         delete_from_swap_cache(swappage);
1349                         spin_unlock(&info->lock);
1350                         copy_highpage(filepage, swappage);
1351                         unlock_page(swappage);
1352                         page_cache_release(swappage);
1353                         flush_dcache_page(filepage);
1354                         SetPageUptodate(filepage);
1355                         set_page_dirty(filepage);
1356                         swap_free(swap);
1357                 } else if (!(error = add_to_page_cache(
1358                                 swappage, mapping, idx, GFP_NOWAIT))) {
1359                         info->flags |= SHMEM_PAGEIN;
1360                         shmem_swp_set(info, entry, 0);
1361                         shmem_swp_unmap(entry);
1362                         delete_from_swap_cache(swappage);
1363                         spin_unlock(&info->lock);
1364                         filepage = swappage;
1365                         set_page_dirty(filepage);
1366                         swap_free(swap);
1367                 } else {
1368                         shmem_swp_unmap(entry);
1369                         spin_unlock(&info->lock);
1370                         unlock_page(swappage);
1371                         page_cache_release(swappage);
1372                         if (error == -ENOMEM) {
1373                                 /* allow reclaim from this memory cgroup */
1374                                 error = mem_cgroup_cache_charge(NULL,
1375                                         current->mm, gfp & ~__GFP_HIGHMEM);
1376                                 if (error)
1377                                         goto failed;
1378                         }
1379                         goto repeat;
1380                 }
1381         } else if (sgp == SGP_READ && !filepage) {
1382                 shmem_swp_unmap(entry);
1383                 filepage = find_get_page(mapping, idx);
1384                 if (filepage &&
1385                     (!PageUptodate(filepage) || TestSetPageLocked(filepage))) {
1386                         spin_unlock(&info->lock);
1387                         wait_on_page_locked(filepage);
1388                         page_cache_release(filepage);
1389                         filepage = NULL;
1390                         goto repeat;
1391                 }
1392                 spin_unlock(&info->lock);
1393         } else {
1394                 shmem_swp_unmap(entry);
1395                 sbinfo = SHMEM_SB(inode->i_sb);
1396                 if (sbinfo->max_blocks) {
1397                         spin_lock(&sbinfo->stat_lock);
1398                         if (sbinfo->free_blocks == 0 ||
1399                             shmem_acct_block(info->flags)) {
1400                                 spin_unlock(&sbinfo->stat_lock);
1401                                 spin_unlock(&info->lock);
1402                                 error = -ENOSPC;
1403                                 goto failed;
1404                         }
1405                         sbinfo->free_blocks--;
1406                         inode->i_blocks += BLOCKS_PER_PAGE;
1407                         spin_unlock(&sbinfo->stat_lock);
1408                 } else if (shmem_acct_block(info->flags)) {
1409                         spin_unlock(&info->lock);
1410                         error = -ENOSPC;
1411                         goto failed;
1412                 }
1413
1414                 if (!filepage) {
1415                         spin_unlock(&info->lock);
1416                         filepage = shmem_alloc_page(gfp, info, idx);
1417                         if (!filepage) {
1418                                 shmem_unacct_blocks(info->flags, 1);
1419                                 shmem_free_blocks(inode, 1);
1420                                 error = -ENOMEM;
1421                                 goto failed;
1422                         }
1423
1424                         /* Precharge page while we can wait, compensate after */
1425                         error = mem_cgroup_cache_charge(filepage, current->mm,
1426                                                         gfp & ~__GFP_HIGHMEM);
1427                         if (error) {
1428                                 page_cache_release(filepage);
1429                                 shmem_unacct_blocks(info->flags, 1);
1430                                 shmem_free_blocks(inode, 1);
1431                                 filepage = NULL;
1432                                 goto failed;
1433                         }
1434
1435                         spin_lock(&info->lock);
1436                         entry = shmem_swp_alloc(info, idx, sgp);
1437                         if (IS_ERR(entry))
1438                                 error = PTR_ERR(entry);
1439                         else {
1440                                 swap = *entry;
1441                                 shmem_swp_unmap(entry);
1442                         }
1443                         if (error || swap.val || 0 != add_to_page_cache_lru(
1444                                         filepage, mapping, idx, GFP_NOWAIT)) {
1445                                 spin_unlock(&info->lock);
1446                                 mem_cgroup_uncharge_page(filepage);
1447                                 page_cache_release(filepage);
1448                                 shmem_unacct_blocks(info->flags, 1);
1449                                 shmem_free_blocks(inode, 1);
1450                                 filepage = NULL;
1451                                 if (error)
1452                                         goto failed;
1453                                 goto repeat;
1454                         }
1455                         mem_cgroup_uncharge_page(filepage);
1456                         info->flags |= SHMEM_PAGEIN;
1457                 }
1458
1459                 info->alloced++;
1460                 spin_unlock(&info->lock);
1461                 clear_highpage(filepage);
1462                 flush_dcache_page(filepage);
1463                 SetPageUptodate(filepage);
1464                 if (sgp == SGP_DIRTY)
1465                         set_page_dirty(filepage);
1466         }
1467 done:
1468         *pagep = filepage;
1469         return 0;
1470
1471 failed:
1472         if (*pagep != filepage) {
1473                 unlock_page(filepage);
1474                 page_cache_release(filepage);
1475         }
1476         return error;
1477 }
1478
1479 static int shmem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
1480 {
1481         struct inode *inode = vma->vm_file->f_path.dentry->d_inode;
1482         int error;
1483         int ret;
1484
1485         if (((loff_t)vmf->pgoff << PAGE_CACHE_SHIFT) >= i_size_read(inode))
1486                 return VM_FAULT_SIGBUS;
1487
1488         error = shmem_getpage(inode, vmf->pgoff, &vmf->page, SGP_CACHE, &ret);
1489         if (error)
1490                 return ((error == -ENOMEM) ? VM_FAULT_OOM : VM_FAULT_SIGBUS);
1491
1492         mark_page_accessed(vmf->page);
1493         return ret | VM_FAULT_LOCKED;
1494 }
1495
1496 #ifdef CONFIG_NUMA
1497 static int shmem_set_policy(struct vm_area_struct *vma, struct mempolicy *new)
1498 {
1499         struct inode *i = vma->vm_file->f_path.dentry->d_inode;
1500         return mpol_set_shared_policy(&SHMEM_I(i)->policy, vma, new);
1501 }
1502
1503 static struct mempolicy *shmem_get_policy(struct vm_area_struct *vma,
1504                                           unsigned long addr)
1505 {
1506         struct inode *i = vma->vm_file->f_path.dentry->d_inode;
1507         unsigned long idx;
1508
1509         idx = ((addr - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
1510         return mpol_shared_policy_lookup(&SHMEM_I(i)->policy, idx);
1511 }
1512 #endif
1513
1514 int shmem_lock(struct file *file, int lock, struct user_struct *user)
1515 {
1516         struct inode *inode = file->f_path.dentry->d_inode;
1517         struct shmem_inode_info *info = SHMEM_I(inode);
1518         int retval = -ENOMEM;
1519
1520         spin_lock(&info->lock);
1521         if (lock && !(info->flags & VM_LOCKED)) {
1522                 if (!user_shm_lock(inode->i_size, user))
1523                         goto out_nomem;
1524                 info->flags |= VM_LOCKED;
1525         }
1526         if (!lock && (info->flags & VM_LOCKED) && user) {
1527                 user_shm_unlock(inode->i_size, user);
1528                 info->flags &= ~VM_LOCKED;
1529         }
1530         retval = 0;
1531 out_nomem:
1532         spin_unlock(&info->lock);
1533         return retval;
1534 }
1535
1536 static int shmem_mmap(struct file *file, struct vm_area_struct *vma)
1537 {
1538         file_accessed(file);
1539         vma->vm_ops = &shmem_vm_ops;
1540         vma->vm_flags |= VM_CAN_NONLINEAR;
1541         return 0;
1542 }
1543
1544 static struct inode *
1545 shmem_get_inode(struct super_block *sb, int mode, dev_t dev)
1546 {
1547         struct inode *inode;
1548         struct shmem_inode_info *info;
1549         struct shmem_sb_info *sbinfo = SHMEM_SB(sb);
1550
1551         if (shmem_reserve_inode(sb))
1552                 return NULL;
1553
1554         inode = new_inode(sb);
1555         if (inode) {
1556                 inode->i_mode = mode;
1557                 inode->i_uid = current->fsuid;
1558                 inode->i_gid = current->fsgid;
1559                 inode->i_blocks = 0;
1560                 inode->i_mapping->a_ops = &shmem_aops;
1561                 inode->i_mapping->backing_dev_info = &shmem_backing_dev_info;
1562                 inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
1563                 inode->i_generation = get_seconds();
1564                 info = SHMEM_I(inode);
1565                 memset(info, 0, (char *)inode - (char *)info);
1566                 spin_lock_init(&info->lock);
1567                 INIT_LIST_HEAD(&info->swaplist);
1568
1569                 switch (mode & S_IFMT) {
1570                 default:
1571                         inode->i_op = &shmem_special_inode_operations;
1572                         init_special_inode(inode, mode, dev);
1573                         break;
1574                 case S_IFREG:
1575                         inode->i_op = &shmem_inode_operations;
1576                         inode->i_fop = &shmem_file_operations;
1577                         mpol_shared_policy_init(&info->policy, sbinfo->policy,
1578                                                         &sbinfo->policy_nodes);
1579                         break;
1580                 case S_IFDIR:
1581                         inc_nlink(inode);
1582                         /* Some things misbehave if size == 0 on a directory */
1583                         inode->i_size = 2 * BOGO_DIRENT_SIZE;
1584                         inode->i_op = &shmem_dir_inode_operations;
1585                         inode->i_fop = &simple_dir_operations;
1586                         break;
1587                 case S_IFLNK:
1588                         /*
1589                          * Must not load anything in the rbtree,
1590                          * mpol_free_shared_policy will not be called.
1591                          */
1592                         mpol_shared_policy_init(&info->policy, MPOL_DEFAULT,
1593                                                 NULL);
1594                         break;
1595                 }
1596         } else
1597                 shmem_free_inode(sb);
1598         return inode;
1599 }
1600
1601 #ifdef CONFIG_TMPFS
1602 static const struct inode_operations shmem_symlink_inode_operations;
1603 static const struct inode_operations shmem_symlink_inline_operations;
1604
1605 /*
1606  * Normally tmpfs avoids the use of shmem_readpage and shmem_write_begin;
1607  * but providing them allows a tmpfs file to be used for splice, sendfile, and
1608  * below the loop driver, in the generic fashion that many filesystems support.
1609  */
1610 static int shmem_readpage(struct file *file, struct page *page)
1611 {
1612         struct inode *inode = page->mapping->host;
1613         int error = shmem_getpage(inode, page->index, &page, SGP_CACHE, NULL);
1614         unlock_page(page);
1615         return error;
1616 }
1617
1618 static int
1619 shmem_write_begin(struct file *file, struct address_space *mapping,
1620                         loff_t pos, unsigned len, unsigned flags,
1621                         struct page **pagep, void **fsdata)
1622 {
1623         struct inode *inode = mapping->host;
1624         pgoff_t index = pos >> PAGE_CACHE_SHIFT;
1625         *pagep = NULL;
1626         return shmem_getpage(inode, index, pagep, SGP_WRITE, NULL);
1627 }
1628
1629 static int
1630 shmem_write_end(struct file *file, struct address_space *mapping,
1631                         loff_t pos, unsigned len, unsigned copied,
1632                         struct page *page, void *fsdata)
1633 {
1634         struct inode *inode = mapping->host;
1635
1636         if (pos + copied > inode->i_size)
1637                 i_size_write(inode, pos + copied);
1638
1639         unlock_page(page);
1640         set_page_dirty(page);
1641         page_cache_release(page);
1642
1643         return copied;
1644 }
1645
1646 static void do_shmem_file_read(struct file *filp, loff_t *ppos, read_descriptor_t *desc, read_actor_t actor)
1647 {
1648         struct inode *inode = filp->f_path.dentry->d_inode;
1649         struct address_space *mapping = inode->i_mapping;
1650         unsigned long index, offset;
1651         enum sgp_type sgp = SGP_READ;
1652
1653         /*
1654          * Might this read be for a stacking filesystem?  Then when reading
1655          * holes of a sparse file, we actually need to allocate those pages,
1656          * and even mark them dirty, so it cannot exceed the max_blocks limit.
1657          */
1658         if (segment_eq(get_fs(), KERNEL_DS))
1659                 sgp = SGP_DIRTY;
1660
1661         index = *ppos >> PAGE_CACHE_SHIFT;
1662         offset = *ppos & ~PAGE_CACHE_MASK;
1663
1664         for (;;) {
1665                 struct page *page = NULL;
1666                 unsigned long end_index, nr, ret;
1667                 loff_t i_size = i_size_read(inode);
1668
1669                 end_index = i_size >> PAGE_CACHE_SHIFT;
1670                 if (index > end_index)
1671                         break;
1672                 if (index == end_index) {
1673                         nr = i_size & ~PAGE_CACHE_MASK;
1674                         if (nr <= offset)
1675                                 break;
1676                 }
1677
1678                 desc->error = shmem_getpage(inode, index, &page, sgp, NULL);
1679                 if (desc->error) {
1680                         if (desc->error == -EINVAL)
1681                                 desc->error = 0;
1682                         break;
1683                 }
1684                 if (page)
1685                         unlock_page(page);
1686
1687                 /*
1688                  * We must evaluate after, since reads (unlike writes)
1689                  * are called without i_mutex protection against truncate
1690                  */
1691                 nr = PAGE_CACHE_SIZE;
1692                 i_size = i_size_read(inode);
1693                 end_index = i_size >> PAGE_CACHE_SHIFT;
1694                 if (index == end_index) {
1695                         nr = i_size & ~PAGE_CACHE_MASK;
1696                         if (nr <= offset) {
1697                                 if (page)
1698                                         page_cache_release(page);
1699                                 break;
1700                         }
1701                 }
1702                 nr -= offset;
1703
1704                 if (page) {
1705                         /*
1706                          * If users can be writing to this page using arbitrary
1707                          * virtual addresses, take care about potential aliasing
1708                          * before reading the page on the kernel side.
1709                          */
1710                         if (mapping_writably_mapped(mapping))
1711                                 flush_dcache_page(page);
1712                         /*
1713                          * Mark the page accessed if we read the beginning.
1714                          */
1715                         if (!offset)
1716                                 mark_page_accessed(page);
1717                 } else {
1718                         page = ZERO_PAGE(0);
1719                         page_cache_get(page);
1720                 }
1721
1722                 /*
1723                  * Ok, we have the page, and it's up-to-date, so
1724                  * now we can copy it to user space...
1725                  *
1726                  * The actor routine returns how many bytes were actually used..
1727                  * NOTE! This may not be the same as how much of a user buffer
1728                  * we filled up (we may be padding etc), so we can only update
1729                  * "pos" here (the actor routine has to update the user buffer
1730                  * pointers and the remaining count).
1731                  */
1732                 ret = actor(desc, page, offset, nr);
1733                 offset += ret;
1734                 index += offset >> PAGE_CACHE_SHIFT;
1735                 offset &= ~PAGE_CACHE_MASK;
1736
1737                 page_cache_release(page);
1738                 if (ret != nr || !desc->count)
1739                         break;
1740
1741                 cond_resched();
1742         }
1743
1744         *ppos = ((loff_t) index << PAGE_CACHE_SHIFT) + offset;
1745         file_accessed(filp);
1746 }
1747
1748 static ssize_t shmem_file_read(struct file *filp, char __user *buf, size_t count, loff_t *ppos)
1749 {
1750         read_descriptor_t desc;
1751
1752         if ((ssize_t) count < 0)
1753                 return -EINVAL;
1754         if (!access_ok(VERIFY_WRITE, buf, count))
1755                 return -EFAULT;
1756         if (!count)
1757                 return 0;
1758
1759         desc.written = 0;
1760         desc.count = count;
1761         desc.arg.buf = buf;
1762         desc.error = 0;
1763
1764         do_shmem_file_read(filp, ppos, &desc, file_read_actor);
1765         if (desc.written)
1766                 return desc.written;
1767         return desc.error;
1768 }
1769
1770 static int shmem_statfs(struct dentry *dentry, struct kstatfs *buf)
1771 {
1772         struct shmem_sb_info *sbinfo = SHMEM_SB(dentry->d_sb);
1773
1774         buf->f_type = TMPFS_MAGIC;
1775         buf->f_bsize = PAGE_CACHE_SIZE;
1776         buf->f_namelen = NAME_MAX;
1777         spin_lock(&sbinfo->stat_lock);
1778         if (sbinfo->max_blocks) {
1779                 buf->f_blocks = sbinfo->max_blocks;
1780                 buf->f_bavail = buf->f_bfree = sbinfo->free_blocks;
1781         }
1782         if (sbinfo->max_inodes) {
1783                 buf->f_files = sbinfo->max_inodes;
1784                 buf->f_ffree = sbinfo->free_inodes;
1785         }
1786         /* else leave those fields 0 like simple_statfs */
1787         spin_unlock(&sbinfo->stat_lock);
1788         return 0;
1789 }
1790
1791 /*
1792  * File creation. Allocate an inode, and we're done..
1793  */
1794 static int
1795 shmem_mknod(struct inode *dir, struct dentry *dentry, int mode, dev_t dev)
1796 {
1797         struct inode *inode = shmem_get_inode(dir->i_sb, mode, dev);
1798         int error = -ENOSPC;
1799
1800         if (inode) {
1801                 error = security_inode_init_security(inode, dir, NULL, NULL,
1802                                                      NULL);
1803                 if (error) {
1804                         if (error != -EOPNOTSUPP) {
1805                                 iput(inode);
1806                                 return error;
1807                         }
1808                 }
1809                 error = shmem_acl_init(inode, dir);
1810                 if (error) {
1811                         iput(inode);
1812                         return error;
1813                 }
1814                 if (dir->i_mode & S_ISGID) {
1815                         inode->i_gid = dir->i_gid;
1816                         if (S_ISDIR(mode))
1817                                 inode->i_mode |= S_ISGID;
1818                 }
1819                 dir->i_size += BOGO_DIRENT_SIZE;
1820                 dir->i_ctime = dir->i_mtime = CURRENT_TIME;
1821                 d_instantiate(dentry, inode);
1822                 dget(dentry); /* Extra count - pin the dentry in core */
1823         }
1824         return error;
1825 }
1826
1827 static int shmem_mkdir(struct inode *dir, struct dentry *dentry, int mode)
1828 {
1829         int error;
1830
1831         if ((error = shmem_mknod(dir, dentry, mode | S_IFDIR, 0)))
1832                 return error;
1833         inc_nlink(dir);
1834         return 0;
1835 }
1836
1837 static int shmem_create(struct inode *dir, struct dentry *dentry, int mode,
1838                 struct nameidata *nd)
1839 {
1840         return shmem_mknod(dir, dentry, mode | S_IFREG, 0);
1841 }
1842
1843 /*
1844  * Link a file..
1845  */
1846 static int shmem_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
1847 {
1848         struct inode *inode = old_dentry->d_inode;
1849         int ret;
1850
1851         /*
1852          * No ordinary (disk based) filesystem counts links as inodes;
1853          * but each new link needs a new dentry, pinning lowmem, and
1854          * tmpfs dentries cannot be pruned until they are unlinked.
1855          */
1856         ret = shmem_reserve_inode(inode->i_sb);
1857         if (ret)
1858                 goto out;
1859
1860         dir->i_size += BOGO_DIRENT_SIZE;
1861         inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
1862         inc_nlink(inode);
1863         atomic_inc(&inode->i_count);    /* New dentry reference */
1864         dget(dentry);           /* Extra pinning count for the created dentry */
1865         d_instantiate(dentry, inode);
1866 out:
1867         return ret;
1868 }
1869
1870 static int shmem_unlink(struct inode *dir, struct dentry *dentry)
1871 {
1872         struct inode *inode = dentry->d_inode;
1873
1874         if (inode->i_nlink > 1 && !S_ISDIR(inode->i_mode))
1875                 shmem_free_inode(inode->i_sb);
1876
1877         dir->i_size -= BOGO_DIRENT_SIZE;
1878         inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME;
1879         drop_nlink(inode);
1880         dput(dentry);   /* Undo the count from "create" - this does all the work */
1881         return 0;
1882 }
1883
1884 static int shmem_rmdir(struct inode *dir, struct dentry *dentry)
1885 {
1886         if (!simple_empty(dentry))
1887                 return -ENOTEMPTY;
1888
1889         drop_nlink(dentry->d_inode);
1890         drop_nlink(dir);
1891         return shmem_unlink(dir, dentry);
1892 }
1893
1894 /*
1895  * The VFS layer already does all the dentry stuff for rename,
1896  * we just have to decrement the usage count for the target if
1897  * it exists so that the VFS layer correctly free's it when it
1898  * gets overwritten.
1899  */
1900 static int shmem_rename(struct inode *old_dir, struct dentry *old_dentry, struct inode *new_dir, struct dentry *new_dentry)
1901 {
1902         struct inode *inode = old_dentry->d_inode;
1903         int they_are_dirs = S_ISDIR(inode->i_mode);
1904
1905         if (!simple_empty(new_dentry))
1906                 return -ENOTEMPTY;
1907
1908         if (new_dentry->d_inode) {
1909                 (void) shmem_unlink(new_dir, new_dentry);
1910                 if (they_are_dirs)
1911                         drop_nlink(old_dir);
1912         } else if (they_are_dirs) {
1913                 drop_nlink(old_dir);
1914                 inc_nlink(new_dir);
1915         }
1916
1917         old_dir->i_size -= BOGO_DIRENT_SIZE;
1918         new_dir->i_size += BOGO_DIRENT_SIZE;
1919         old_dir->i_ctime = old_dir->i_mtime =
1920         new_dir->i_ctime = new_dir->i_mtime =
1921         inode->i_ctime = CURRENT_TIME;
1922         return 0;
1923 }
1924
1925 static int shmem_symlink(struct inode *dir, struct dentry *dentry, const char *symname)
1926 {
1927         int error;
1928         int len;
1929         struct inode *inode;
1930         struct page *page = NULL;
1931         char *kaddr;
1932         struct shmem_inode_info *info;
1933
1934         len = strlen(symname) + 1;
1935         if (len > PAGE_CACHE_SIZE)
1936                 return -ENAMETOOLONG;
1937
1938         inode = shmem_get_inode(dir->i_sb, S_IFLNK|S_IRWXUGO, 0);
1939         if (!inode)
1940                 return -ENOSPC;
1941
1942         error = security_inode_init_security(inode, dir, NULL, NULL,
1943                                              NULL);
1944         if (error) {
1945                 if (error != -EOPNOTSUPP) {
1946                         iput(inode);
1947                         return error;
1948                 }
1949                 error = 0;
1950         }
1951
1952         info = SHMEM_I(inode);
1953         inode->i_size = len-1;
1954         if (len <= (char *)inode - (char *)info) {
1955                 /* do it inline */
1956                 memcpy(info, symname, len);
1957                 inode->i_op = &shmem_symlink_inline_operations;
1958         } else {
1959                 error = shmem_getpage(inode, 0, &page, SGP_WRITE, NULL);
1960                 if (error) {
1961                         iput(inode);
1962                         return error;
1963                 }
1964                 unlock_page(page);
1965                 inode->i_op = &shmem_symlink_inode_operations;
1966                 kaddr = kmap_atomic(page, KM_USER0);
1967                 memcpy(kaddr, symname, len);
1968                 kunmap_atomic(kaddr, KM_USER0);
1969                 set_page_dirty(page);
1970                 page_cache_release(page);
1971         }
1972         if (dir->i_mode & S_ISGID)
1973                 inode->i_gid = dir->i_gid;
1974         dir->i_size += BOGO_DIRENT_SIZE;
1975         dir->i_ctime = dir->i_mtime = CURRENT_TIME;
1976         d_instantiate(dentry, inode);
1977         dget(dentry);
1978         return 0;
1979 }
1980
1981 static void *shmem_follow_link_inline(struct dentry *dentry, struct nameidata *nd)
1982 {
1983         nd_set_link(nd, (char *)SHMEM_I(dentry->d_inode));
1984         return NULL;
1985 }
1986
1987 static void *shmem_follow_link(struct dentry *dentry, struct nameidata *nd)
1988 {
1989         struct page *page = NULL;
1990         int res = shmem_getpage(dentry->d_inode, 0, &page, SGP_READ, NULL);
1991         nd_set_link(nd, res ? ERR_PTR(res) : kmap(page));
1992         if (page)
1993                 unlock_page(page);
1994         return page;
1995 }
1996
1997 static void shmem_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie)
1998 {
1999         if (!IS_ERR(nd_get_link(nd))) {
2000                 struct page *page = cookie;
2001                 kunmap(page);
2002                 mark_page_accessed(page);
2003                 page_cache_release(page);
2004         }
2005 }
2006
2007 static const struct inode_operations shmem_symlink_inline_operations = {
2008         .readlink       = generic_readlink,
2009         .follow_link    = shmem_follow_link_inline,
2010 };
2011
2012 static const struct inode_operations shmem_symlink_inode_operations = {
2013         .truncate       = shmem_truncate,
2014         .readlink       = generic_readlink,
2015         .follow_link    = shmem_follow_link,
2016         .put_link       = shmem_put_link,
2017 };
2018
2019 #ifdef CONFIG_TMPFS_POSIX_ACL
2020 /**
2021  * Superblocks without xattr inode operations will get security.* xattr
2022  * support from the VFS "for free". As soon as we have any other xattrs
2023  * like ACLs, we also need to implement the security.* handlers at
2024  * filesystem level, though.
2025  */
2026
2027 static size_t shmem_xattr_security_list(struct inode *inode, char *list,
2028                                         size_t list_len, const char *name,
2029                                         size_t name_len)
2030 {
2031         return security_inode_listsecurity(inode, list, list_len);
2032 }
2033
2034 static int shmem_xattr_security_get(struct inode *inode, const char *name,
2035                                     void *buffer, size_t size)
2036 {
2037         if (strcmp(name, "") == 0)
2038                 return -EINVAL;
2039         return xattr_getsecurity(inode, name, buffer, size);
2040 }
2041
2042 static int shmem_xattr_security_set(struct inode *inode, const char *name,
2043                                     const void *value, size_t size, int flags)
2044 {
2045         if (strcmp(name, "") == 0)
2046                 return -EINVAL;
2047         return security_inode_setsecurity(inode, name, value, size, flags);
2048 }
2049
2050 static struct xattr_handler shmem_xattr_security_handler = {
2051         .prefix = XATTR_SECURITY_PREFIX,
2052         .list   = shmem_xattr_security_list,
2053         .get    = shmem_xattr_security_get,
2054         .set    = shmem_xattr_security_set,
2055 };
2056
2057 static struct xattr_handler *shmem_xattr_handlers[] = {
2058         &shmem_xattr_acl_access_handler,
2059         &shmem_xattr_acl_default_handler,
2060         &shmem_xattr_security_handler,
2061         NULL
2062 };
2063 #endif
2064
2065 static struct dentry *shmem_get_parent(struct dentry *child)
2066 {
2067         return ERR_PTR(-ESTALE);
2068 }
2069
2070 static int shmem_match(struct inode *ino, void *vfh)
2071 {
2072         __u32 *fh = vfh;
2073         __u64 inum = fh[2];
2074         inum = (inum << 32) | fh[1];
2075         return ino->i_ino == inum && fh[0] == ino->i_generation;
2076 }
2077
2078 static struct dentry *shmem_fh_to_dentry(struct super_block *sb,
2079                 struct fid *fid, int fh_len, int fh_type)
2080 {
2081         struct inode *inode;
2082         struct dentry *dentry = NULL;
2083         u64 inum = fid->raw[2];
2084         inum = (inum << 32) | fid->raw[1];
2085
2086         if (fh_len < 3)
2087                 return NULL;
2088
2089         inode = ilookup5(sb, (unsigned long)(inum + fid->raw[0]),
2090                         shmem_match, fid->raw);
2091         if (inode) {
2092                 dentry = d_find_alias(inode);
2093                 iput(inode);
2094         }
2095
2096         return dentry;
2097 }
2098
2099 static int shmem_encode_fh(struct dentry *dentry, __u32 *fh, int *len,
2100                                 int connectable)
2101 {
2102         struct inode *inode = dentry->d_inode;
2103
2104         if (*len < 3)
2105                 return 255;
2106
2107         if (hlist_unhashed(&inode->i_hash)) {
2108                 /* Unfortunately insert_inode_hash is not idempotent,
2109                  * so as we hash inodes here rather than at creation
2110                  * time, we need a lock to ensure we only try
2111                  * to do it once
2112                  */
2113                 static DEFINE_SPINLOCK(lock);
2114                 spin_lock(&lock);
2115                 if (hlist_unhashed(&inode->i_hash))
2116                         __insert_inode_hash(inode,
2117                                             inode->i_ino + inode->i_generation);
2118                 spin_unlock(&lock);
2119         }
2120
2121         fh[0] = inode->i_generation;
2122         fh[1] = inode->i_ino;
2123         fh[2] = ((__u64)inode->i_ino) >> 32;
2124
2125         *len = 3;
2126         return 1;
2127 }
2128
2129 static const struct export_operations shmem_export_ops = {
2130         .get_parent     = shmem_get_parent,
2131         .encode_fh      = shmem_encode_fh,
2132         .fh_to_dentry   = shmem_fh_to_dentry,
2133 };
2134
2135 static int shmem_parse_options(char *options, struct shmem_sb_info *sbinfo,
2136                                bool remount)
2137 {
2138         char *this_char, *value, *rest;
2139
2140         while (options != NULL) {
2141                 this_char = options;
2142                 for (;;) {
2143                         /*
2144                          * NUL-terminate this option: unfortunately,
2145                          * mount options form a comma-separated list,
2146                          * but mpol's nodelist may also contain commas.
2147                          */
2148                         options = strchr(options, ',');
2149                         if (options == NULL)
2150                                 break;
2151                         options++;
2152                         if (!isdigit(*options)) {
2153                                 options[-1] = '\0';
2154                                 break;
2155                         }
2156                 }
2157                 if (!*this_char)
2158                         continue;
2159                 if ((value = strchr(this_char,'=')) != NULL) {
2160                         *value++ = 0;
2161                 } else {
2162                         printk(KERN_ERR
2163                             "tmpfs: No value for mount option '%s'\n",
2164                             this_char);
2165                         return 1;
2166                 }
2167
2168                 if (!strcmp(this_char,"size")) {
2169                         unsigned long long size;
2170                         size = memparse(value,&rest);
2171                         if (*rest == '%') {
2172                                 size <<= PAGE_SHIFT;
2173                                 size *= totalram_pages;
2174                                 do_div(size, 100);
2175                                 rest++;
2176                         }
2177                         if (*rest)
2178                                 goto bad_val;
2179                         sbinfo->max_blocks =
2180                                 DIV_ROUND_UP(size, PAGE_CACHE_SIZE);
2181                 } else if (!strcmp(this_char,"nr_blocks")) {
2182                         sbinfo->max_blocks = memparse(value, &rest);
2183                         if (*rest)
2184                                 goto bad_val;
2185                 } else if (!strcmp(this_char,"nr_inodes")) {
2186                         sbinfo->max_inodes = memparse(value, &rest);
2187                         if (*rest)
2188                                 goto bad_val;
2189                 } else if (!strcmp(this_char,"mode")) {
2190                         if (remount)
2191                                 continue;
2192                         sbinfo->mode = simple_strtoul(value, &rest, 8) & 07777;
2193                         if (*rest)
2194                                 goto bad_val;
2195                 } else if (!strcmp(this_char,"uid")) {
2196                         if (remount)
2197                                 continue;
2198                         sbinfo->uid = simple_strtoul(value, &rest, 0);
2199                         if (*rest)
2200                                 goto bad_val;
2201                 } else if (!strcmp(this_char,"gid")) {
2202                         if (remount)
2203                                 continue;
2204                         sbinfo->gid = simple_strtoul(value, &rest, 0);
2205                         if (*rest)
2206                                 goto bad_val;
2207                 } else if (!strcmp(this_char,"mpol")) {
2208                         if (shmem_parse_mpol(value, &sbinfo->policy,
2209                                              &sbinfo->policy_nodes))
2210                                 goto bad_val;
2211                 } else {
2212                         printk(KERN_ERR "tmpfs: Bad mount option %s\n",
2213                                this_char);
2214                         return 1;
2215                 }
2216         }
2217         return 0;
2218
2219 bad_val:
2220         printk(KERN_ERR "tmpfs: Bad value '%s' for mount option '%s'\n",
2221                value, this_char);
2222         return 1;
2223
2224 }
2225
2226 static int shmem_remount_fs(struct super_block *sb, int *flags, char *data)
2227 {
2228         struct shmem_sb_info *sbinfo = SHMEM_SB(sb);
2229         struct shmem_sb_info config = *sbinfo;
2230         unsigned long blocks;
2231         unsigned long inodes;
2232         int error = -EINVAL;
2233
2234         if (shmem_parse_options(data, &config, true))
2235                 return error;
2236
2237         spin_lock(&sbinfo->stat_lock);
2238         blocks = sbinfo->max_blocks - sbinfo->free_blocks;
2239         inodes = sbinfo->max_inodes - sbinfo->free_inodes;
2240         if (config.max_blocks < blocks)
2241                 goto out;
2242         if (config.max_inodes < inodes)
2243                 goto out;
2244         /*
2245          * Those tests also disallow limited->unlimited while any are in
2246          * use, so i_blocks will always be zero when max_blocks is zero;
2247          * but we must separately disallow unlimited->limited, because
2248          * in that case we have no record of how much is already in use.
2249          */
2250         if (config.max_blocks && !sbinfo->max_blocks)
2251                 goto out;
2252         if (config.max_inodes && !sbinfo->max_inodes)
2253                 goto out;
2254
2255         error = 0;
2256         sbinfo->max_blocks  = config.max_blocks;
2257         sbinfo->free_blocks = config.max_blocks - blocks;
2258         sbinfo->max_inodes  = config.max_inodes;
2259         sbinfo->free_inodes = config.max_inodes - inodes;
2260         sbinfo->policy      = config.policy;
2261         sbinfo->policy_nodes = config.policy_nodes;
2262 out:
2263         spin_unlock(&sbinfo->stat_lock);
2264         return error;
2265 }
2266
2267 static int shmem_show_options(struct seq_file *seq, struct vfsmount *vfs)
2268 {
2269         struct shmem_sb_info *sbinfo = SHMEM_SB(vfs->mnt_sb);
2270
2271         if (sbinfo->max_blocks != shmem_default_max_blocks())
2272                 seq_printf(seq, ",size=%luk",
2273                         sbinfo->max_blocks << (PAGE_CACHE_SHIFT - 10));
2274         if (sbinfo->max_inodes != shmem_default_max_inodes())
2275                 seq_printf(seq, ",nr_inodes=%lu", sbinfo->max_inodes);
2276         if (sbinfo->mode != (S_IRWXUGO | S_ISVTX))
2277                 seq_printf(seq, ",mode=%03o", sbinfo->mode);
2278         if (sbinfo->uid != 0)
2279                 seq_printf(seq, ",uid=%u", sbinfo->uid);
2280         if (sbinfo->gid != 0)
2281                 seq_printf(seq, ",gid=%u", sbinfo->gid);
2282         shmem_show_mpol(seq, sbinfo->policy, sbinfo->policy_nodes);
2283         return 0;
2284 }
2285 #endif /* CONFIG_TMPFS */
2286
2287 static void shmem_put_super(struct super_block *sb)
2288 {
2289         kfree(sb->s_fs_info);
2290         sb->s_fs_info = NULL;
2291 }
2292
2293 static int shmem_fill_super(struct super_block *sb,
2294                             void *data, int silent)
2295 {
2296         struct inode *inode;
2297         struct dentry *root;
2298         struct shmem_sb_info *sbinfo;
2299         int err = -ENOMEM;
2300
2301         /* Round up to L1_CACHE_BYTES to resist false sharing */
2302         sbinfo = kmalloc(max((int)sizeof(struct shmem_sb_info),
2303                                 L1_CACHE_BYTES), GFP_KERNEL);
2304         if (!sbinfo)
2305                 return -ENOMEM;
2306
2307         sbinfo->max_blocks = 0;
2308         sbinfo->max_inodes = 0;
2309         sbinfo->mode = S_IRWXUGO | S_ISVTX;
2310         sbinfo->uid = current->fsuid;
2311         sbinfo->gid = current->fsgid;
2312         sbinfo->policy = MPOL_DEFAULT;
2313         sbinfo->policy_nodes = node_states[N_HIGH_MEMORY];
2314         sb->s_fs_info = sbinfo;
2315
2316 #ifdef CONFIG_TMPFS
2317         /*
2318          * Per default we only allow half of the physical ram per
2319          * tmpfs instance, limiting inodes to one per page of lowmem;
2320          * but the internal instance is left unlimited.
2321          */
2322         if (!(sb->s_flags & MS_NOUSER)) {
2323                 sbinfo->max_blocks = shmem_default_max_blocks();
2324                 sbinfo->max_inodes = shmem_default_max_inodes();
2325                 if (shmem_parse_options(data, sbinfo, false)) {
2326                         err = -EINVAL;
2327                         goto failed;
2328                 }
2329         }
2330         sb->s_export_op = &shmem_export_ops;
2331 #else
2332         sb->s_flags |= MS_NOUSER;
2333 #endif
2334
2335         spin_lock_init(&sbinfo->stat_lock);
2336         sbinfo->free_blocks = sbinfo->max_blocks;
2337         sbinfo->free_inodes = sbinfo->max_inodes;
2338
2339         sb->s_maxbytes = SHMEM_MAX_BYTES;
2340         sb->s_blocksize = PAGE_CACHE_SIZE;
2341         sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
2342         sb->s_magic = TMPFS_MAGIC;
2343         sb->s_op = &shmem_ops;
2344         sb->s_time_gran = 1;
2345 #ifdef CONFIG_TMPFS_POSIX_ACL
2346         sb->s_xattr = shmem_xattr_handlers;
2347         sb->s_flags |= MS_POSIXACL;
2348 #endif
2349
2350         inode = shmem_get_inode(sb, S_IFDIR | sbinfo->mode, 0);
2351         if (!inode)
2352                 goto failed;
2353         inode->i_uid = sbinfo->uid;
2354         inode->i_gid = sbinfo->gid;
2355         root = d_alloc_root(inode);
2356         if (!root)
2357                 goto failed_iput;
2358         sb->s_root = root;
2359         return 0;
2360
2361 failed_iput:
2362         iput(inode);
2363 failed:
2364         shmem_put_super(sb);
2365         return err;
2366 }
2367
2368 static struct kmem_cache *shmem_inode_cachep;
2369
2370 static struct inode *shmem_alloc_inode(struct super_block *sb)
2371 {
2372         struct shmem_inode_info *p;
2373         p = (struct shmem_inode_info *)kmem_cache_alloc(shmem_inode_cachep, GFP_KERNEL);
2374         if (!p)
2375                 return NULL;
2376         return &p->vfs_inode;
2377 }
2378
2379 static void shmem_destroy_inode(struct inode *inode)
2380 {
2381         if ((inode->i_mode & S_IFMT) == S_IFREG) {
2382                 /* only struct inode is valid if it's an inline symlink */
2383                 mpol_free_shared_policy(&SHMEM_I(inode)->policy);
2384         }
2385         shmem_acl_destroy_inode(inode);
2386         kmem_cache_free(shmem_inode_cachep, SHMEM_I(inode));
2387 }
2388
2389 static void init_once(struct kmem_cache *cachep, void *foo)
2390 {
2391         struct shmem_inode_info *p = (struct shmem_inode_info *) foo;
2392
2393         inode_init_once(&p->vfs_inode);
2394 #ifdef CONFIG_TMPFS_POSIX_ACL
2395         p->i_acl = NULL;
2396         p->i_default_acl = NULL;
2397 #endif
2398 }
2399
2400 static int init_inodecache(void)
2401 {
2402         shmem_inode_cachep = kmem_cache_create("shmem_inode_cache",
2403                                 sizeof(struct shmem_inode_info),
2404                                 0, SLAB_PANIC, init_once);
2405         return 0;
2406 }
2407
2408 static void destroy_inodecache(void)
2409 {
2410         kmem_cache_destroy(shmem_inode_cachep);
2411 }
2412
2413 static const struct address_space_operations shmem_aops = {
2414         .writepage      = shmem_writepage,
2415         .set_page_dirty = __set_page_dirty_no_writeback,
2416 #ifdef CONFIG_TMPFS
2417         .readpage       = shmem_readpage,
2418         .write_begin    = shmem_write_begin,
2419         .write_end      = shmem_write_end,
2420 #endif
2421         .migratepage    = migrate_page,
2422 };
2423
2424 static const struct file_operations shmem_file_operations = {
2425         .mmap           = shmem_mmap,
2426 #ifdef CONFIG_TMPFS
2427         .llseek         = generic_file_llseek,
2428         .read           = shmem_file_read,
2429         .write          = do_sync_write,
2430         .aio_write      = generic_file_aio_write,
2431         .fsync          = simple_sync_file,
2432         .splice_read    = generic_file_splice_read,
2433         .splice_write   = generic_file_splice_write,
2434 #endif
2435 };
2436
2437 static const struct inode_operations shmem_inode_operations = {
2438         .truncate       = shmem_truncate,
2439         .setattr        = shmem_notify_change,
2440         .truncate_range = shmem_truncate_range,
2441 #ifdef CONFIG_TMPFS_POSIX_ACL
2442         .setxattr       = generic_setxattr,
2443         .getxattr       = generic_getxattr,
2444         .listxattr      = generic_listxattr,
2445         .removexattr    = generic_removexattr,
2446         .permission     = shmem_permission,
2447 #endif
2448
2449 };
2450
2451 static const struct inode_operations shmem_dir_inode_operations = {
2452 #ifdef CONFIG_TMPFS
2453         .create         = shmem_create,
2454         .lookup         = simple_lookup,
2455         .link           = shmem_link,
2456         .unlink         = shmem_unlink,
2457         .symlink        = shmem_symlink,
2458         .mkdir          = shmem_mkdir,
2459         .rmdir          = shmem_rmdir,
2460         .mknod          = shmem_mknod,
2461         .rename         = shmem_rename,
2462 #endif
2463 #ifdef CONFIG_TMPFS_POSIX_ACL
2464         .setattr        = shmem_notify_change,
2465         .setxattr       = generic_setxattr,
2466         .getxattr       = generic_getxattr,
2467         .listxattr      = generic_listxattr,
2468         .removexattr    = generic_removexattr,
2469         .permission     = shmem_permission,
2470 #endif
2471 };
2472
2473 static const struct inode_operations shmem_special_inode_operations = {
2474 #ifdef CONFIG_TMPFS_POSIX_ACL
2475         .setattr        = shmem_notify_change,
2476         .setxattr       = generic_setxattr,
2477         .getxattr       = generic_getxattr,
2478         .listxattr      = generic_listxattr,
2479         .removexattr    = generic_removexattr,
2480         .permission     = shmem_permission,
2481 #endif
2482 };
2483
2484 static const struct super_operations shmem_ops = {
2485         .alloc_inode    = shmem_alloc_inode,
2486         .destroy_inode  = shmem_destroy_inode,
2487 #ifdef CONFIG_TMPFS
2488         .statfs         = shmem_statfs,
2489         .remount_fs     = shmem_remount_fs,
2490         .show_options   = shmem_show_options,
2491 #endif
2492         .delete_inode   = shmem_delete_inode,
2493         .drop_inode     = generic_delete_inode,
2494         .put_super      = shmem_put_super,
2495 };
2496
2497 static struct vm_operations_struct shmem_vm_ops = {
2498         .fault          = shmem_fault,
2499 #ifdef CONFIG_NUMA
2500         .set_policy     = shmem_set_policy,
2501         .get_policy     = shmem_get_policy,
2502 #endif
2503 };
2504
2505
2506 static int shmem_get_sb(struct file_system_type *fs_type,
2507         int flags, const char *dev_name, void *data, struct vfsmount *mnt)
2508 {
2509         return get_sb_nodev(fs_type, flags, data, shmem_fill_super, mnt);
2510 }
2511
2512 static struct file_system_type tmpfs_fs_type = {
2513         .owner          = THIS_MODULE,
2514         .name           = "tmpfs",
2515         .get_sb         = shmem_get_sb,
2516         .kill_sb        = kill_litter_super,
2517 };
2518 static struct vfsmount *shm_mnt;
2519
2520 static int __init init_tmpfs(void)
2521 {
2522         int error;
2523
2524         error = bdi_init(&shmem_backing_dev_info);
2525         if (error)
2526                 goto out4;
2527
2528         error = init_inodecache();
2529         if (error)
2530                 goto out3;
2531
2532         error = register_filesystem(&tmpfs_fs_type);
2533         if (error) {
2534                 printk(KERN_ERR "Could not register tmpfs\n");
2535                 goto out2;
2536         }
2537
2538         shm_mnt = vfs_kern_mount(&tmpfs_fs_type, MS_NOUSER,
2539                                 tmpfs_fs_type.name, NULL);
2540         if (IS_ERR(shm_mnt)) {
2541                 error = PTR_ERR(shm_mnt);
2542                 printk(KERN_ERR "Could not kern_mount tmpfs\n");
2543                 goto out1;
2544         }
2545         return 0;
2546
2547 out1:
2548         unregister_filesystem(&tmpfs_fs_type);
2549 out2:
2550         destroy_inodecache();
2551 out3:
2552         bdi_destroy(&shmem_backing_dev_info);
2553 out4:
2554         shm_mnt = ERR_PTR(error);
2555         return error;
2556 }
2557 module_init(init_tmpfs)
2558
2559 /*
2560  * shmem_file_setup - get an unlinked file living in tmpfs
2561  *
2562  * @name: name for dentry (to be seen in /proc/<pid>/maps
2563  * @size: size to be set for the file
2564  *
2565  */
2566 struct file *shmem_file_setup(char *name, loff_t size, unsigned long flags)
2567 {
2568         int error;
2569         struct file *file;
2570         struct inode *inode;
2571         struct dentry *dentry, *root;
2572         struct qstr this;
2573
2574         if (IS_ERR(shm_mnt))
2575                 return (void *)shm_mnt;
2576
2577         if (size < 0 || size > SHMEM_MAX_BYTES)
2578                 return ERR_PTR(-EINVAL);
2579
2580         if (shmem_acct_size(flags, size))
2581                 return ERR_PTR(-ENOMEM);
2582
2583         error = -ENOMEM;
2584         this.name = name;
2585         this.len = strlen(name);
2586         this.hash = 0; /* will go */
2587         root = shm_mnt->mnt_root;
2588         dentry = d_alloc(root, &this);
2589         if (!dentry)
2590                 goto put_memory;
2591
2592         error = -ENFILE;
2593         file = get_empty_filp();
2594         if (!file)
2595                 goto put_dentry;
2596
2597         error = -ENOSPC;
2598         inode = shmem_get_inode(root->d_sb, S_IFREG | S_IRWXUGO, 0);
2599         if (!inode)
2600                 goto close_file;
2601
2602         SHMEM_I(inode)->flags = flags & VM_ACCOUNT;
2603         d_instantiate(dentry, inode);
2604         inode->i_size = size;
2605         inode->i_nlink = 0;     /* It is unlinked */
2606         init_file(file, shm_mnt, dentry, FMODE_WRITE | FMODE_READ,
2607                         &shmem_file_operations);
2608         return file;
2609
2610 close_file:
2611         put_filp(file);
2612 put_dentry:
2613         dput(dentry);
2614 put_memory:
2615         shmem_unacct_size(flags, size);
2616         return ERR_PTR(error);
2617 }
2618
2619 /*
2620  * shmem_zero_setup - setup a shared anonymous mapping
2621  *
2622  * @vma: the vma to be mmapped is prepared by do_mmap_pgoff
2623  */
2624 int shmem_zero_setup(struct vm_area_struct *vma)
2625 {
2626         struct file *file;
2627         loff_t size = vma->vm_end - vma->vm_start;
2628
2629         file = shmem_file_setup("dev/zero", size, vma->vm_flags);
2630         if (IS_ERR(file))
2631                 return PTR_ERR(file);
2632
2633         if (vma->vm_file)
2634                 fput(vma->vm_file);
2635         vma->vm_file = file;
2636         vma->vm_ops = &shmem_vm_ops;
2637         return 0;
2638 }