#ifndef __SHMEM_FS_H #define __SHMEM_FS_H /* inode in-kernel data */ #define SHMEM_NR_DIRECT 16 /* * A swap entry has to fit into a "unsigned long", as * the entry is hidden in the "index" field of the * swapper address space. * * We have to move it here, since not every user of fs.h is including * mm.h, but mm.h is including fs.h via sched .h :-/ */ typedef struct { unsigned long val; } swp_entry_t; extern atomic_t shmem_nrpages; struct shmem_inode_info { spinlock_t lock; struct semaphore sem; unsigned long next_index; swp_entry_t i_direct[SHMEM_NR_DIRECT]; /* for the first blocks */ void **i_indirect; /* indirect blocks */ unsigned long swapped; int locked; /* into memory */ struct list_head list; struct inode *inode; }; struct shmem_sb_info { unsigned long max_blocks; /* How many blocks are allowed */ unsigned long free_blocks; /* How many are left for allocation */ unsigned long max_inodes; /* How many inodes are allowed */ unsigned long free_inodes; /* How many are left for allocation */ spinlock_t stat_lock; }; #define SHMEM_I(inode) (&inode->u.shmem_i) #endif