diff --git a/nfs-blocksize-free.patch b/nfs-blocksize-free.patch new file mode 100644 index 0000000..40add01 --- /dev/null +++ b/nfs-blocksize-free.patch @@ -0,0 +1,54 @@ +From 07f6674286467f82adf0d370b8d12d72aee6817c Mon Sep 17 00:00:00 2001 +From: Fabian Vogt +Date: Mon, 28 Sep 2015 18:21:19 +0200 +Subject: [PATCH] Blocksize of NFS shouldn't be used directly + +RPM uses the blocksize to calculate whether an RPM +can be installed on the system. For NFS this fails +for e.g. glibc-locale as it has many small files, +which rpm counts as one block. As huge NFS block +sizes (>= 1MiB) are common, this makes glibc-locale +roughly 7 GiB in installed size. + +As a workaround, if the NFS block size is > 4096, +assume 4096 and scale the count of free blocks +accordingly. + +See also RH bug 847960 + +Signed-off-by: Fabian Vogt +--- + lib/transaction.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/lib/transaction.c b/lib/transaction.c +index 8167640..d8d8820 100644 +--- a/lib/transaction.c ++++ b/lib/transaction.c +@@ -6,6 +6,8 @@ + + #include + ++#include /* NFS_SUPER_MAGIC */ ++ + #include /* rpmMachineScore, rpmReadPackageFile */ + #include /* XXX for rpmExpand */ + #include +@@ -137,6 +139,14 @@ static rpmDiskSpaceInfo rpmtsCreateDSI(const rpmts ts, dev_t dev, + /* XXX assigning negative value to unsigned type */ + dsi->iavail = !(sfb.f_ffree == 0 && sfb.f_files == 0) + ? sfb.f_ffree : -1; ++ ++ /* We can't tell the block size of a network file system. ++ * sfb.f_bsize would be the network layer's block size. */ ++ if(sfb.f_type == NFS_SUPER_MAGIC && dsi->bsize > 4096) { ++ int64_t old_bsize = dsi->bsize; ++ dsi->bsize = 4096; /* Assume 4k block size */ ++ dsi->bavail *= old_bsize / dsi->bsize; ++ } + + /* Find mount point belonging to this device number */ + resolved_path = realpath(dirName, mntPoint); +-- +2.5.2 + diff --git a/rpm-suse_macros b/rpm-suse_macros index 7c59b23..3ef4c98 100644 --- a/rpm-suse_macros +++ b/rpm-suse_macros @@ -237,6 +237,7 @@ %run_ldconfig /sbin/ldconfig +# for %post %install_info(:-:) \ ALL_ARGS=(%{**}) \ NUM_ARGS=${#ALL_ARGS[@]} \ @@ -246,12 +247,12 @@ fi \ fi ; +# for %preun %install_info_delete(:-:) \ - ALL_ARGS=(%{**}) \ - NUM_ARGS=${#ALL_ARGS[@]} \ + test -n "$FIRST_ARG" || FIRST_ARG=$1 \ if test -x /sbin/install-info ; then \ - if ! test -e "${ALL_ARGS[$((NUM_ARGS-1))]}" ; then \ - /sbin/install-info --quiet --delete "${ALL_ARGS[@]}" \ + if [ "$FIRST_ARG" = 0 ]; then \ + /sbin/install-info --quiet --delete %{**} \ fi ; \ fi ; diff --git a/rpm.changes b/rpm.changes index 5cfd614..426a289 100644 --- a/rpm.changes +++ b/rpm.changes @@ -1,3 +1,15 @@ +------------------------------------------------------------------- +Sat Oct 17 10:34:53 UTC 2015 - schwab@linux-m68k.org + +- %install_info_delete: only delete if package is removed + +------------------------------------------------------------------- +Thu Oct 1 14:35:04 UTC 2015 - fvogt@suse.com + +- Add nfs-blocksize-free.patch: + * Blocksize of NFS shouldn't be used directly +- Fixes bsc#894610 and bsc#829717 + ------------------------------------------------------------------- Mon Sep 21 07:43:58 UTC 2015 - schwab@suse.de diff --git a/rpm.spec b/rpm.spec index a0115e6..034073f 100644 --- a/rpm.spec +++ b/rpm.spec @@ -132,6 +132,7 @@ Patch94: checksepwarn.diff Patch95: fixsizeforbigendian.diff Patch96: modalias-no-kgraft.diff Patch97: rpm-4.12.0.1-lua-5.3.patch +Patch98: nfs-blocksize-free.patch Patch6464: auto-config-update-aarch64-ppc64le.diff BuildRoot: %{_tmppath}/%{name}-%{version}-build # @@ -226,6 +227,7 @@ rm -f rpmdb/db.h %patch -P 85 %patch -P 92 -P 93 -P 94 -P 95 -P 96 %patch97 -p1 +%patch98 -p1 %ifarch aarch64 ppc64le %patch6464