提交 88be9f99 编写于 作者: T Trond Myklebust

NFS: Replace vfsmount and dentry in nfs_open_context with struct path

Signed-off-by: NTrond Myklebust <Trond.Myklebust@netapp.com>
上级 de05a0cc
...@@ -74,7 +74,7 @@ static void nfs_delegation_claim_opens(struct inode *inode) ...@@ -74,7 +74,7 @@ static void nfs_delegation_claim_opens(struct inode *inode)
continue; continue;
get_nfs_open_context(ctx); get_nfs_open_context(ctx);
spin_unlock(&inode->i_lock); spin_unlock(&inode->i_lock);
err = nfs4_open_delegation_recall(ctx->dentry, state); err = nfs4_open_delegation_recall(ctx->path.dentry, state);
if (err >= 0) if (err >= 0)
err = nfs_delegation_claim_locks(ctx, state); err = nfs_delegation_claim_locks(ctx, state);
put_nfs_open_context(ctx); put_nfs_open_context(ctx);
......
...@@ -266,7 +266,7 @@ static const struct rpc_call_ops nfs_read_direct_ops = { ...@@ -266,7 +266,7 @@ static const struct rpc_call_ops nfs_read_direct_ops = {
static ssize_t nfs_direct_read_schedule(struct nfs_direct_req *dreq, unsigned long user_addr, size_t count, loff_t pos) static ssize_t nfs_direct_read_schedule(struct nfs_direct_req *dreq, unsigned long user_addr, size_t count, loff_t pos)
{ {
struct nfs_open_context *ctx = dreq->ctx; struct nfs_open_context *ctx = dreq->ctx;
struct inode *inode = ctx->dentry->d_inode; struct inode *inode = ctx->path.dentry->d_inode;
size_t rsize = NFS_SERVER(inode)->rsize; size_t rsize = NFS_SERVER(inode)->rsize;
unsigned int pgbase; unsigned int pgbase;
int result; int result;
...@@ -606,7 +606,7 @@ static const struct rpc_call_ops nfs_write_direct_ops = { ...@@ -606,7 +606,7 @@ static const struct rpc_call_ops nfs_write_direct_ops = {
static ssize_t nfs_direct_write_schedule(struct nfs_direct_req *dreq, unsigned long user_addr, size_t count, loff_t pos, int sync) static ssize_t nfs_direct_write_schedule(struct nfs_direct_req *dreq, unsigned long user_addr, size_t count, loff_t pos, int sync)
{ {
struct nfs_open_context *ctx = dreq->ctx; struct nfs_open_context *ctx = dreq->ctx;
struct inode *inode = ctx->dentry->d_inode; struct inode *inode = ctx->path.dentry->d_inode;
size_t wsize = NFS_SERVER(inode)->wsize; size_t wsize = NFS_SERVER(inode)->wsize;
unsigned int pgbase; unsigned int pgbase;
int result; int result;
......
...@@ -462,8 +462,8 @@ static struct nfs_open_context *alloc_nfs_open_context(struct vfsmount *mnt, str ...@@ -462,8 +462,8 @@ static struct nfs_open_context *alloc_nfs_open_context(struct vfsmount *mnt, str
ctx = kmalloc(sizeof(*ctx), GFP_KERNEL); ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
if (ctx != NULL) { if (ctx != NULL) {
atomic_set(&ctx->count, 1); atomic_set(&ctx->count, 1);
ctx->dentry = dget(dentry); ctx->path.dentry = dget(dentry);
ctx->vfsmnt = mntget(mnt); ctx->path.mnt = mntget(mnt);
ctx->cred = get_rpccred(cred); ctx->cred = get_rpccred(cred);
ctx->state = NULL; ctx->state = NULL;
ctx->lockowner = current->files; ctx->lockowner = current->files;
...@@ -484,7 +484,7 @@ void put_nfs_open_context(struct nfs_open_context *ctx) ...@@ -484,7 +484,7 @@ void put_nfs_open_context(struct nfs_open_context *ctx)
{ {
if (atomic_dec_and_test(&ctx->count)) { if (atomic_dec_and_test(&ctx->count)) {
if (!list_empty(&ctx->list)) { if (!list_empty(&ctx->list)) {
struct inode *inode = ctx->dentry->d_inode; struct inode *inode = ctx->path.dentry->d_inode;
spin_lock(&inode->i_lock); spin_lock(&inode->i_lock);
list_del(&ctx->list); list_del(&ctx->list);
spin_unlock(&inode->i_lock); spin_unlock(&inode->i_lock);
...@@ -493,8 +493,8 @@ void put_nfs_open_context(struct nfs_open_context *ctx) ...@@ -493,8 +493,8 @@ void put_nfs_open_context(struct nfs_open_context *ctx)
nfs4_close_state(ctx->state, ctx->mode); nfs4_close_state(ctx->state, ctx->mode);
if (ctx->cred != NULL) if (ctx->cred != NULL)
put_rpccred(ctx->cred); put_rpccred(ctx->cred);
dput(ctx->dentry); dput(ctx->path.dentry);
mntput(ctx->vfsmnt); mntput(ctx->path.mnt);
kfree(ctx); kfree(ctx);
} }
} }
......
...@@ -512,7 +512,7 @@ static int nfs4_open_reclaim(struct nfs4_state_owner *sp, struct nfs4_state *sta ...@@ -512,7 +512,7 @@ static int nfs4_open_reclaim(struct nfs4_state_owner *sp, struct nfs4_state *sta
ctx = nfs4_state_find_open_context(state); ctx = nfs4_state_find_open_context(state);
if (IS_ERR(ctx)) if (IS_ERR(ctx))
return PTR_ERR(ctx); return PTR_ERR(ctx);
ret = nfs4_do_open_reclaim(sp, state, ctx->dentry); ret = nfs4_do_open_reclaim(sp, state, ctx->path.dentry);
put_nfs_open_context(ctx); put_nfs_open_context(ctx);
return ret; return ret;
} }
...@@ -862,7 +862,7 @@ static int nfs4_open_expired(struct nfs4_state_owner *sp, struct nfs4_state *sta ...@@ -862,7 +862,7 @@ static int nfs4_open_expired(struct nfs4_state_owner *sp, struct nfs4_state *sta
ctx = nfs4_state_find_open_context(state); ctx = nfs4_state_find_open_context(state);
if (IS_ERR(ctx)) if (IS_ERR(ctx))
return PTR_ERR(ctx); return PTR_ERR(ctx);
ret = nfs4_do_open_expired(sp, state, ctx->dentry); ret = nfs4_do_open_expired(sp, state, ctx->path.dentry);
put_nfs_open_context(ctx); put_nfs_open_context(ctx);
return ret; return ret;
} }
...@@ -3285,7 +3285,7 @@ static void nfs4_lock_done(struct rpc_task *task, void *calldata) ...@@ -3285,7 +3285,7 @@ static void nfs4_lock_done(struct rpc_task *task, void *calldata)
memcpy(data->lsp->ls_stateid.data, data->res.stateid.data, memcpy(data->lsp->ls_stateid.data, data->res.stateid.data,
sizeof(data->lsp->ls_stateid.data)); sizeof(data->lsp->ls_stateid.data));
data->lsp->ls_flags |= NFS_LOCK_INITIALIZED; data->lsp->ls_flags |= NFS_LOCK_INITIALIZED;
renew_lease(NFS_SERVER(data->ctx->dentry->d_inode), data->timestamp); renew_lease(NFS_SERVER(data->ctx->path.dentry->d_inode), data->timestamp);
} }
nfs_increment_lock_seqid(data->rpc_status, data->arg.lock_seqid); nfs_increment_lock_seqid(data->rpc_status, data->arg.lock_seqid);
out: out:
......
...@@ -114,7 +114,7 @@ void nfs_unlock_request(struct nfs_page *req) ...@@ -114,7 +114,7 @@ void nfs_unlock_request(struct nfs_page *req)
*/ */
int nfs_set_page_writeback_locked(struct nfs_page *req) int nfs_set_page_writeback_locked(struct nfs_page *req)
{ {
struct nfs_inode *nfsi = NFS_I(req->wb_context->dentry->d_inode); struct nfs_inode *nfsi = NFS_I(req->wb_context->path.dentry->d_inode);
if (!nfs_lock_request(req)) if (!nfs_lock_request(req))
return 0; return 0;
...@@ -127,7 +127,7 @@ int nfs_set_page_writeback_locked(struct nfs_page *req) ...@@ -127,7 +127,7 @@ int nfs_set_page_writeback_locked(struct nfs_page *req)
*/ */
void nfs_clear_page_writeback(struct nfs_page *req) void nfs_clear_page_writeback(struct nfs_page *req)
{ {
struct nfs_inode *nfsi = NFS_I(req->wb_context->dentry->d_inode); struct nfs_inode *nfsi = NFS_I(req->wb_context->path.dentry->d_inode);
if (req->wb_page != NULL) { if (req->wb_page != NULL) {
spin_lock(&nfsi->req_lock); spin_lock(&nfsi->req_lock);
...@@ -193,7 +193,7 @@ static int nfs_wait_bit_interruptible(void *word) ...@@ -193,7 +193,7 @@ static int nfs_wait_bit_interruptible(void *word)
int int
nfs_wait_on_request(struct nfs_page *req) nfs_wait_on_request(struct nfs_page *req)
{ {
struct rpc_clnt *clnt = NFS_CLIENT(req->wb_context->dentry->d_inode); struct rpc_clnt *clnt = NFS_CLIENT(req->wb_context->path.dentry->d_inode);
sigset_t oldmask; sigset_t oldmask;
int ret = 0; int ret = 0;
......
...@@ -145,8 +145,8 @@ static void nfs_readpage_release(struct nfs_page *req) ...@@ -145,8 +145,8 @@ static void nfs_readpage_release(struct nfs_page *req)
unlock_page(req->wb_page); unlock_page(req->wb_page);
dprintk("NFS: read done (%s/%Ld %d@%Ld)\n", dprintk("NFS: read done (%s/%Ld %d@%Ld)\n",
req->wb_context->dentry->d_inode->i_sb->s_id, req->wb_context->path.dentry->d_inode->i_sb->s_id,
(long long)NFS_FILEID(req->wb_context->dentry->d_inode), (long long)NFS_FILEID(req->wb_context->path.dentry->d_inode),
req->wb_bytes, req->wb_bytes,
(long long)req_offset(req)); (long long)req_offset(req));
nfs_clear_request(req); nfs_clear_request(req);
...@@ -164,7 +164,7 @@ static void nfs_read_rpcsetup(struct nfs_page *req, struct nfs_read_data *data, ...@@ -164,7 +164,7 @@ static void nfs_read_rpcsetup(struct nfs_page *req, struct nfs_read_data *data,
int flags; int flags;
data->req = req; data->req = req;
data->inode = inode = req->wb_context->dentry->d_inode; data->inode = inode = req->wb_context->path.dentry->d_inode;
data->cred = req->wb_context->cred; data->cred = req->wb_context->cred;
data->args.fh = NFS_FH(inode); data->args.fh = NFS_FH(inode);
......
...@@ -407,7 +407,7 @@ static int nfs_inode_add_request(struct inode *inode, struct nfs_page *req) ...@@ -407,7 +407,7 @@ static int nfs_inode_add_request(struct inode *inode, struct nfs_page *req)
*/ */
static void nfs_inode_remove_request(struct nfs_page *req) static void nfs_inode_remove_request(struct nfs_page *req)
{ {
struct inode *inode = req->wb_context->dentry->d_inode; struct inode *inode = req->wb_context->path.dentry->d_inode;
struct nfs_inode *nfsi = NFS_I(inode); struct nfs_inode *nfsi = NFS_I(inode);
BUG_ON (!NFS_WBACK_BUSY(req)); BUG_ON (!NFS_WBACK_BUSY(req));
...@@ -455,7 +455,7 @@ nfs_dirty_request(struct nfs_page *req) ...@@ -455,7 +455,7 @@ nfs_dirty_request(struct nfs_page *req)
static void static void
nfs_mark_request_commit(struct nfs_page *req) nfs_mark_request_commit(struct nfs_page *req)
{ {
struct inode *inode = req->wb_context->dentry->d_inode; struct inode *inode = req->wb_context->path.dentry->d_inode;
struct nfs_inode *nfsi = NFS_I(inode); struct nfs_inode *nfsi = NFS_I(inode);
spin_lock(&nfsi->req_lock); spin_lock(&nfsi->req_lock);
...@@ -789,7 +789,7 @@ static void nfs_write_rpcsetup(struct nfs_page *req, ...@@ -789,7 +789,7 @@ static void nfs_write_rpcsetup(struct nfs_page *req,
* NB: take care not to mess about with data->commit et al. */ * NB: take care not to mess about with data->commit et al. */
data->req = req; data->req = req;
data->inode = inode = req->wb_context->dentry->d_inode; data->inode = inode = req->wb_context->path.dentry->d_inode;
data->cred = req->wb_context->cred; data->cred = req->wb_context->cred;
data->args.fh = NFS_FH(inode); data->args.fh = NFS_FH(inode);
...@@ -957,8 +957,8 @@ static void nfs_writeback_done_partial(struct rpc_task *task, void *calldata) ...@@ -957,8 +957,8 @@ static void nfs_writeback_done_partial(struct rpc_task *task, void *calldata)
struct page *page = req->wb_page; struct page *page = req->wb_page;
dprintk("NFS: write (%s/%Ld %d@%Ld)", dprintk("NFS: write (%s/%Ld %d@%Ld)",
req->wb_context->dentry->d_inode->i_sb->s_id, req->wb_context->path.dentry->d_inode->i_sb->s_id,
(long long)NFS_FILEID(req->wb_context->dentry->d_inode), (long long)NFS_FILEID(req->wb_context->path.dentry->d_inode),
req->wb_bytes, req->wb_bytes,
(long long)req_offset(req)); (long long)req_offset(req));
...@@ -1023,8 +1023,8 @@ static void nfs_writeback_done_full(struct rpc_task *task, void *calldata) ...@@ -1023,8 +1023,8 @@ static void nfs_writeback_done_full(struct rpc_task *task, void *calldata)
page = req->wb_page; page = req->wb_page;
dprintk("NFS: write (%s/%Ld %d@%Ld)", dprintk("NFS: write (%s/%Ld %d@%Ld)",
req->wb_context->dentry->d_inode->i_sb->s_id, req->wb_context->path.dentry->d_inode->i_sb->s_id,
(long long)NFS_FILEID(req->wb_context->dentry->d_inode), (long long)NFS_FILEID(req->wb_context->path.dentry->d_inode),
req->wb_bytes, req->wb_bytes,
(long long)req_offset(req)); (long long)req_offset(req));
...@@ -1162,7 +1162,7 @@ static void nfs_commit_rpcsetup(struct list_head *head, ...@@ -1162,7 +1162,7 @@ static void nfs_commit_rpcsetup(struct list_head *head,
list_splice_init(head, &data->pages); list_splice_init(head, &data->pages);
first = nfs_list_entry(data->pages.next); first = nfs_list_entry(data->pages.next);
inode = first->wb_context->dentry->d_inode; inode = first->wb_context->path.dentry->d_inode;
data->inode = inode; data->inode = inode;
data->cred = first->wb_context->cred; data->cred = first->wb_context->cred;
...@@ -1239,8 +1239,8 @@ static void nfs_commit_done(struct rpc_task *task, void *calldata) ...@@ -1239,8 +1239,8 @@ static void nfs_commit_done(struct rpc_task *task, void *calldata)
dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS);
dprintk("NFS: commit (%s/%Ld %d@%Ld)", dprintk("NFS: commit (%s/%Ld %d@%Ld)",
req->wb_context->dentry->d_inode->i_sb->s_id, req->wb_context->path.dentry->d_inode->i_sb->s_id,
(long long)NFS_FILEID(req->wb_context->dentry->d_inode), (long long)NFS_FILEID(req->wb_context->path.dentry->d_inode),
req->wb_bytes, req->wb_bytes,
(long long)req_offset(req)); (long long)req_offset(req));
if (task->tk_status < 0) { if (task->tk_status < 0) {
......
...@@ -31,6 +31,7 @@ ...@@ -31,6 +31,7 @@
#include <linux/in.h> #include <linux/in.h>
#include <linux/mm.h> #include <linux/mm.h>
#include <linux/namei.h>
#include <linux/pagemap.h> #include <linux/pagemap.h>
#include <linux/rbtree.h> #include <linux/rbtree.h>
#include <linux/rwsem.h> #include <linux/rwsem.h>
...@@ -70,8 +71,7 @@ struct nfs_access_entry { ...@@ -70,8 +71,7 @@ struct nfs_access_entry {
struct nfs4_state; struct nfs4_state;
struct nfs_open_context { struct nfs_open_context {
atomic_t count; atomic_t count;
struct vfsmount *vfsmnt; struct path path;
struct dentry *dentry;
struct rpc_cred *cred; struct rpc_cred *cred;
struct nfs4_state *state; struct nfs4_state *state;
fl_owner_t lockowner; fl_owner_t lockowner;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册