mirror of https://gitee.com/openkylin/linux.git
pnfs: Stop attempting LAYOUTGET on OPEN on failure
Signed-off-by: Fred Isaman <fred.isaman@gmail.com> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
78746a384c
commit
6e01260cee
|
@ -9465,7 +9465,8 @@ static const struct nfs4_minor_version_ops nfs_v4_1_minor_ops = {
|
|||
| NFS_CAP_ATOMIC_OPEN
|
||||
| NFS_CAP_POSIX_LOCK
|
||||
| NFS_CAP_STATEID_NFSV41
|
||||
| NFS_CAP_ATOMIC_OPEN_V1,
|
||||
| NFS_CAP_ATOMIC_OPEN_V1
|
||||
| NFS_CAP_LGOPEN,
|
||||
.init_client = nfs41_init_client,
|
||||
.shutdown_client = nfs41_shutdown_client,
|
||||
.match_stateid = nfs41_match_stateid,
|
||||
|
@ -9490,6 +9491,7 @@ static const struct nfs4_minor_version_ops nfs_v4_2_minor_ops = {
|
|||
| NFS_CAP_POSIX_LOCK
|
||||
| NFS_CAP_STATEID_NFSV41
|
||||
| NFS_CAP_ATOMIC_OPEN_V1
|
||||
| NFS_CAP_LGOPEN
|
||||
| NFS_CAP_ALLOCATE
|
||||
| NFS_CAP_COPY
|
||||
| NFS_CAP_DEALLOCATE
|
||||
|
|
|
@ -2088,6 +2088,8 @@ void pnfs_lgopen_prepare(struct nfs4_opendata *data,
|
|||
server->pnfs_curr_ld->flags & PNFS_LAYOUTGET_ON_OPEN))
|
||||
return;
|
||||
/* Could check on max_ops, but currently hardcoded high enough */
|
||||
if (!nfs_server_capable(data->dir->d_inode, NFS_CAP_LGOPEN))
|
||||
return;
|
||||
if (data->state)
|
||||
_lgopen_prepare_attached(data, ctx);
|
||||
else
|
||||
|
@ -2101,8 +2103,23 @@ void pnfs_parse_lgopen(struct inode *ino, struct nfs4_layoutget *lgp,
|
|||
struct pnfs_layout_segment *lseg;
|
||||
u32 iomode;
|
||||
|
||||
if (!lgp || lgp->res.layoutp->len == 0)
|
||||
if (!lgp)
|
||||
return;
|
||||
dprintk("%s: entered with status %i\n", __func__, lgp->res.status);
|
||||
if (lgp->res.status) {
|
||||
switch (lgp->res.status) {
|
||||
case -NFS4ERR_DELAY:
|
||||
case -NFS4ERR_GRACE:
|
||||
case -NFS4ERR_LAYOUTTRYLATER:
|
||||
break;
|
||||
default:
|
||||
/* FIXME - Any error not listed above permanently
|
||||
* halts lgopen attempts.
|
||||
*/
|
||||
NFS_SERVER(ino)->caps &= ~NFS_CAP_LGOPEN;
|
||||
}
|
||||
return;
|
||||
}
|
||||
if (!lgp->args.inode) {
|
||||
lo = _pnfs_grab_empty_layout(ino, ctx);
|
||||
if (!lo)
|
||||
|
|
|
@ -235,6 +235,7 @@ struct nfs_server {
|
|||
#define NFS_CAP_ACLS (1U << 3)
|
||||
#define NFS_CAP_ATOMIC_OPEN (1U << 4)
|
||||
/* #define NFS_CAP_CHANGE_ATTR (1U << 5) */
|
||||
#define NFS_CAP_LGOPEN (1U << 5)
|
||||
#define NFS_CAP_FILEID (1U << 6)
|
||||
#define NFS_CAP_MODE (1U << 7)
|
||||
#define NFS_CAP_NLINK (1U << 8)
|
||||
|
|
Loading…
Reference in New Issue