}
mutex_unlock(&lli->lli_och_mutex);
- if (!md_lock_match(ll_i2mdexp(inode), flags, ll_inode2fid(inode),
+ /* LU-4398: do not cache write open lock if the file has exec bit */
+ if ((lockmode == LCK_CW && inode->i_mode & S_IXUGO) ||
+ !md_lock_match(ll_i2mdexp(inode), flags, ll_inode2fid(inode),
LDLM_IBITS, &policy, lockmode, &lockh))
rc = ll_md_real_close(inode, fd->fd_omode);
}
run_test 816 "do not reset lru_resize on idle reconnect"
+cleanup_817() {
+ umount $tmpdir
+ exportfs -u localhost:$DIR/nfsexp
+ rm -rf $DIR/nfsexp
+}
+
+test_817() {
+ systemctl restart nfs-server.service || skip "failed to restart nfsd"
+
+ mkdir -p $DIR/nfsexp
+ exportfs -orw,no_root_squash localhost:$DIR/nfsexp ||
+ error "failed to export nfs"
+
+ tmpdir=$(mktemp -d /tmp/nfs-XXXXXX)
+ stack_trap cleanup_817 EXIT
+
+ mount -t nfs -orw localhost:$DIR/nfsexp $tmpdir ||
+ error "failed to mount nfs to $tmpdir"
+
+ cp /bin/true $tmpdir
+ $DIR/nfsexp/true || error "failed to execute 'true' command"
+}
+run_test 817 "nfsd won't cache write lock for exec file"
+
test_819a() {
dd if=/dev/zero of=$DIR/$tfile bs=1M count=1
cancel_lru_locks osc