X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=fs%2Fnfs%2Fwrite.c;h=ad7eb9bdff46204f60c1e8f182f1bc0701ed5848;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=847b77d4c7aedd099f8a2abe0f0971713cdcccab;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/fs/nfs/write.c b/fs/nfs/write.c index 847b77d4c..ad7eb9bdf 100644 --- a/fs/nfs/write.c +++ b/fs/nfs/write.c @@ -61,7 +61,6 @@ #include #include #include -#include #include "delegation.h" @@ -83,49 +82,17 @@ static int nfs_wait_on_write_congestion(struct address_space *, int); static int nfs_wait_on_requests(struct inode *, unsigned long, unsigned int); static kmem_cache_t *nfs_wdata_cachep; -static mempool_t *nfs_wdata_mempool; -static mempool_t *nfs_commit_mempool; +mempool_t *nfs_wdata_mempool; +mempool_t *nfs_commit_mempool; static DECLARE_WAIT_QUEUE_HEAD(nfs_write_congestion); -static __inline__ struct nfs_write_data *nfs_writedata_alloc(void) -{ - struct nfs_write_data *p; - p = (struct nfs_write_data *)mempool_alloc(nfs_wdata_mempool, SLAB_NOFS); - if (p) { - memset(p, 0, sizeof(*p)); - INIT_LIST_HEAD(&p->pages); - } - return p; -} - -static __inline__ void nfs_writedata_free(struct nfs_write_data *p) -{ - mempool_free(p, nfs_wdata_mempool); -} - -static void nfs_writedata_release(struct rpc_task *task) +void nfs_writedata_release(struct rpc_task *task) { struct nfs_write_data *wdata = (struct nfs_write_data *)task->tk_calldata; nfs_writedata_free(wdata); } -static __inline__ struct nfs_write_data *nfs_commit_alloc(void) -{ - struct nfs_write_data *p; - p = (struct nfs_write_data *)mempool_alloc(nfs_commit_mempool, SLAB_NOFS); - if (p) { - memset(p, 0, sizeof(*p)); - INIT_LIST_HEAD(&p->pages); - } - return p; -} - -static __inline__ void nfs_commit_free(struct nfs_write_data *p) -{ - mempool_free(p, nfs_commit_mempool); -} - /* Adjust the file length if we're writing beyond the end */ static void nfs_grow_file(struct page *page, unsigned int offset, unsigned int count) { @@ -184,11 +151,10 @@ static int nfs_writepage_sync(struct nfs_open_context *ctx, struct inode *inode, int result, written = 0; struct nfs_write_data *wdata; - wdata = kmalloc(sizeof(*wdata), GFP_NOFS); + wdata = nfs_writedata_alloc(); if (!wdata) return -ENOMEM; - memset(wdata, 0, sizeof(*wdata)); wdata->flags = how; wdata->cred = ctx->cred; wdata->inode = inode; @@ -238,8 +204,7 @@ static int nfs_writepage_sync(struct nfs_open_context *ctx, struct inode *inode, io_error: nfs_end_data_update_defer(inode); - - kfree(wdata); + nfs_writedata_free(wdata); return written ? written : result; } @@ -1199,7 +1164,8 @@ void nfs_writeback_done(struct rpc_task *task) } if (time_before(complain, jiffies)) { printk(KERN_WARNING - "NFS: Server wrote less than requested.\n"); + "NFS: Server wrote zero bytes, expected %u.\n", + argp->count); complain = jiffies + 300 * HZ; } /* Can't do anything about it except throw an error. */