mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-28 07:13:34 +00:00
Merge branch 'bugfixes' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6
* 'bugfixes' of git://git.linux-nfs.org/projects/trondmy/nfs-2.6: NFSv4: The link() operation should return any delegation on the file NFSv4: Fix two unbalanced put_rpccred() issues. NFSv4: Fix a bug when the server returns NFS4ERR_RESOURCE nfs: Panic when commit fails
This commit is contained in:
commit
fb3165b59f
4 changed files with 11 additions and 8 deletions
|
@ -1536,6 +1536,8 @@ nfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *dentry)
|
||||||
old_dentry->d_parent->d_name.name, old_dentry->d_name.name,
|
old_dentry->d_parent->d_name.name, old_dentry->d_name.name,
|
||||||
dentry->d_parent->d_name.name, dentry->d_name.name);
|
dentry->d_parent->d_name.name, dentry->d_name.name);
|
||||||
|
|
||||||
|
nfs_inode_return_delegation(inode);
|
||||||
|
|
||||||
d_drop(dentry);
|
d_drop(dentry);
|
||||||
error = NFS_PROTO(dir)->link(inode, dir, &dentry->d_name);
|
error = NFS_PROTO(dir)->link(inode, dir, &dentry->d_name);
|
||||||
if (error == 0) {
|
if (error == 0) {
|
||||||
|
|
|
@ -457,6 +457,7 @@ static void nfs_direct_write_reschedule(struct nfs_direct_req *dreq)
|
||||||
};
|
};
|
||||||
struct rpc_task_setup task_setup_data = {
|
struct rpc_task_setup task_setup_data = {
|
||||||
.rpc_client = NFS_CLIENT(inode),
|
.rpc_client = NFS_CLIENT(inode),
|
||||||
|
.rpc_message = &msg,
|
||||||
.callback_ops = &nfs_write_direct_ops,
|
.callback_ops = &nfs_write_direct_ops,
|
||||||
.workqueue = nfsiod_workqueue,
|
.workqueue = nfsiod_workqueue,
|
||||||
.flags = RPC_TASK_ASYNC,
|
.flags = RPC_TASK_ASYNC,
|
||||||
|
|
|
@ -72,12 +72,17 @@ static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
|
||||||
/* Prevent leaks of NFSv4 errors into userland */
|
/* Prevent leaks of NFSv4 errors into userland */
|
||||||
static int nfs4_map_errors(int err)
|
static int nfs4_map_errors(int err)
|
||||||
{
|
{
|
||||||
if (err < -1000) {
|
if (err >= -1000)
|
||||||
|
return err;
|
||||||
|
switch (err) {
|
||||||
|
case -NFS4ERR_RESOURCE:
|
||||||
|
return -EREMOTEIO;
|
||||||
|
default:
|
||||||
dprintk("%s could not handle NFSv4 error %d\n",
|
dprintk("%s could not handle NFSv4 error %d\n",
|
||||||
__func__, -err);
|
__func__, -err);
|
||||||
return -EIO;
|
break;
|
||||||
}
|
}
|
||||||
return err;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -3060,9 +3065,6 @@ static void nfs4_renew_done(struct rpc_task *task, void *data)
|
||||||
if (time_before(clp->cl_last_renewal,timestamp))
|
if (time_before(clp->cl_last_renewal,timestamp))
|
||||||
clp->cl_last_renewal = timestamp;
|
clp->cl_last_renewal = timestamp;
|
||||||
spin_unlock(&clp->cl_lock);
|
spin_unlock(&clp->cl_lock);
|
||||||
dprintk("%s calling put_rpccred on rpc_cred %p\n", __func__,
|
|
||||||
task->tk_msg.rpc_cred);
|
|
||||||
put_rpccred(task->tk_msg.rpc_cred);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct rpc_call_ops nfs4_renew_ops = {
|
static const struct rpc_call_ops nfs4_renew_ops = {
|
||||||
|
@ -4877,7 +4879,6 @@ void nfs41_sequence_call_done(struct rpc_task *task, void *data)
|
||||||
nfs41_sequence_free_slot(clp, task->tk_msg.rpc_resp);
|
nfs41_sequence_free_slot(clp, task->tk_msg.rpc_resp);
|
||||||
dprintk("%s rpc_cred %p\n", __func__, task->tk_msg.rpc_cred);
|
dprintk("%s rpc_cred %p\n", __func__, task->tk_msg.rpc_cred);
|
||||||
|
|
||||||
put_rpccred(task->tk_msg.rpc_cred);
|
|
||||||
kfree(task->tk_msg.rpc_argp);
|
kfree(task->tk_msg.rpc_argp);
|
||||||
kfree(task->tk_msg.rpc_resp);
|
kfree(task->tk_msg.rpc_resp);
|
||||||
|
|
||||||
|
|
|
@ -5681,7 +5681,6 @@ static struct {
|
||||||
{ NFS4ERR_SERVERFAULT, -ESERVERFAULT },
|
{ NFS4ERR_SERVERFAULT, -ESERVERFAULT },
|
||||||
{ NFS4ERR_BADTYPE, -EBADTYPE },
|
{ NFS4ERR_BADTYPE, -EBADTYPE },
|
||||||
{ NFS4ERR_LOCKED, -EAGAIN },
|
{ NFS4ERR_LOCKED, -EAGAIN },
|
||||||
{ NFS4ERR_RESOURCE, -EREMOTEIO },
|
|
||||||
{ NFS4ERR_SYMLINK, -ELOOP },
|
{ NFS4ERR_SYMLINK, -ELOOP },
|
||||||
{ NFS4ERR_OP_ILLEGAL, -EOPNOTSUPP },
|
{ NFS4ERR_OP_ILLEGAL, -EOPNOTSUPP },
|
||||||
{ NFS4ERR_DEADLOCK, -EDEADLK },
|
{ NFS4ERR_DEADLOCK, -EDEADLK },
|
||||||
|
|
Loading…
Reference in a new issue