From: Jo-Philipp Wich Date: Thu, 14 Jan 2010 19:19:22 +0000 (+0000) Subject: [packages] quagga-unstable: fix mini_fo assertion triggered by cross-fs link() (... X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fsvn-archive%2Farchive.git;a=commitdiff_plain;hb=148bde3572677636ec7b3ba6e6f91fb6c79a511d [packages] quagga-unstable: fix mini_fo assertion triggered by cross-fs link() (#5960) SVN-Revision: 19137 --- diff --git a/net/quagga-unstable/Makefile b/net/quagga-unstable/Makefile index a8c597dba3..2088495826 100644 --- a/net/quagga-unstable/Makefile +++ b/net/quagga-unstable/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2009 OpenWrt.org +# Copyright (C) 2009-2010 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=quagga-unstable PKG_VERSION:=0.99.15 -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE:=quagga-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=http://www.quagga.net/download/ \ diff --git a/net/quagga-unstable/patches/150-no-cross-fs-link.patch b/net/quagga-unstable/patches/150-no-cross-fs-link.patch new file mode 100644 index 0000000000..ec66786324 --- /dev/null +++ b/net/quagga-unstable/patches/150-no-cross-fs-link.patch @@ -0,0 +1,40 @@ +--- a/lib/command.c ++++ b/lib/command.c +@@ -2601,6 +2601,13 @@ + VTY_NEWLINE); + goto finished; + } ++ ++#if 0 ++ /* This code fails on UNION MOUNTs and similar filesystems if the ++ * config file is still on the RO layer. Hardlinks across layers ++ * will not work and cause quagga to fail saving the configuration... ++ * should use rename() to move files around... ++ */ + if (link (config_file, config_file_sav) != 0) + { + vty_out (vty, "Can't backup old configuration file %s.%s", config_file_sav, +@@ -2614,7 +2621,23 @@ + VTY_NEWLINE); + goto finished; + } ++#else ++ /* And this is the code that hopefully does work */ ++ if (rename (config_file, config_file_sav) != 0) ++ { ++ vty_out (vty, "Can't backup old configuration file %s.%s", config_file_sav, ++ VTY_NEWLINE); ++ goto finished; ++ } ++ sync (); ++#endif ++ ++#if 0 ++ /* same here. Please no cross-filesystem hardlinks... */ + if (link (config_file_tmp, config_file) != 0) ++#else ++ if (rename (config_file_tmp, config_file) != 0) ++#endif + { + vty_out (vty, "Can't save configuration file %s.%s", config_file, + VTY_NEWLINE);