Export stuff from shared memory code that will be used in the next two patches to provide support for checkpoint/restart of shared memory. mm/shmem.c: - shmem_getpage() and 'enum sgp_type' - struct vm_operations_struct shmem_vm_ops ipc/shm.c: - struct vm_operations_struct shm_vm_ops Changelog[v14]: - Introduce patch Signed-off-by: Oren Laadan <orenl@xxxxxxxxxxxxxxx> --- checkpoint/checkpoint_mem.h | 18 ++++++++++++++++++ ipc/shm.c | 4 ++-- mm/shmem.c | 12 ++++++------ 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/checkpoint/checkpoint_mem.h b/checkpoint/checkpoint_mem.h index de1d4c8..3157dde 100644 --- a/checkpoint/checkpoint_mem.h +++ b/checkpoint/checkpoint_mem.h @@ -43,4 +43,22 @@ static inline int cr_pgarr_nr_free(struct cr_pgarr *pgarr) return CR_PGARR_TOTAL - pgarr->nr_used; } +/* + * This probably belongs in include/linux/mm.h + */ + +/* Flag allocation requirements to shmem_getpage and shmem_swp_alloc */ +enum sgp_type { + SGP_READ, /* don't exceed i_size, don't allocate page */ + SGP_CACHE, /* don't exceed i_size, may allocate page */ + SGP_DIRTY, /* like SGP_CACHE, but set new page dirty */ + SGP_WRITE, /* may exceed i_size, may allocate page */ +}; + +int shmem_getpage(struct inode *inode, unsigned long idx, + struct page **pagep, enum sgp_type sgp, int *type); + +extern struct vm_operations_struct shmem_vm_ops; +extern struct vm_operations_struct shm_vm_ops; + #endif /* _CHECKPOINT_CKPT_MEM_H_ */ diff --git a/ipc/shm.c b/ipc/shm.c index 05d51d2..719f329 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -54,7 +54,7 @@ struct shm_file_data { #define shm_file_data(file) (*((struct shm_file_data **)&(file)->private_data)) static const struct file_operations shm_file_operations; -static struct vm_operations_struct shm_vm_ops; +struct vm_operations_struct shm_vm_ops; #define shm_ids(ns) ((ns)->ids[IPC_SHM_IDS]) @@ -311,7 +311,7 @@ static const struct file_operations shm_file_operations = { .get_unmapped_area = shm_get_unmapped_area, }; -static struct vm_operations_struct shm_vm_ops = { +struct vm_operations_struct shm_vm_ops = { .open = shm_open, /* callback for a new vm-area open */ .close = shm_close, /* callback for when the vm-area is released */ .fault = shm_fault, diff --git a/mm/shmem.c b/mm/shmem.c index 4103a23..e5abf26 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -103,8 +103,8 @@ static unsigned long shmem_default_max_inodes(void) } #endif -static int shmem_getpage(struct inode *inode, unsigned long idx, - struct page **pagep, enum sgp_type sgp, int *type); +int shmem_getpage(struct inode *inode, unsigned long idx, + struct page **pagep, enum sgp_type sgp, int *type); static inline struct page *shmem_dir_alloc(gfp_t gfp_mask) { @@ -203,7 +203,7 @@ static const struct file_operations shmem_file_operations; static const struct inode_operations shmem_inode_operations; static const struct inode_operations shmem_dir_inode_operations; static const struct inode_operations shmem_special_inode_operations; -static struct vm_operations_struct shmem_vm_ops; +struct vm_operations_struct shmem_vm_ops; static struct backing_dev_info shmem_backing_dev_info __read_mostly = { .ra_pages = 0, /* No readahead */ @@ -1187,8 +1187,8 @@ static inline struct mempolicy *shmem_get_sbmpol(struct shmem_sb_info *sbinfo) * vm. If we swap it in we mark it dirty since we also free the swap * entry since a page cannot live in both the swap and page cache */ -static int shmem_getpage(struct inode *inode, unsigned long idx, - struct page **pagep, enum sgp_type sgp, int *type) +int shmem_getpage(struct inode *inode, unsigned long idx, + struct page **pagep, enum sgp_type sgp, int *type) { struct address_space *mapping = inode->i_mapping; struct shmem_inode_info *info = SHMEM_I(inode); @@ -2482,7 +2482,7 @@ static const struct super_operations shmem_ops = { .put_super = shmem_put_super, }; -static struct vm_operations_struct shmem_vm_ops = { +struct vm_operations_struct shmem_vm_ops = { .fault = shmem_fault, #ifdef CONFIG_NUMA .set_policy = shmem_set_policy, -- 1.5.4.3 _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers