aboutsummaryrefslogtreecommitdiffstats
path: root/fs/nfs/nfs4proc.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/nfs/nfs4proc.c')
-rw-r--r--fs/nfs/nfs4proc.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index c9ecb8119632..3db1c9f0b09c 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -419,6 +419,22 @@ static int _nfs4_proc_open(struct inode *dir, struct nfs4_state_owner *sp, stru
419 o_arg->clientid = sp->so_client->cl_clientid; 419 o_arg->clientid = sp->so_client->cl_clientid;
420 420
421 status = rpc_call_sync(server->client, &msg, RPC_TASK_NOINTR); 421 status = rpc_call_sync(server->client, &msg, RPC_TASK_NOINTR);
422 if (status == 0) {
423 /* OPEN on anything except a regular file is disallowed in NFSv4 */
424 switch (o_res->f_attr->mode & S_IFMT) {
425 case S_IFREG:
426 break;
427 case S_IFLNK:
428 status = -ELOOP;
429 break;
430 case S_IFDIR:
431 status = -EISDIR;
432 break;
433 default:
434 status = -ENOTDIR;
435 }
436 }
437
422 nfs_increment_open_seqid(status, o_arg->seqid); 438 nfs_increment_open_seqid(status, o_arg->seqid);
423 if (status != 0) 439 if (status != 0)
424 goto out; 440 goto out;