]>
Commit | Line | Data |
---|---|---|
97d46215 JR |
1 | From 107077a193a5c35e83ab3ba890c429f31736d055 Mon Sep 17 00:00:00 2001 |
2 | From: Ned Bass <bass6@llnl.gov> | |
3 | Date: Thu, 16 Oct 2014 13:52:56 -0700 | |
4 | Subject: [PATCH] Remove checks for mandatory locks | |
5 | ||
6 | The Linux VFS handles mandatory locks generically so we shouldn't | |
7 | need to check for conflicting locks in zfs_read(), zfs_write(), or | |
8 | zfs_freesp(). Linux 3.18 removed the lock_may_read() and | |
9 | lock_may_write() interfaces which we were relying on for this | |
10 | purpose. Rather than emulating those interfaces we remove the | |
11 | redundant checks. | |
12 | ||
13 | Signed-off-by: Ned Bass <bass6@llnl.gov> | |
14 | Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> | |
15 | Closes #2804 | |
16 | --- | |
17 | module/zfs/zfs_vnops.c | 18 ------------------ | |
18 | module/zfs/zfs_znode.c | 10 ---------- | |
19 | 2 files changed, 28 deletions(-) | |
20 | ||
21 | diff --git a/module/zfs/zfs_vnops.c b/module/zfs/zfs_vnops.c | |
22 | index 4f53173..02fab99 100644 | |
23 | --- a/module/zfs/zfs_vnops.c | |
24 | +++ b/module/zfs/zfs_vnops.c | |
25 | @@ -471,15 +471,6 @@ zfs_read(struct inode *ip, uio_t *uio, int ioflag, cred_t *cr) | |
26 | } | |
27 | ||
28 | /* | |
29 | - * Check for mandatory locks | |
30 | - */ | |
31 | - if (mandatory_lock(ip) && | |
32 | - !lock_may_read(ip, uio->uio_loffset, uio->uio_resid)) { | |
33 | - ZFS_EXIT(zsb); | |
34 | - return (SET_ERROR(EAGAIN)); | |
35 | - } | |
36 | - | |
37 | - /* | |
38 | * If we're in FRSYNC mode, sync out this znode before reading it. | |
39 | */ | |
40 | if (ioflag & FRSYNC || zsb->z_os->os_sync == ZFS_SYNC_ALWAYS) | |
41 | @@ -648,15 +639,6 @@ zfs_write(struct inode *ip, uio_t *uio, int ioflag, cred_t *cr) | |
42 | } | |
43 | ||
44 | /* | |
45 | - * Check for mandatory locks before calling zfs_range_lock() | |
46 | - * in order to prevent a deadlock with locks set via fcntl(). | |
47 | - */ | |
48 | - if (mandatory_lock(ip) && !lock_may_write(ip, woff, n)) { | |
49 | - ZFS_EXIT(zsb); | |
50 | - return (SET_ERROR(EAGAIN)); | |
51 | - } | |
52 | - | |
53 | - /* | |
54 | * Pre-fault the pages to ensure slow (eg NFS) pages | |
55 | * don't hold up txg. | |
56 | * Skip this if uio contains loaned arc_buf. | |
57 | diff --git a/module/zfs/zfs_znode.c b/module/zfs/zfs_znode.c | |
58 | index 23e0907..a7ef07c 100644 | |
59 | --- a/module/zfs/zfs_znode.c | |
60 | +++ b/module/zfs/zfs_znode.c | |
61 | @@ -1471,7 +1471,6 @@ zfs_trunc(znode_t *zp, uint64_t end) | |
62 | int | |
63 | zfs_freesp(znode_t *zp, uint64_t off, uint64_t len, int flag, boolean_t log) | |
64 | { | |
65 | - struct inode *ip = ZTOI(zp); | |
66 | dmu_tx_t *tx; | |
67 | zfs_sb_t *zsb = ZTOZSB(zp); | |
68 | zilog_t *zilog = zsb->z_log; | |
69 | @@ -1493,15 +1492,6 @@ zfs_freesp(znode_t *zp, uint64_t off, uint64_t len, int flag, boolean_t log) | |
70 | return (error); | |
71 | } | |
72 | ||
73 | - /* | |
74 | - * Check for any locks in the region to be freed. | |
75 | - */ | |
76 | - if (ip->i_flock && mandatory_lock(ip)) { | |
77 | - uint64_t length = (len ? len : zp->z_size - off); | |
78 | - if (!lock_may_write(ip, off, length)) | |
79 | - return (SET_ERROR(EAGAIN)); | |
80 | - } | |
81 | - | |
82 | if (len == 0) { | |
83 | error = zfs_trunc(zp, off); | |
84 | } else { |