 38f3865744
			
		
	
	
	38f3865744
	
	
	
		
			
			Extract in-memory xattr APIs from tmpfs. Will be used by cgroup. $ size vmlinux.o text data bss dec hex filename 4658782 880729 5195032 10734543 a3cbcf vmlinux.o $ size vmlinux.o text data bss dec hex filename 4658957 880729 5195032 10734718 a3cc7e vmlinux.o v7: - checkpatch warnings fixed - Implement the changes requested by Hugh Dickins: - make simple_xattrs_init and simple_xattrs_free inline - get rid of locking and list reinitialization in simple_xattrs_free, they're not needed v6: - no changes v5: - no changes v4: - move simple_xattrs_free() to fs/xattr.c v3: - in kmem_xattrs_free(), reinitialize the list - use simple_xattr_* prefix - introduce simple_xattr_add() to prevent direct list usage Original-patch-by: Li Zefan <lizefan@huawei.com> Cc: Li Zefan <lizefan@huawei.com> Cc: Hillf Danton <dhillf@gmail.com> Cc: Lennart Poettering <lpoetter@redhat.com> Acked-by: Hugh Dickins <hughd@google.com> Signed-off-by: Li Zefan <lizefan@huawei.com> Signed-off-by: Aristeu Rozanski <aris@redhat.com> Signed-off-by: Tejun Heo <tj@kernel.org>
		
			
				
	
	
		
			65 lines
		
	
	
	
		
			2.3 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			65 lines
		
	
	
	
		
			2.3 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef __SHMEM_FS_H
 | |
| #define __SHMEM_FS_H
 | |
| 
 | |
| #include <linux/swap.h>
 | |
| #include <linux/mempolicy.h>
 | |
| #include <linux/pagemap.h>
 | |
| #include <linux/percpu_counter.h>
 | |
| #include <linux/xattr.h>
 | |
| 
 | |
| /* inode in-kernel data */
 | |
| 
 | |
| struct shmem_inode_info {
 | |
| 	spinlock_t		lock;
 | |
| 	unsigned long		flags;
 | |
| 	unsigned long		alloced;	/* data pages alloced to file */
 | |
| 	union {
 | |
| 		unsigned long	swapped;	/* subtotal assigned to swap */
 | |
| 		char		*symlink;	/* unswappable short symlink */
 | |
| 	};
 | |
| 	struct shared_policy	policy;		/* NUMA memory alloc policy */
 | |
| 	struct list_head	swaplist;	/* chain of maybes on swap */
 | |
| 	struct simple_xattrs	xattrs;		/* list of xattrs */
 | |
| 	struct inode		vfs_inode;
 | |
| };
 | |
| 
 | |
| struct shmem_sb_info {
 | |
| 	unsigned long max_blocks;   /* How many blocks are allowed */
 | |
| 	struct percpu_counter used_blocks;  /* How many are allocated */
 | |
| 	unsigned long max_inodes;   /* How many inodes are allowed */
 | |
| 	unsigned long free_inodes;  /* How many are left for allocation */
 | |
| 	spinlock_t stat_lock;	    /* Serialize shmem_sb_info changes */
 | |
| 	kuid_t uid;		    /* Mount uid for root directory */
 | |
| 	kgid_t gid;		    /* Mount gid for root directory */
 | |
| 	umode_t mode;		    /* Mount mode for root directory */
 | |
| 	struct mempolicy *mpol;     /* default memory policy for mappings */
 | |
| };
 | |
| 
 | |
| static inline struct shmem_inode_info *SHMEM_I(struct inode *inode)
 | |
| {
 | |
| 	return container_of(inode, struct shmem_inode_info, vfs_inode);
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * Functions in mm/shmem.c called directly from elsewhere:
 | |
|  */
 | |
| extern int shmem_init(void);
 | |
| extern int shmem_fill_super(struct super_block *sb, void *data, int silent);
 | |
| extern struct file *shmem_file_setup(const char *name,
 | |
| 					loff_t size, unsigned long flags);
 | |
| extern int shmem_zero_setup(struct vm_area_struct *);
 | |
| extern int shmem_lock(struct file *file, int lock, struct user_struct *user);
 | |
| extern void shmem_unlock_mapping(struct address_space *mapping);
 | |
| extern struct page *shmem_read_mapping_page_gfp(struct address_space *mapping,
 | |
| 					pgoff_t index, gfp_t gfp_mask);
 | |
| extern void shmem_truncate_range(struct inode *inode, loff_t start, loff_t end);
 | |
| extern int shmem_unuse(swp_entry_t entry, struct page *page);
 | |
| 
 | |
| static inline struct page *shmem_read_mapping_page(
 | |
| 				struct address_space *mapping, pgoff_t index)
 | |
| {
 | |
| 	return shmem_read_mapping_page_gfp(mapping, index,
 | |
| 					mapping_gfp_mask(mapping));
 | |
| }
 | |
| 
 | |
| #endif
 |