diff options
Diffstat (limited to 'module/zfs/zfs_vnops.c')
-rw-r--r-- | module/zfs/zfs_vnops.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/module/zfs/zfs_vnops.c b/module/zfs/zfs_vnops.c index 174c918ab..64412a69d 100644 --- a/module/zfs/zfs_vnops.c +++ b/module/zfs/zfs_vnops.c @@ -21,6 +21,7 @@ /* * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2013 by Delphix. All rights reserved. + * Copyright 2014 Nexenta Systems, Inc. All rights reserved. * Copyright (c) 2015 by Chunwei Chen. All rights reserved. */ @@ -622,6 +623,15 @@ zfs_write(struct inode *ip, uio_t *uio, int ioflag, cred_t *cr) &zp->z_pflags, 8); /* + * Callers might not be able to detect properly that we are read-only, + * so check it explicitly here. + */ + if (zfs_is_readonly(zsb)) { + ZFS_EXIT(zsb); + return (SET_ERROR(EROFS)); + } + + /* * If immutable or not appending then return EPERM */ if ((zp->z_pflags & (ZFS_IMMUTABLE | ZFS_READONLY)) || @@ -4378,6 +4388,15 @@ zfs_space(struct inode *ip, int cmd, flock64_t *bfp, int flag, return (SET_ERROR(EINVAL)); } + /* + * Callers might not be able to detect properly that we are read-only, + * so check it explicitly here. + */ + if (zfs_is_readonly(zsb)) { + ZFS_EXIT(zsb); + return (SET_ERROR(EROFS)); + } + if ((error = convoff(ip, bfp, 0, offset))) { ZFS_EXIT(zsb); return (error); |