From: NeilBrown from RFC 3530: "Share reservations are established by OPEN operations and by their nature are mandatory in that when the OPEN denies READ or WRITE operations, that denial results in such operations being rejected with error NFS4ERR_LOCKED." (Note that share_denied is really only a legal error for OPEN.) Signed-off-by: Andy Adamson Signed-off-by: J. Bruce Fields Signed-off-by: Neil Brown Signed-off-by: Andrew Morton --- fs/nfsd/nfs4state.c | 2 +- include/linux/nfsd/nfsd.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff -puN fs/nfsd/nfs4state.c~nfsd4-return-better-error-on-io-incompatible-with-open-mode fs/nfsd/nfs4state.c --- 25/fs/nfsd/nfs4state.c~nfsd4-return-better-error-on-io-incompatible-with-open-mode Wed Jul 6 13:09:10 2005 +++ 25-akpm/fs/nfsd/nfs4state.c Wed Jul 6 13:09:10 2005 @@ -1295,7 +1295,7 @@ nfs4_share_conflict(struct svc_fh *curre fp = find_file(ino); if (!fp) return nfs_ok; - ret = nfserr_share_denied; + ret = nfserr_locked; /* Search for conflicting share reservations */ list_for_each_entry(stp, &fp->fi_stateids, st_perfile) { if (test_bit(deny_type, &stp->st_deny_bmap) || diff -puN include/linux/nfsd/nfsd.h~nfsd4-return-better-error-on-io-incompatible-with-open-mode include/linux/nfsd/nfsd.h --- 25/include/linux/nfsd/nfsd.h~nfsd4-return-better-error-on-io-incompatible-with-open-mode Wed Jul 6 13:09:10 2005 +++ 25-akpm/include/linux/nfsd/nfsd.h Wed Jul 6 13:09:10 2005 @@ -231,6 +231,7 @@ void nfsd_lockd_shutdown(void); #define nfserr_reclaim_bad __constant_htonl(NFSERR_RECLAIM_BAD) #define nfserr_badname __constant_htonl(NFSERR_BADNAME) #define nfserr_cb_path_down __constant_htonl(NFSERR_CB_PATH_DOWN) +#define nfserr_locked __constant_htonl(NFSERR_LOCKED) /* error codes for internal use */ /* if a request fails due to kmalloc failure, it gets dropped. _