]> Pileus Git - ~andy/linux/blobdiff - include/linux/rmap.h
mm/rmap: extend rmap_walk_xxx() to cope with different cases
[~andy/linux] / include / linux / rmap.h
index 6a456ce6de20bfb63d16c47ea7a97896d6f7cf11..616aa4d05f0a616a3ad4d93764aedfc23453fb86 100644 (file)
@@ -235,10 +235,25 @@ struct anon_vma *page_lock_anon_vma_read(struct page *page);
 void page_unlock_anon_vma_read(struct anon_vma *anon_vma);
 int page_mapped_in_vma(struct page *page, struct vm_area_struct *vma);
 
+/*
+ * rmap_walk_control: To control rmap traversing for specific needs
+ *
+ * arg: passed to rmap_one() and invalid_vma()
+ * rmap_one: executed on each vma where page is mapped
+ * done: for checking traversing termination condition
+ * file_nonlinear: for handling file nonlinear mapping
+ * anon_lock: for getting anon_lock by optimized way rather than default
+ * invalid_vma: for skipping uninterested vma
+ */
 struct rmap_walk_control {
        void *arg;
        int (*rmap_one)(struct page *page, struct vm_area_struct *vma,
                                        unsigned long addr, void *arg);
+       int (*done)(struct page *page);
+       int (*file_nonlinear)(struct page *, struct address_space *,
+                                       struct vm_area_struct *vma);
+       struct anon_vma *(*anon_lock)(struct page *page);
+       bool (*invalid_vma)(struct vm_area_struct *vma, void *arg);
 };
 
 /*