]> granicus.if.org Git - zfs/commitdiff
Remove checks for mandatory locks
authorNed Bass <bass6@llnl.gov>
Thu, 16 Oct 2014 20:52:56 +0000 (13:52 -0700)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Wed, 22 Oct 2014 18:06:53 +0000 (11:06 -0700)
The Linux VFS handles mandatory locks generically so we shouldn't
need to check for conflicting locks in zfs_read(), zfs_write(), or
zfs_freesp().  Linux 3.18 removed the lock_may_read() and
lock_may_write() interfaces which we were relying on for this
purpose.  Rather than emulating those interfaces we remove the
redundant checks.

Signed-off-by: Ned Bass <bass6@llnl.gov>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #2804

module/zfs/zfs_vnops.c
module/zfs/zfs_znode.c

index 33f9e0ec935f881716020545a4827d10cdcd93c4..2f55e562eaaee9ce66b12e541d1f1f06087d6bd3 100644 (file)
@@ -473,15 +473,6 @@ zfs_read(struct inode *ip, uio_t *uio, int ioflag, cred_t *cr)
                return (0);
        }
 
-       /*
-        * Check for mandatory locks
-        */
-       if (mandatory_lock(ip) &&
-           !lock_may_read(ip, uio->uio_loffset, uio->uio_resid)) {
-               ZFS_EXIT(zsb);
-               return (SET_ERROR(EAGAIN));
-       }
-
        /*
         * If we're in FRSYNC mode, sync out this znode before reading it.
         */
@@ -650,15 +641,6 @@ zfs_write(struct inode *ip, uio_t *uio, int ioflag, cred_t *cr)
                return (SET_ERROR(EINVAL));
        }
 
-       /*
-        * Check for mandatory locks before calling zfs_range_lock()
-        * in order to prevent a deadlock with locks set via fcntl().
-        */
-       if (mandatory_lock(ip) && !lock_may_write(ip, woff, n)) {
-               ZFS_EXIT(zsb);
-               return (SET_ERROR(EAGAIN));
-       }
-
        /*
         * Pre-fault the pages to ensure slow (eg NFS) pages
         * don't hold up txg.
index 90dbfd31579f90d474c41e48af998b3dba6585b4..f02c02184b9236a9e7b5cc91c1ba6076929ddeba 100644 (file)
@@ -1546,7 +1546,6 @@ zfs_trunc(znode_t *zp, uint64_t end)
 int
 zfs_freesp(znode_t *zp, uint64_t off, uint64_t len, int flag, boolean_t log)
 {
-       struct inode *ip = ZTOI(zp);
        dmu_tx_t *tx;
        zfs_sb_t *zsb = ZTOZSB(zp);
        zilog_t *zilog = zsb->z_log;
@@ -1567,15 +1566,6 @@ zfs_freesp(znode_t *zp, uint64_t off, uint64_t len, int flag, boolean_t log)
                goto out;
        }
 
-       /*
-        * Check for any locks in the region to be freed.
-        */
-       if (ip->i_flock && mandatory_lock(ip)) {
-               uint64_t length = (len ? len : zp->z_size - off);
-               if (!lock_may_write(ip, off, length))
-                       return (SET_ERROR(EAGAIN));
-       }
-
        if (len == 0) {
                error = zfs_trunc(zp, off);
        } else {