Loading fs/nfs/read.c +31 −1 Original line number Diff line number Diff line Loading @@ -40,10 +40,40 @@ static const struct rpc_call_ops nfs_read_partial_ops; static const struct rpc_call_ops nfs_read_full_ops; static kmem_cache_t *nfs_rdata_cachep; mempool_t *nfs_rdata_mempool; static mempool_t *nfs_rdata_mempool; #define MIN_POOL_READ (32) struct nfs_read_data *nfs_readdata_alloc(unsigned int pagecount) { struct nfs_read_data *p = mempool_alloc(nfs_rdata_mempool, SLAB_NOFS); if (p) { memset(p, 0, sizeof(*p)); INIT_LIST_HEAD(&p->pages); if (pagecount < NFS_PAGEVEC_SIZE) p->pagevec = &p->page_array[0]; else { size_t size = ++pagecount * sizeof(struct page *); p->pagevec = kmalloc(size, GFP_NOFS); if (p->pagevec) { memset(p->pagevec, 0, size); } else { mempool_free(p, nfs_rdata_mempool); p = NULL; } } } return p; } void nfs_readdata_free(struct nfs_read_data *p) { if (p && (p->pagevec != &p->page_array[0])) kfree(p->pagevec); mempool_free(p, nfs_rdata_mempool); } void nfs_readdata_release(void *data) { nfs_readdata_free(data); Loading fs/nfs/write.c +31 −1 Original line number Diff line number Diff line Loading @@ -86,7 +86,7 @@ static const struct rpc_call_ops nfs_write_full_ops; static const struct rpc_call_ops nfs_commit_ops; static kmem_cache_t *nfs_wdata_cachep; mempool_t *nfs_wdata_mempool; static mempool_t *nfs_wdata_mempool; static mempool_t *nfs_commit_mempool; static DECLARE_WAIT_QUEUE_HEAD(nfs_write_congestion); Loading Loading @@ -119,6 +119,36 @@ void nfs_commit_free(struct nfs_write_data *p) mempool_free(p, nfs_commit_mempool); } struct nfs_write_data *nfs_writedata_alloc(unsigned int pagecount) { struct nfs_write_data *p = mempool_alloc(nfs_wdata_mempool, SLAB_NOFS); if (p) { memset(p, 0, sizeof(*p)); INIT_LIST_HEAD(&p->pages); if (pagecount < NFS_PAGEVEC_SIZE) p->pagevec = &p->page_array[0]; else { size_t size = ++pagecount * sizeof(struct page *); p->pagevec = kmalloc(size, GFP_NOFS); if (p->pagevec) { memset(p->pagevec, 0, size); } else { mempool_free(p, nfs_wdata_mempool); p = NULL; } } } return p; } void nfs_writedata_free(struct nfs_write_data *p) { if (p && (p->pagevec != &p->page_array[0])) kfree(p->pagevec); mempool_free(p, nfs_wdata_mempool); } void nfs_writedata_release(void *wdata) { nfs_writedata_free(wdata); Loading include/linux/nfs_fs.h +4 −63 Original line number Diff line number Diff line Loading @@ -462,37 +462,8 @@ static inline int nfs_wb_page(struct inode *inode, struct page* page) /* * Allocate and free nfs_write_data structures */ extern mempool_t *nfs_wdata_mempool; static inline struct nfs_write_data *nfs_writedata_alloc(unsigned int pagecount) { struct nfs_write_data *p = mempool_alloc(nfs_wdata_mempool, SLAB_NOFS); if (p) { memset(p, 0, sizeof(*p)); INIT_LIST_HEAD(&p->pages); if (pagecount < NFS_PAGEVEC_SIZE) p->pagevec = &p->page_array[0]; else { size_t size = ++pagecount * sizeof(struct page *); p->pagevec = kmalloc(size, GFP_NOFS); if (p->pagevec) { memset(p->pagevec, 0, size); } else { mempool_free(p, nfs_wdata_mempool); p = NULL; } } } return p; } static inline void nfs_writedata_free(struct nfs_write_data *p) { if (p && (p->pagevec != &p->page_array[0])) kfree(p->pagevec); mempool_free(p, nfs_wdata_mempool); } extern struct nfs_write_data *nfs_writedata_alloc(unsigned int pagecount); extern void nfs_writedata_free(struct nfs_write_data *p); /* * linux/fs/nfs/read.c Loading @@ -503,41 +474,11 @@ extern int nfs_readpages(struct file *, struct address_space *, extern int nfs_readpage_result(struct rpc_task *, struct nfs_read_data *); extern void nfs_readdata_release(void *data); /* * Allocate and free nfs_read_data structures */ extern mempool_t *nfs_rdata_mempool; static inline struct nfs_read_data *nfs_readdata_alloc(unsigned int pagecount) { struct nfs_read_data *p = mempool_alloc(nfs_rdata_mempool, SLAB_NOFS); if (p) { memset(p, 0, sizeof(*p)); INIT_LIST_HEAD(&p->pages); if (pagecount < NFS_PAGEVEC_SIZE) p->pagevec = &p->page_array[0]; else { size_t size = ++pagecount * sizeof(struct page *); p->pagevec = kmalloc(size, GFP_NOFS); if (p->pagevec) { memset(p->pagevec, 0, size); } else { mempool_free(p, nfs_rdata_mempool); p = NULL; } } } return p; } static inline void nfs_readdata_free(struct nfs_read_data *p) { if (p && (p->pagevec != &p->page_array[0])) kfree(p->pagevec); mempool_free(p, nfs_rdata_mempool); } extern struct nfs_read_data *nfs_readdata_alloc(unsigned int pagecount); extern void nfs_readdata_free(struct nfs_read_data *p); /* * linux/fs/nfs3proc.c Loading Loading
fs/nfs/read.c +31 −1 Original line number Diff line number Diff line Loading @@ -40,10 +40,40 @@ static const struct rpc_call_ops nfs_read_partial_ops; static const struct rpc_call_ops nfs_read_full_ops; static kmem_cache_t *nfs_rdata_cachep; mempool_t *nfs_rdata_mempool; static mempool_t *nfs_rdata_mempool; #define MIN_POOL_READ (32) struct nfs_read_data *nfs_readdata_alloc(unsigned int pagecount) { struct nfs_read_data *p = mempool_alloc(nfs_rdata_mempool, SLAB_NOFS); if (p) { memset(p, 0, sizeof(*p)); INIT_LIST_HEAD(&p->pages); if (pagecount < NFS_PAGEVEC_SIZE) p->pagevec = &p->page_array[0]; else { size_t size = ++pagecount * sizeof(struct page *); p->pagevec = kmalloc(size, GFP_NOFS); if (p->pagevec) { memset(p->pagevec, 0, size); } else { mempool_free(p, nfs_rdata_mempool); p = NULL; } } } return p; } void nfs_readdata_free(struct nfs_read_data *p) { if (p && (p->pagevec != &p->page_array[0])) kfree(p->pagevec); mempool_free(p, nfs_rdata_mempool); } void nfs_readdata_release(void *data) { nfs_readdata_free(data); Loading
fs/nfs/write.c +31 −1 Original line number Diff line number Diff line Loading @@ -86,7 +86,7 @@ static const struct rpc_call_ops nfs_write_full_ops; static const struct rpc_call_ops nfs_commit_ops; static kmem_cache_t *nfs_wdata_cachep; mempool_t *nfs_wdata_mempool; static mempool_t *nfs_wdata_mempool; static mempool_t *nfs_commit_mempool; static DECLARE_WAIT_QUEUE_HEAD(nfs_write_congestion); Loading Loading @@ -119,6 +119,36 @@ void nfs_commit_free(struct nfs_write_data *p) mempool_free(p, nfs_commit_mempool); } struct nfs_write_data *nfs_writedata_alloc(unsigned int pagecount) { struct nfs_write_data *p = mempool_alloc(nfs_wdata_mempool, SLAB_NOFS); if (p) { memset(p, 0, sizeof(*p)); INIT_LIST_HEAD(&p->pages); if (pagecount < NFS_PAGEVEC_SIZE) p->pagevec = &p->page_array[0]; else { size_t size = ++pagecount * sizeof(struct page *); p->pagevec = kmalloc(size, GFP_NOFS); if (p->pagevec) { memset(p->pagevec, 0, size); } else { mempool_free(p, nfs_wdata_mempool); p = NULL; } } } return p; } void nfs_writedata_free(struct nfs_write_data *p) { if (p && (p->pagevec != &p->page_array[0])) kfree(p->pagevec); mempool_free(p, nfs_wdata_mempool); } void nfs_writedata_release(void *wdata) { nfs_writedata_free(wdata); Loading
include/linux/nfs_fs.h +4 −63 Original line number Diff line number Diff line Loading @@ -462,37 +462,8 @@ static inline int nfs_wb_page(struct inode *inode, struct page* page) /* * Allocate and free nfs_write_data structures */ extern mempool_t *nfs_wdata_mempool; static inline struct nfs_write_data *nfs_writedata_alloc(unsigned int pagecount) { struct nfs_write_data *p = mempool_alloc(nfs_wdata_mempool, SLAB_NOFS); if (p) { memset(p, 0, sizeof(*p)); INIT_LIST_HEAD(&p->pages); if (pagecount < NFS_PAGEVEC_SIZE) p->pagevec = &p->page_array[0]; else { size_t size = ++pagecount * sizeof(struct page *); p->pagevec = kmalloc(size, GFP_NOFS); if (p->pagevec) { memset(p->pagevec, 0, size); } else { mempool_free(p, nfs_wdata_mempool); p = NULL; } } } return p; } static inline void nfs_writedata_free(struct nfs_write_data *p) { if (p && (p->pagevec != &p->page_array[0])) kfree(p->pagevec); mempool_free(p, nfs_wdata_mempool); } extern struct nfs_write_data *nfs_writedata_alloc(unsigned int pagecount); extern void nfs_writedata_free(struct nfs_write_data *p); /* * linux/fs/nfs/read.c Loading @@ -503,41 +474,11 @@ extern int nfs_readpages(struct file *, struct address_space *, extern int nfs_readpage_result(struct rpc_task *, struct nfs_read_data *); extern void nfs_readdata_release(void *data); /* * Allocate and free nfs_read_data structures */ extern mempool_t *nfs_rdata_mempool; static inline struct nfs_read_data *nfs_readdata_alloc(unsigned int pagecount) { struct nfs_read_data *p = mempool_alloc(nfs_rdata_mempool, SLAB_NOFS); if (p) { memset(p, 0, sizeof(*p)); INIT_LIST_HEAD(&p->pages); if (pagecount < NFS_PAGEVEC_SIZE) p->pagevec = &p->page_array[0]; else { size_t size = ++pagecount * sizeof(struct page *); p->pagevec = kmalloc(size, GFP_NOFS); if (p->pagevec) { memset(p->pagevec, 0, size); } else { mempool_free(p, nfs_rdata_mempool); p = NULL; } } } return p; } static inline void nfs_readdata_free(struct nfs_read_data *p) { if (p && (p->pagevec != &p->page_array[0])) kfree(p->pagevec); mempool_free(p, nfs_rdata_mempool); } extern struct nfs_read_data *nfs_readdata_alloc(unsigned int pagecount); extern void nfs_readdata_free(struct nfs_read_data *p); /* * linux/fs/nfs3proc.c Loading