diff options
author | Volth <volth@webmaster.ms> | 2017-03-20 23:24:54 +0000 |
---|---|---|
committer | Tuomas Tynkkynen <tuomas@tuxera.com> | 2017-04-01 15:49:14 +0300 |
commit | ed41d50e9fe3d942cfde37e84de781c096309e5b (patch) | |
tree | 8e9956069296c54599b968984477827dbb7a389b | |
parent | d19384ca7e217dcd42eff673bafa07f9c6f183b9 (diff) | |
download | nixpkgs-ed41d50e9fe3d942cfde37e84de781c096309e5b.tar nixpkgs-ed41d50e9fe3d942cfde37e84de781c096309e5b.tar.gz nixpkgs-ed41d50e9fe3d942cfde37e84de781c096309e5b.tar.bz2 nixpkgs-ed41d50e9fe3d942cfde37e84de781c096309e5b.tar.lz nixpkgs-ed41d50e9fe3d942cfde37e84de781c096309e5b.tar.xz nixpkgs-ed41d50e9fe3d942cfde37e84de781c096309e5b.tar.zst nixpkgs-ed41d50e9fe3d942cfde37e84de781c096309e5b.zip |
kernel: fix 9p issues
[tuomas: rename the patch from 9p-hacks to something slighly more meaningful] Signed-off-by: Tuomas Tynkkynen <tuomas@tuxera.com>
-rw-r--r-- | pkgs/os-specific/linux/kernel/p9-fixes.patch | 85 | ||||
-rw-r--r-- | pkgs/os-specific/linux/kernel/patches.nix | 5 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 6 |
3 files changed, 96 insertions, 0 deletions
diff --git a/pkgs/os-specific/linux/kernel/p9-fixes.patch b/pkgs/os-specific/linux/kernel/p9-fixes.patch new file mode 100644 index 00000000000..f6061b60667 --- /dev/null +++ b/pkgs/os-specific/linux/kernel/p9-fixes.patch @@ -0,0 +1,85 @@ +diff --git a/fs/9p/vfs_inode.c b/fs/9p/vfs_inode.c +--- a/fs/9p/vfs_inode.c ++++ b/fs/9p/vfs_inode.c +@@ -483,6 +483,9 @@ static int v9fs_test_inode(struct inode *inode, void *data) + + if (v9inode->qid.type != st->qid.type) + return 0; ++ ++ if (v9inode->qid.path != st->qid.path) ++ return 0; + return 1; + } + +diff --git a/fs/9p/vfs_inode_dotl.c b/fs/9p/vfs_inode_dotl.c +--- a/fs/9p/vfs_inode_dotl.c ++++ b/fs/9p/vfs_inode_dotl.c +@@ -87,6 +87,9 @@ static int v9fs_test_inode_dotl(struct inode *inode, void *data) + + if (v9inode->qid.type != st->qid.type) + return 0; ++ ++ if (v9inode->qid.path != st->qid.path) ++ return 0; + return 1; + } + +diff --git a/net/9p/client.c b/net/9p/client.c +index 3ce672af1596..f1c8ad373f90 100644 +--- a/net/9p/client.c ++++ b/net/9p/client.c +@@ -749,8 +749,7 @@ p9_client_rpc(struct p9_client *c, int8_t type, const char *fmt, ...) + } + again: + /* Wait for the response */ +- err = wait_event_interruptible(*req->wq, +- req->status >= REQ_STATUS_RCVD); ++ err = wait_event_killable(*req->wq, req->status >= REQ_STATUS_RCVD); + + /* + * Make sure our req is coherent with regard to updates in other +diff --git a/net/9p/trans_virtio.c b/net/9p/trans_virtio.c +index f24b25c25106..f3a4efcf1456 100644 +--- a/net/9p/trans_virtio.c ++++ b/net/9p/trans_virtio.c +@@ -286,8 +286,8 @@ p9_virtio_request(struct p9_client *client, struct p9_req_t *req) + if (err == -ENOSPC) { + chan->ring_bufs_avail = 0; + spin_unlock_irqrestore(&chan->lock, flags); +- err = wait_event_interruptible(*chan->vc_wq, +- chan->ring_bufs_avail); ++ err = wait_event_killable(*chan->vc_wq, ++ chan->ring_bufs_avail); + if (err == -ERESTARTSYS) + return err; + +@@ -327,7 +327,7 @@ static int p9_get_mapped_pages(struct virtio_chan *chan, + * Other zc request to finish here + */ + if (atomic_read(&vp_pinned) >= chan->p9_max_pages) { +- err = wait_event_interruptible(vp_wq, ++ err = wait_event_killable(vp_wq, + (atomic_read(&vp_pinned) < chan->p9_max_pages)); + if (err == -ERESTARTSYS) + return err; +@@ -471,8 +471,8 @@ p9_virtio_zc_request(struct p9_client *client, struct p9_req_t *req, + if (err == -ENOSPC) { + chan->ring_bufs_avail = 0; + spin_unlock_irqrestore(&chan->lock, flags); +- err = wait_event_interruptible(*chan->vc_wq, +- chan->ring_bufs_avail); ++ err = wait_event_killable(*chan->vc_wq, ++ chan->ring_bufs_avail); + if (err == -ERESTARTSYS) + goto err_out; + +@@ -489,8 +489,7 @@ p9_virtio_zc_request(struct p9_client *client, struct p9_req_t *req, + virtqueue_kick(chan->vq); + spin_unlock_irqrestore(&chan->lock, flags); + p9_debug(P9_DEBUG_TRANS, "virtio request kicked\n"); +- err = wait_event_interruptible(*req->wq, +- req->status >= REQ_STATUS_RCVD); ++ err = wait_event_killable(*req->wq, req->status >= REQ_STATUS_RCVD); + /* + * Non kernel buffers are pinned, unpin them + */ diff --git a/pkgs/os-specific/linux/kernel/patches.nix b/pkgs/os-specific/linux/kernel/patches.nix index 5bb9d2d39ac..d8676413e82 100644 --- a/pkgs/os-specific/linux/kernel/patches.nix +++ b/pkgs/os-specific/linux/kernel/patches.nix @@ -52,6 +52,11 @@ rec { patch = ./bridge-stp-helper.patch; }; + p9_fixes = + { name = "p9-fixes"; + patch = ./p9-fixes.patch; + }; + no_xsave = { name = "no-xsave"; patch = ./no-xsave.patch; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index e403f303d12..a3ba43b95c3 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -11501,6 +11501,7 @@ with pkgs; linux_mptcp = callPackage ../os-specific/linux/kernel/linux-mptcp.nix { kernelPatches = [ kernelPatches.bridge_stp_helper + kernelPatches.p9_fixes kernelPatches.packet_fix_race_condition_CVE_2016_8655 kernelPatches.DCCP_double_free_vulnerability_CVE-2017-6074 ] @@ -11521,6 +11522,7 @@ with pkgs; linux_3_10 = callPackage ../os-specific/linux/kernel/linux-3.10.nix { kernelPatches = with kernelPatches; [ bridge_stp_helper + p9_fixes lguest_entry-linkage packet_fix_race_condition_CVE_2016_8655 DCCP_double_free_vulnerability_CVE-2017-6074 @@ -11535,6 +11537,7 @@ with pkgs; linux_4_4 = callPackage ../os-specific/linux/kernel/linux-4.4.nix { kernelPatches = [ kernelPatches.bridge_stp_helper + kernelPatches.p9_fixes kernelPatches.cpu-cgroup-v2."4.4" ] ++ lib.optionals ((platform.kernelArch or null) == "mips") @@ -11547,6 +11550,7 @@ with pkgs; linux_4_9 = callPackage ../os-specific/linux/kernel/linux-4.9.nix { kernelPatches = [ kernelPatches.bridge_stp_helper + kernelPatches.p9_fixes # See pkgs/os-specific/linux/kernel/cpu-cgroup-v2-patches/README.md # when adding a new linux version # !!! 4.7 patch doesn't apply, 4.9 patch not up yet, will keep checking @@ -11563,6 +11567,7 @@ with pkgs; linux_4_10 = callPackage ../os-specific/linux/kernel/linux-4.10.nix { kernelPatches = [ kernelPatches.bridge_stp_helper + kernelPatches.p9_fixes # See pkgs/os-specific/linux/kernel/cpu-cgroup-v2-patches/README.md # when adding a new linux version # !!! 4.7 patch doesn't apply, 4.9 patch not up yet, will keep checking @@ -11579,6 +11584,7 @@ with pkgs; linux_testing = callPackage ../os-specific/linux/kernel/linux-testing.nix { kernelPatches = [ kernelPatches.bridge_stp_helper + kernelPatches.p9_fixes kernelPatches.modinst_arg_list_too_long ] ++ lib.optionals ((platform.kernelArch or null) == "mips") [ kernelPatches.mips_fpureg_emu |