提交 098107a0 编写于 作者: L Linus Torvalds

Merge branch 'hotfixes' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6

* 'hotfixes' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6:
  SUNRPC: Fix a memory leak in rpc_create()
  fix bug - executing FDPIC ELF on NFS mount triggers BUG() at mm/nommu.c:862:/do_mmap_private()
  NFS: initialize flags field in nfs_open_context
  SUNRPC: don't call flush_dcache_page() with an invalid pointer
...@@ -64,7 +64,11 @@ const struct file_operations nfs_file_operations = { ...@@ -64,7 +64,11 @@ const struct file_operations nfs_file_operations = {
.write = do_sync_write, .write = do_sync_write,
.aio_read = nfs_file_read, .aio_read = nfs_file_read,
.aio_write = nfs_file_write, .aio_write = nfs_file_write,
#ifdef CONFIG_MMU
.mmap = nfs_file_mmap, .mmap = nfs_file_mmap,
#else
.mmap = generic_file_mmap,
#endif
.open = nfs_file_open, .open = nfs_file_open,
.flush = nfs_file_flush, .flush = nfs_file_flush,
.release = nfs_file_release, .release = nfs_file_release,
......
...@@ -506,6 +506,7 @@ static struct nfs_open_context *alloc_nfs_open_context(struct vfsmount *mnt, str ...@@ -506,6 +506,7 @@ static struct nfs_open_context *alloc_nfs_open_context(struct vfsmount *mnt, str
ctx->cred = get_rpccred(cred); ctx->cred = get_rpccred(cred);
ctx->state = NULL; ctx->state = NULL;
ctx->lockowner = current->files; ctx->lockowner = current->files;
ctx->flags = 0;
ctx->error = 0; ctx->error = 0;
ctx->dir_cookie = 0; ctx->dir_cookie = 0;
atomic_set(&ctx->count, 1); atomic_set(&ctx->count, 1);
......
...@@ -261,10 +261,6 @@ struct rpc_clnt *rpc_create(struct rpc_create_args *args) ...@@ -261,10 +261,6 @@ struct rpc_clnt *rpc_create(struct rpc_create_args *args)
}; };
char servername[48]; char servername[48];
xprt = xprt_create_transport(&xprtargs);
if (IS_ERR(xprt))
return (struct rpc_clnt *)xprt;
/* /*
* If the caller chooses not to specify a hostname, whip * If the caller chooses not to specify a hostname, whip
* up a string representation of the passed-in address. * up a string representation of the passed-in address.
......
...@@ -244,7 +244,7 @@ _copy_to_pages(struct page **pages, size_t pgbase, const char *p, size_t len) ...@@ -244,7 +244,7 @@ _copy_to_pages(struct page **pages, size_t pgbase, const char *p, size_t len)
pgto = pages + (pgbase >> PAGE_CACHE_SHIFT); pgto = pages + (pgbase >> PAGE_CACHE_SHIFT);
pgbase &= ~PAGE_CACHE_MASK; pgbase &= ~PAGE_CACHE_MASK;
do { for (;;) {
copy = PAGE_CACHE_SIZE - pgbase; copy = PAGE_CACHE_SIZE - pgbase;
if (copy > len) if (copy > len)
copy = len; copy = len;
...@@ -253,6 +253,10 @@ _copy_to_pages(struct page **pages, size_t pgbase, const char *p, size_t len) ...@@ -253,6 +253,10 @@ _copy_to_pages(struct page **pages, size_t pgbase, const char *p, size_t len)
memcpy(vto + pgbase, p, copy); memcpy(vto + pgbase, p, copy);
kunmap_atomic(vto, KM_USER0); kunmap_atomic(vto, KM_USER0);
len -= copy;
if (len == 0)
break;
pgbase += copy; pgbase += copy;
if (pgbase == PAGE_CACHE_SIZE) { if (pgbase == PAGE_CACHE_SIZE) {
flush_dcache_page(*pgto); flush_dcache_page(*pgto);
...@@ -260,8 +264,7 @@ _copy_to_pages(struct page **pages, size_t pgbase, const char *p, size_t len) ...@@ -260,8 +264,7 @@ _copy_to_pages(struct page **pages, size_t pgbase, const char *p, size_t len)
pgto++; pgto++;
} }
p += copy; p += copy;
}
} while ((len -= copy) != 0);
flush_dcache_page(*pgto); flush_dcache_page(*pgto);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册