From: jow Date: Thu, 14 Jan 2010 19:19:10 +0000 (+0000) Subject: [packages] quagga: fix mini_fo assertion triggered by cross-fs link() (#5960) X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=62ed30adf43b8f0224ffd067e010a9b8df7166ac;p=feed%2Frouting.git [packages] quagga: fix mini_fo assertion triggered by cross-fs link() (#5960) git-svn-id: svn+ssh://svn.openwrt.org/openwrt@19136 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- diff --git a/Makefile b/Makefile index 3bab669..97ce8cd 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2006-2009 OpenWrt.org +# Copyright (C) 2006-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 PKG_VERSION:=0.98.6 -PKG_RELEASE:=3 +PKG_RELEASE:=4 PKG_MD5SUM:=b0d4132039953a0214256873b7d23d68 PKG_SOURCE_URL:=http://www.quagga.net/download/ \ diff --git a/patches/150-no-cross-fs-link.patch b/patches/150-no-cross-fs-link.patch new file mode 100644 index 0000000..53ba929 --- /dev/null +++ b/patches/150-no-cross-fs-link.patch @@ -0,0 +1,40 @@ +--- a/lib/command.c ++++ b/lib/command.c +@@ -2567,6 +2567,13 @@ + unlink (config_file_tmp); + return CMD_WARNING; + } ++ ++#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, +@@ -2586,7 +2593,23 @@ + unlink (config_file_tmp); + return CMD_WARNING; + } ++#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);