diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c
index 4ad7fff9ccaf7d7733429fd281078e09e093c24e..d23393ab76bfe1c7c477c5d765991bfbc61898e2 100644
--- a/fs/nfs/dir.c
+++ b/fs/nfs/dir.c
@@ -2450,6 +2450,9 @@ int nfs_permission(struct inode *inode, int mask)
 		case S_IFLNK:
 			goto out;
 		case S_IFREG:
+			if ((mask & MAY_OPEN) &&
+			   nfs_server_capable(inode, NFS_CAP_ATOMIC_OPEN))
+				return 0;
 			break;
 		case S_IFDIR:
 			/*