From 7df4ff98286f3dd854eacf2c9182914bf034037d Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Mon, 7 Nov 2022 15:58:19 +0000 Subject: [PATCH] Remove memfd bundle Completely removes all bundles and vendor.tar.gz See also: https://bugzilla.redhat.com/show_bug.cgi?id=2140674 --- libblkio/0001-Use-io-uring-0.5.8.patch | 2 +- ...0002-virtio-driver-upgrade-to-memfd-0.6.1.patch | 174 +++++++++++++++++++++ libblkio/libblkio.spec | 22 +-- libblkio/vendor.tar.gz | Bin 7735 -> 0 bytes 4 files changed, 179 insertions(+), 19 deletions(-) create mode 100644 libblkio/0002-virtio-driver-upgrade-to-memfd-0.6.1.patch delete mode 100644 libblkio/vendor.tar.gz diff --git a/libblkio/0001-Use-io-uring-0.5.8.patch b/libblkio/0001-Use-io-uring-0.5.8.patch index c1b89bc..8218eb1 100644 --- a/libblkio/0001-Use-io-uring-0.5.8.patch +++ b/libblkio/0001-Use-io-uring-0.5.8.patch @@ -1,7 +1,7 @@ From 6758db0ec5359681d29395c9faf7873b835b6fa2 Mon Sep 17 00:00:00 2001 From: "Richard W.M. Jones" Date: Mon, 31 Oct 2022 09:27:19 +0000 -Subject: [PATCH] Use io-uring 0.5.8 +Subject: [PATCH 1/2] Use io-uring 0.5.8 And run cargo update which pulls in some new deps. --- diff --git a/libblkio/0002-virtio-driver-upgrade-to-memfd-0.6.1.patch b/libblkio/0002-virtio-driver-upgrade-to-memfd-0.6.1.patch new file mode 100644 index 0000000..5d88b7a --- /dev/null +++ b/libblkio/0002-virtio-driver-upgrade-to-memfd-0.6.1.patch @@ -0,0 +1,174 @@ +From 2ad24655a51cbbc630cc9eece8b294627275e3f8 Mon Sep 17 00:00:00 2001 +From: Stefan Hajnoczi +Date: Mon, 7 Nov 2022 09:41:59 -0500 +Subject: [PATCH 2/2] virtio-driver: upgrade to memfd 0.6.1 + +The memfd crate is outdated. Fedora would like to package the latest +crate. Upgrade to the latest memfd version. + +Suggested-by: Fabio Valentini +Signed-off-by: Stefan Hajnoczi +--- + Cargo.lock | 110 +++++++++++++++++++++++++++++++++++++-- + virtio-driver/Cargo.toml | 2 +- + 2 files changed, 108 insertions(+), 4 deletions(-) + +diff --git a/Cargo.lock b/Cargo.lock +index 241ae86..20f0714 100644 +--- a/Cargo.lock ++++ b/Cargo.lock +@@ -57,6 +57,33 @@ version = "0.3.0" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "ed3d0b5ff30645a68f35ece8cea4556ca14ef8a1651455f789a099a0513532a6" + ++[[package]] ++name = "errno" ++version = "0.2.8" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" ++dependencies = [ ++ "errno-dragonfly", ++ "libc", ++ "winapi", ++] ++ ++[[package]] ++name = "errno-dragonfly" ++version = "0.1.2" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" ++dependencies = [ ++ "cc", ++ "libc", ++] ++ ++[[package]] ++name = "io-lifetimes" ++version = "0.7.5" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "59ce5ef949d49ee85593fc4d3f3f95ad61657076395cbbce23e2121fc5542074" ++ + [[package]] + name = "io-uring" + version = "0.5.8" +@@ -89,13 +116,19 @@ version = "0.2.137" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89" + ++[[package]] ++name = "linux-raw-sys" ++version = "0.0.46" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "d4d2456c373231a208ad294c33dc5bff30051eafd954cd4caae83a712b12854d" ++ + [[package]] + name = "memfd" +-version = "0.4.1" ++version = "0.6.1" + source = "registry+https://github.com/rust-lang/crates.io-index" +-checksum = "f6627dc657574b49d6ad27105ed671822be56e0d2547d413bfbf3e8d8fa92e7a" ++checksum = "480b5a5de855d11ff13195950bdc8b98b5e942ef47afc447f6615cdcc4e15d80" + dependencies = [ +- "libc", ++ "rustix", + ] + + [[package]] +@@ -166,6 +199,20 @@ dependencies = [ + "proc-macro2", + ] + ++[[package]] ++name = "rustix" ++version = "0.35.13" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "727a1a6d65f786ec22df8a81ca3121107f235970dc1705ed681d3e6e8b9cd5f9" ++dependencies = [ ++ "bitflags", ++ "errno", ++ "io-lifetimes", ++ "libc", ++ "linux-raw-sys", ++ "windows-sys", ++] ++ + [[package]] + name = "syn" + version = "1.0.103" +@@ -223,3 +270,60 @@ name = "winapi-x86_64-pc-windows-gnu" + version = "0.4.0" + source = "registry+https://github.com/rust-lang/crates.io-index" + checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" ++ ++[[package]] ++name = "windows-sys" ++version = "0.42.0" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" ++dependencies = [ ++ "windows_aarch64_gnullvm", ++ "windows_aarch64_msvc", ++ "windows_i686_gnu", ++ "windows_i686_msvc", ++ "windows_x86_64_gnu", ++ "windows_x86_64_gnullvm", ++ "windows_x86_64_msvc", ++] ++ ++[[package]] ++name = "windows_aarch64_gnullvm" ++version = "0.42.0" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e" ++ ++[[package]] ++name = "windows_aarch64_msvc" ++version = "0.42.0" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4" ++ ++[[package]] ++name = "windows_i686_gnu" ++version = "0.42.0" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7" ++ ++[[package]] ++name = "windows_i686_msvc" ++version = "0.42.0" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246" ++ ++[[package]] ++name = "windows_x86_64_gnu" ++version = "0.42.0" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed" ++ ++[[package]] ++name = "windows_x86_64_gnullvm" ++version = "0.42.0" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028" ++ ++[[package]] ++name = "windows_x86_64_msvc" ++version = "0.42.0" ++source = "registry+https://github.com/rust-lang/crates.io-index" ++checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5" +diff --git a/virtio-driver/Cargo.toml b/virtio-driver/Cargo.toml +index d66aba1..2e754eb 100644 +--- a/virtio-driver/Cargo.toml ++++ b/virtio-driver/Cargo.toml +@@ -19,7 +19,7 @@ _unsafe-op-in-unsafe-fn = [] + bitflags = "1.3" + libc = "0.2.87" + nix = "0.24.1" +-memfd = { version = "0.4.1", optional = true } ++memfd = { version = "0.6.1", optional = true } + memmap = { version = "0.7.0", optional = true } + pci-driver = { version = "0.1.2", default-features = false, optional = true } + virtio-bindings = { version = "0.1", features = ["virtio-v5_0_0"], optional = true } +-- +2.37.0.rc2 + diff --git a/libblkio/libblkio.spec b/libblkio/libblkio.spec index a875bd9..a7c8c47 100644 --- a/libblkio/libblkio.spec +++ b/libblkio/libblkio.spec @@ -5,22 +5,13 @@ Version: 1.1.0 Summary: Block device I/O library Name: libblkio -Release: 4%{?dist} +Release: 5%{?dist} URL: %{forgeurl} Source0: %{forgesource} License: ASL 2.0 or MIT Patch: 0001-Use-io-uring-0.5.8.patch - -# Bundled missing dependencies. -# -# These were created by running "cargo vendor" in the source tree -# and then making a tarball of just the following directories: -# vendor/memfd -Source1: vendor.tar.gz - -# Bundled dependencies -Provides: bundled(crate(memfd/default)) = 0.4.1 +Patch: 0002-virtio-driver-upgrade-to-memfd-0.6.1.patch # Basic build requirements. BuildRequires: gcc, gcc-c++ @@ -40,7 +31,7 @@ BuildRequires: crate(const-cstr/default) BuildRequires: crate(io-uring/default) BuildRequires: crate(lazy_static/default) BuildRequires: crate(libc/default) -# BuildRequires: crate(memfd...) +BuildRequires: crate(memfd/default) BuildRequires: crate(memmap/default) BuildRequires: crate(memoffset/default) BuildRequires: crate(nix/default) @@ -70,12 +61,7 @@ This package contains development tools for %{name}. %prep %forgeautosetup -p1 -tar zxf %{SOURCE1} -cat >> Cargo.toml < - 1.1.0-4 +* Mon Oct 31 2022 Richard W.M. Jones - 1.1.0-5 - Initial package diff --git a/libblkio/vendor.tar.gz b/libblkio/vendor.tar.gz deleted file mode 100644 index 631ec76593c32027c34853c1a069a25f1e3928df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7735 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 -- 1.8.3.1