NFS: Replace vfsmount and dentry in nfs_open_context with struct path
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
This commit is contained in:
@@ -74,7 +74,7 @@ again:
|
|||||||
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 = {
|
|||||||
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 = {
|
|||||||
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
|
|||||||
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)
|
|||||||
{
|
{
|
||||||
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)
|
|||||||
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
|
|||||||
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
|
|||||||
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)
|
|||||||
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)
|
|||||||
*/
|
*/
|
||||||
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)
|
|||||||
*/
|
*/
|
||||||
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)
|
|||||||
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)
|
|||||||
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,
|
|||||||
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)
|
|||||||
*/
|
*/
|
||||||
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)
|
|||||||
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,
|
|||||||
* 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)
|
|||||||
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)
|
|||||||
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,
|
|||||||
|
|
||||||
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)
|
|||||||
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 @@
|
|||||||
|
|
||||||
#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 {
|
|||||||
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;
|
||||||
|
Reference in New Issue
Block a user