pull manipulations of rpc_cred inside alloc_nfs_open_context()
No need to duplicate them in both callers; make it return ERR_PTR(-ENOMEM) on allocation failure instead of NULL and it'll be able to report rpc_lookup_cred() failures just fine. Callers are much happier that way... Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -629,23 +629,28 @@ void nfs_close_context(struct nfs_open_context *ctx, int is_sync)
|
||||
nfs_revalidate_inode(server, inode);
|
||||
}
|
||||
|
||||
struct nfs_open_context *alloc_nfs_open_context(struct dentry *dentry, struct rpc_cred *cred, fmode_t f_mode)
|
||||
struct nfs_open_context *alloc_nfs_open_context(struct dentry *dentry, fmode_t f_mode)
|
||||
{
|
||||
struct nfs_open_context *ctx;
|
||||
struct rpc_cred *cred = rpc_lookup_cred();
|
||||
if (IS_ERR(cred))
|
||||
return ERR_CAST(cred);
|
||||
|
||||
ctx = kmalloc(sizeof(*ctx), GFP_KERNEL);
|
||||
if (ctx != NULL) {
|
||||
nfs_sb_active(dentry->d_sb);
|
||||
ctx->dentry = dget(dentry);
|
||||
ctx->cred = get_rpccred(cred);
|
||||
ctx->state = NULL;
|
||||
ctx->mode = f_mode;
|
||||
ctx->flags = 0;
|
||||
ctx->error = 0;
|
||||
nfs_init_lock_context(&ctx->lock_context);
|
||||
ctx->lock_context.open_context = ctx;
|
||||
INIT_LIST_HEAD(&ctx->list);
|
||||
if (!ctx) {
|
||||
put_rpccred(cred);
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
nfs_sb_active(dentry->d_sb);
|
||||
ctx->dentry = dget(dentry);
|
||||
ctx->cred = cred;
|
||||
ctx->state = NULL;
|
||||
ctx->mode = f_mode;
|
||||
ctx->flags = 0;
|
||||
ctx->error = 0;
|
||||
nfs_init_lock_context(&ctx->lock_context);
|
||||
ctx->lock_context.open_context = ctx;
|
||||
INIT_LIST_HEAD(&ctx->list);
|
||||
return ctx;
|
||||
}
|
||||
|
||||
@@ -738,15 +743,10 @@ static void nfs_file_clear_open_context(struct file *filp)
|
||||
int nfs_open(struct inode *inode, struct file *filp)
|
||||
{
|
||||
struct nfs_open_context *ctx;
|
||||
struct rpc_cred *cred;
|
||||
|
||||
cred = rpc_lookup_cred();
|
||||
if (IS_ERR(cred))
|
||||
return PTR_ERR(cred);
|
||||
ctx = alloc_nfs_open_context(filp->f_path.dentry, cred, filp->f_mode);
|
||||
put_rpccred(cred);
|
||||
if (ctx == NULL)
|
||||
return -ENOMEM;
|
||||
ctx = alloc_nfs_open_context(filp->f_path.dentry, filp->f_mode);
|
||||
if (IS_ERR(ctx))
|
||||
return PTR_ERR(ctx);
|
||||
nfs_file_set_open_context(filp, ctx);
|
||||
put_nfs_open_context(ctx);
|
||||
nfs_fscache_set_inode_cookie(inode, filp);
|
||||
|
Reference in New Issue
Block a user