[Devel] [RFC v14-rc][PATCH 18/23] Prepare to support shared memory
Oren Laadan
orenl at cs.columbia.edu
Fri Mar 20 11:47:43 PDT 2009
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 at cs.columbia.edu>
---
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 at lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers
More information about the Devel
mailing list