Merge branch 'devel-for-2.6.31' into for-2.6.31
Conflicts: fs/nfs/client.c fs/nfs/super.c
This commit is contained in:
@@ -1173,16 +1173,30 @@ int nfs4_open_delegation_recall(struct nfs_open_context *ctx, struct nfs4_state
|
||||
err = _nfs4_open_delegation_recall(ctx, state, stateid);
|
||||
switch (err) {
|
||||
case 0:
|
||||
return err;
|
||||
case -ENOENT:
|
||||
case -ESTALE:
|
||||
goto out;
|
||||
case -NFS4ERR_STALE_CLIENTID:
|
||||
case -NFS4ERR_STALE_STATEID:
|
||||
case -NFS4ERR_EXPIRED:
|
||||
/* Don't recall a delegation if it was lost */
|
||||
nfs4_schedule_state_recovery(server->nfs_client);
|
||||
return err;
|
||||
goto out;
|
||||
case -ERESTARTSYS:
|
||||
/*
|
||||
* The show must go on: exit, but mark the
|
||||
* stateid as needing recovery.
|
||||
*/
|
||||
case -NFS4ERR_ADMIN_REVOKED:
|
||||
case -NFS4ERR_BAD_STATEID:
|
||||
nfs4_state_mark_reclaim_nograce(server->nfs_client, state);
|
||||
case -ENOMEM:
|
||||
err = 0;
|
||||
goto out;
|
||||
}
|
||||
err = nfs4_handle_exception(server, err, &exception);
|
||||
} while (exception.retry);
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -3238,8 +3252,6 @@ static ssize_t nfs4_proc_get_acl(struct inode *inode, void *buf, size_t buflen)
|
||||
ret = nfs_revalidate_inode(server, inode);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
if (NFS_I(inode)->cache_validity & NFS_INO_INVALID_ACL)
|
||||
nfs_zap_acl_cache(inode);
|
||||
ret = nfs4_read_cached_acl(inode, buf, buflen);
|
||||
if (ret != -ENOENT)
|
||||
return ret;
|
||||
@@ -3977,8 +3989,6 @@ static int _nfs4_do_setlk(struct nfs4_state *state, int cmd, struct file_lock *f
|
||||
ret = nfs4_wait_for_completion_rpc_task(task);
|
||||
if (ret == 0) {
|
||||
ret = data->rpc_status;
|
||||
if (ret == -NFS4ERR_DENIED)
|
||||
ret = -EAGAIN;
|
||||
} else
|
||||
data->cancelled = 1;
|
||||
rpc_put_task(task);
|
||||
@@ -4066,9 +4076,11 @@ static int nfs4_proc_setlk(struct nfs4_state *state, int cmd, struct file_lock *
|
||||
int err;
|
||||
|
||||
do {
|
||||
err = _nfs4_proc_setlk(state, cmd, request);
|
||||
if (err == -NFS4ERR_DENIED)
|
||||
err = -EAGAIN;
|
||||
err = nfs4_handle_exception(NFS_SERVER(state->inode),
|
||||
_nfs4_proc_setlk(state, cmd, request),
|
||||
&exception);
|
||||
err, &exception);
|
||||
} while (exception.retry);
|
||||
return err;
|
||||
}
|
||||
@@ -4120,8 +4132,37 @@ int nfs4_lock_delegation_recall(struct nfs4_state *state, struct file_lock *fl)
|
||||
goto out;
|
||||
do {
|
||||
err = _nfs4_do_setlk(state, F_SETLK, fl, 0);
|
||||
if (err != -NFS4ERR_DELAY)
|
||||
break;
|
||||
switch (err) {
|
||||
default:
|
||||
printk(KERN_ERR "%s: unhandled error %d.\n",
|
||||
__func__, err);
|
||||
case 0:
|
||||
case -ESTALE:
|
||||
goto out;
|
||||
case -NFS4ERR_EXPIRED:
|
||||
case -NFS4ERR_STALE_CLIENTID:
|
||||
case -NFS4ERR_STALE_STATEID:
|
||||
nfs4_schedule_state_recovery(server->nfs_client);
|
||||
goto out;
|
||||
case -ERESTARTSYS:
|
||||
/*
|
||||
* The show must go on: exit, but mark the
|
||||
* stateid as needing recovery.
|
||||
*/
|
||||
case -NFS4ERR_ADMIN_REVOKED:
|
||||
case -NFS4ERR_BAD_STATEID:
|
||||
case -NFS4ERR_OPENMODE:
|
||||
nfs4_state_mark_reclaim_nograce(server->nfs_client, state);
|
||||
err = 0;
|
||||
goto out;
|
||||
case -ENOMEM:
|
||||
case -NFS4ERR_DENIED:
|
||||
/* kill_proc(fl->fl_pid, SIGLOST, 1); */
|
||||
err = 0;
|
||||
goto out;
|
||||
case -NFS4ERR_DELAY:
|
||||
break;
|
||||
}
|
||||
err = nfs4_handle_exception(server, err, &exception);
|
||||
} while (exception.retry);
|
||||
out:
|
||||
|
Reference in New Issue
Block a user