Hello community,
here is the log from the commit of package drbd
checked in at Sun May 7 15:54:28 CEST 2006.
--------
--- drbd/drbd.changes 2006-04-02 20:01:37.000000000 +0200
+++ STABLE/drbd/drbd.changes 2006-05-04 17:11:43.000000000 +0200
@@ -1,0 +2,18 @@
+Thu May 4 17:10:38 CEST 2006 - lmb@suse.de
+
+- Import fixes from 0.7.18:
+- Under high memory pressure it was possible to hit a deadlock on a
+ kmalloc(). Changed the GFP mask, it is no longer possible to deadlock
+ it with memory pressure.
+- With very unlucky network timing during connect DRBD falls into a
+ connect / drop-connection loop, that as soon as DRBD is in this loop
+ is very stable. This is fixed now, DRBD detects this situation an
+ breaks out of it.
+- Fix to the init-script. Now it waits until udev has created the device
+ nodes of _all_ resources.
+- A small fix for the 32bit userland 64bit kernel people, running older
+ kernels.
+- Improved handling of IO errors during initial read in of the activity
+ log.
+
+-------------------------------------------------------------------
Old:
----
drbd-0.7.17.tar.gz
drbd-post-0.7.17.patch
New:
----
drbd-0.7.18.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ drbd.spec ++++++
--- /var/tmp/diff_new_pack.uZQQrh/_old 2006-05-07 15:53:30.000000000 +0200
+++ /var/tmp/diff_new_pack.uZQQrh/_new 2006-05-07 15:53:30.000000000 +0200
@@ -1,5 +1,5 @@
#
-# spec file for package drbd (Version 0.7.17)
+# spec file for package drbd (Version 0.7.18)
#
# Copyright (c) 2006 SUSE LINUX Products GmbH, Nuernberg, Germany.
# This file and all modifications and additions to the pristine
@@ -12,14 +12,13 @@
Name: drbd
BuildRequires: glib-devel kernel-source kernel-syms
Summary: Distributed Replicated Block Device
-Version: 0.7.17
-Release: 7
+Version: 0.7.18
+Release: 2
Source: %{name}-%{version}.tar.gz
# Source: drbd-SVN.tar.bz2
Source1: drbd-Makefile.module
Source2: drbd-modprobe.d
Patch0: drbd-optflags.patch
-Patch1: drbd-post-0.7.17.patch
Patch2: convert-MODULE_PARM.diff
License: GPL
Group: Productivity/Clustering/HA
@@ -60,7 +59,6 @@
%prep
%setup -n drbd-%{version}
%patch0 -p1
-%patch1 -p2
%patch2 -p1
mkdir source
cp -a drbd/. source/. || :
@@ -141,6 +139,21 @@
%doc scripts/drbd.conf
%changelog -n drbd
+* Thu May 04 2006 - lmb@suse.de
+- Import fixes from 0.7.18:
+- Under high memory pressure it was possible to hit a deadlock on a
+ kmalloc(). Changed the GFP mask, it is no longer possible to deadlock
+ it with memory pressure.
+- With very unlucky network timing during connect DRBD falls into a
+ connect / drop-connection loop, that as soon as DRBD is in this loop
+ is very stable. This is fixed now, DRBD detects this situation an
+ breaks out of it.
+- Fix to the init-script. Now it waits until udev has created the device
+ nodes of _all_ resources.
+- A small fix for the 32bit userland 64bit kernel people, running older
+ kernels.
+- Improved handling of IO errors during initial read in of the activity
+ log.
* Sun Apr 02 2006 - agruen@suse.de
- convert-MODULE_PARM.diff: Convert from the obsolete MODULE_PARM
to the new module_param.
++++++ drbd-0.7.17.tar.gz -> drbd-0.7.18.tar.gz ++++++
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/.filelist new/drbd-0.7.18/.filelist
--- old/drbd-0.7.17/.filelist 2006-03-06 17:07:21.000000000 +0100
+++ new/drbd-0.7.18/.filelist 2006-05-04 17:08:27.000000000 +0200
@@ -1,122 +1,122 @@
-drbd-0.7.17/upgrade_0.6.x_to_0.7.0.txt
-drbd-0.7.17/ChangeLog
-drbd-0.7.17/scripts/drbd.conf
-drbd-0.7.17/scripts/drbd.gentoo
-drbd-0.7.17/scripts/drbddisk
-drbd-0.7.17/scripts/adjust_drbd_config_h.sh
-drbd-0.7.17/scripts/drbd
-drbd-0.7.17/scripts/Makefile
-drbd-0.7.17/scripts/patch-kernel
-drbd-0.7.17/scripts/README
-drbd-0.7.17/benchmark/dm.c
-drbd-0.7.17/benchmark/report_to_html.pl
-drbd-0.7.17/benchmark/Makefile
-drbd-0.7.17/benchmark/run.sh
-drbd-0.7.17/benchmark/README
-drbd-0.7.17/README
-drbd-0.7.17/INSTALL
-drbd-0.7.17/COPYING
-drbd-0.7.17/drbd.spec.in
-drbd-0.7.17/documentation/drbd.conf.sgml
-drbd-0.7.17/documentation/drbddisk.sgml
-drbd-0.7.17/documentation/drbd.sgml
-drbd-0.7.17/documentation/drbdsetup.sgml
-drbd-0.7.17/documentation/Makefile
-drbd-0.7.17/documentation/Makefile.lang
-drbd-0.7.17/documentation/drbdadm.sgml
-drbd-0.7.17/drbd/drbd_proc.c
-drbd-0.7.17/drbd/drbd_receiver.c
-drbd-0.7.17/drbd/Makefile-2.6
-drbd-0.7.17/drbd/Kconfig
-drbd-0.7.17/drbd/drbd_fs.c
-drbd-0.7.17/drbd/drbd_actlog.c
-drbd-0.7.17/drbd/drbd_worker.c
-drbd-0.7.17/drbd/drbd_compat_wrappers.h
-drbd-0.7.17/drbd/drbd_compat_types.h
-drbd-0.7.17/drbd/drbd_bitmap.c
-drbd-0.7.17/drbd/mempool-2.4.c
-drbd-0.7.17/drbd/mempool.h
-drbd-0.7.17/drbd/linux/drbd.h
-drbd-0.7.17/drbd/linux/drbd_config.h
-drbd-0.7.17/drbd/drbd_sizeof_sanity_check.c
-drbd-0.7.17/drbd/drbd_main.c
-drbd-0.7.17/drbd/drbd_req.c
-drbd-0.7.17/drbd/lru_cache.c
-drbd-0.7.17/drbd/hlist.h
-drbd-0.7.17/drbd/drbd_int.h
-drbd-0.7.17/drbd/lru_cache.h
-drbd-0.7.17/drbd/Makefile
-drbd-0.7.17/drbd/Makefile-2.4
-drbd-0.7.17/upgrade_0.7.0_to_0.7.1.txt
-drbd-0.7.17/testing/uml-2.6.gdbinit
-drbd-0.7.17/testing/ioctl_structs_sizes.c
-drbd-0.7.17/testing/compare.pl
-drbd-0.7.17/testing/test_al.pl
-drbd-0.7.17/testing/uml_profile-USER@HOST
-drbd-0.7.17/testing/access_and_verify.c
-drbd-0.7.17/testing/show_size.c
-drbd-0.7.17/testing/uml-2.4.gdbinit
-drbd-0.7.17/testing/Makefile
-drbd-0.7.17/testing/README
-drbd-0.7.17/testing/write_gc.pl
-drbd-0.7.17/testing/CTH/T-006.sh
-drbd-0.7.17/testing/CTH/LGE_CTH.pm
-drbd-0.7.17/testing/CTH/T-007.sh
-drbd-0.7.17/testing/CTH/functions.sh
-drbd-0.7.17/testing/CTH/uml-minna.conf
-drbd-0.7.17/testing/CTH/CTH_bash.sh
-drbd-0.7.17/testing/CTH/generic_test.pl
-drbd-0.7.17/testing/CTH/tiobench/BUGS
-drbd-0.7.17/testing/CTH/tiobench/tiotest.h
-drbd-0.7.17/testing/CTH/tiobench/tiobench-0.3.3.diff
-drbd-0.7.17/testing/CTH/tiobench/crc32.h
-drbd-0.7.17/testing/CTH/tiobench/TODO
-drbd-0.7.17/testing/CTH/tiobench/tiobench.pl
-drbd-0.7.17/testing/CTH/tiobench/COPYING
-drbd-0.7.17/testing/CTH/tiobench/tiosum.pl
-drbd-0.7.17/testing/CTH/tiobench/tiotest.c
-drbd-0.7.17/testing/CTH/tiobench/crc32.c
-drbd-0.7.17/testing/CTH/tiobench/README
-drbd-0.7.17/testing/CTH/tiobench/Makefile
-drbd-0.7.17/testing/CTH/chipdale.conf
-drbd-0.7.17/testing/CTH/README
-drbd-0.7.17/testing/CTH/CTH_bash.conf
-drbd-0.7.17/testing/CTH/LGE_CTH/FileSystem.pm
-drbd-0.7.17/testing/CTH/LGE_CTH/Node.pm
-drbd-0.7.17/testing/CTH/LGE_CTH/Resource.pm
-drbd-0.7.17/testing/CTH/LGE_CTH/Disk.pm
-drbd-0.7.17/testing/CTH/LGE_CTH/GenericTest.pm
-drbd-0.7.17/testing/CTH/LGE_CTH/Link.pm
-drbd-0.7.17/testing/CTH/LGE_CTH/CRM.pm
-drbd-0.7.17/testing/CTH/LGE_CTH/Component.pm
-drbd-0.7.17/testing/CTH/LGE_CTH/DRBD_Resource.pm
-drbd-0.7.17/testing/CTH/bloodymary.conf
-drbd-0.7.17/testing/CTH/wbtest/wbtest.c
-drbd-0.7.17/testing/CTH/wbtest/README
-drbd-0.7.17/testing/CTH/T-000.sh
-drbd-0.7.17/testing/CTH/T-001.sh
-drbd-0.7.17/testing/CTH/T-002.sh
-drbd-0.7.17/testing/CTH/CTH_bash.helpers
-drbd-0.7.17/testing/CTH/T-003.sh
-drbd-0.7.17/testing/CTH/T-004.sh
-drbd-0.7.17/testing/CTH/bloodymary.sh.conf
-drbd-0.7.17/testing/CTH/T-005.sh
-drbd-0.7.17/testing/read_gc.pl
-drbd-0.7.17/testing/uml-screen-debug
-drbd-0.7.17/Makefile
-drbd-0.7.17/user/drbdadm_parser.y
-drbd-0.7.17/user/drbdadm_main.c
-drbd-0.7.17/user/drbd_limits.h
-drbd-0.7.17/user/drbdadm.h
-drbd-0.7.17/user/drbdadm_scanner.fl
-drbd-0.7.17/user/drbdadm_adjust.c
-drbd-0.7.17/user/drbdsetup.c
-drbd-0.7.17/user/Makefile
-drbd-0.7.17/documentation/drbd.8
-drbd-0.7.17/documentation/drbd.conf.5
-drbd-0.7.17/documentation/drbdsetup.8
-drbd-0.7.17/documentation/drbdadm.8
-drbd-0.7.17/documentation/drbddisk.8
-drbd-0.7.17/drbd_config.h
-drbd-0.7.17/drbd/drbd_buildtag.c
-drbd-0.7.17/.filelist
+drbd-0.7.18/upgrade_0.6.x_to_0.7.0.txt
+drbd-0.7.18/ChangeLog
+drbd-0.7.18/scripts/drbd.conf
+drbd-0.7.18/scripts/drbd.gentoo
+drbd-0.7.18/scripts/drbddisk
+drbd-0.7.18/scripts/adjust_drbd_config_h.sh
+drbd-0.7.18/scripts/drbd
+drbd-0.7.18/scripts/Makefile
+drbd-0.7.18/scripts/patch-kernel
+drbd-0.7.18/scripts/README
+drbd-0.7.18/benchmark/dm.c
+drbd-0.7.18/benchmark/report_to_html.pl
+drbd-0.7.18/benchmark/Makefile
+drbd-0.7.18/benchmark/run.sh
+drbd-0.7.18/benchmark/README
+drbd-0.7.18/README
+drbd-0.7.18/INSTALL
+drbd-0.7.18/COPYING
+drbd-0.7.18/drbd.spec.in
+drbd-0.7.18/documentation/drbd.conf.sgml
+drbd-0.7.18/documentation/drbddisk.sgml
+drbd-0.7.18/documentation/drbd.sgml
+drbd-0.7.18/documentation/drbdsetup.sgml
+drbd-0.7.18/documentation/Makefile
+drbd-0.7.18/documentation/Makefile.lang
+drbd-0.7.18/documentation/drbdadm.sgml
+drbd-0.7.18/drbd/drbd_proc.c
+drbd-0.7.18/drbd/drbd_receiver.c
+drbd-0.7.18/drbd/Makefile-2.6
+drbd-0.7.18/drbd/Kconfig
+drbd-0.7.18/drbd/drbd_fs.c
+drbd-0.7.18/drbd/drbd_actlog.c
+drbd-0.7.18/drbd/drbd_worker.c
+drbd-0.7.18/drbd/drbd_compat_wrappers.h
+drbd-0.7.18/drbd/drbd_compat_types.h
+drbd-0.7.18/drbd/drbd_bitmap.c
+drbd-0.7.18/drbd/mempool-2.4.c
+drbd-0.7.18/drbd/mempool.h
+drbd-0.7.18/drbd/linux/drbd.h
+drbd-0.7.18/drbd/linux/drbd_config.h
+drbd-0.7.18/drbd/drbd_sizeof_sanity_check.c
+drbd-0.7.18/drbd/drbd_main.c
+drbd-0.7.18/drbd/drbd_req.c
+drbd-0.7.18/drbd/lru_cache.c
+drbd-0.7.18/drbd/hlist.h
+drbd-0.7.18/drbd/drbd_int.h
+drbd-0.7.18/drbd/lru_cache.h
+drbd-0.7.18/drbd/Makefile
+drbd-0.7.18/drbd/Makefile-2.4
+drbd-0.7.18/upgrade_0.7.0_to_0.7.1.txt
+drbd-0.7.18/testing/uml-2.6.gdbinit
+drbd-0.7.18/testing/ioctl_structs_sizes.c
+drbd-0.7.18/testing/compare.pl
+drbd-0.7.18/testing/test_al.pl
+drbd-0.7.18/testing/uml_profile-USER@HOST
+drbd-0.7.18/testing/access_and_verify.c
+drbd-0.7.18/testing/show_size.c
+drbd-0.7.18/testing/uml-2.4.gdbinit
+drbd-0.7.18/testing/Makefile
+drbd-0.7.18/testing/README
+drbd-0.7.18/testing/write_gc.pl
+drbd-0.7.18/testing/CTH/T-006.sh
+drbd-0.7.18/testing/CTH/LGE_CTH.pm
+drbd-0.7.18/testing/CTH/T-007.sh
+drbd-0.7.18/testing/CTH/functions.sh
+drbd-0.7.18/testing/CTH/uml-minna.conf
+drbd-0.7.18/testing/CTH/CTH_bash.sh
+drbd-0.7.18/testing/CTH/generic_test.pl
+drbd-0.7.18/testing/CTH/tiobench/BUGS
+drbd-0.7.18/testing/CTH/tiobench/tiotest.h
+drbd-0.7.18/testing/CTH/tiobench/tiobench-0.3.3.diff
+drbd-0.7.18/testing/CTH/tiobench/crc32.h
+drbd-0.7.18/testing/CTH/tiobench/TODO
+drbd-0.7.18/testing/CTH/tiobench/tiobench.pl
+drbd-0.7.18/testing/CTH/tiobench/COPYING
+drbd-0.7.18/testing/CTH/tiobench/tiosum.pl
+drbd-0.7.18/testing/CTH/tiobench/tiotest.c
+drbd-0.7.18/testing/CTH/tiobench/crc32.c
+drbd-0.7.18/testing/CTH/tiobench/README
+drbd-0.7.18/testing/CTH/tiobench/Makefile
+drbd-0.7.18/testing/CTH/chipdale.conf
+drbd-0.7.18/testing/CTH/README
+drbd-0.7.18/testing/CTH/CTH_bash.conf
+drbd-0.7.18/testing/CTH/LGE_CTH/FileSystem.pm
+drbd-0.7.18/testing/CTH/LGE_CTH/Node.pm
+drbd-0.7.18/testing/CTH/LGE_CTH/Resource.pm
+drbd-0.7.18/testing/CTH/LGE_CTH/Disk.pm
+drbd-0.7.18/testing/CTH/LGE_CTH/GenericTest.pm
+drbd-0.7.18/testing/CTH/LGE_CTH/Link.pm
+drbd-0.7.18/testing/CTH/LGE_CTH/CRM.pm
+drbd-0.7.18/testing/CTH/LGE_CTH/Component.pm
+drbd-0.7.18/testing/CTH/LGE_CTH/DRBD_Resource.pm
+drbd-0.7.18/testing/CTH/bloodymary.conf
+drbd-0.7.18/testing/CTH/wbtest/wbtest.c
+drbd-0.7.18/testing/CTH/wbtest/README
+drbd-0.7.18/testing/CTH/T-000.sh
+drbd-0.7.18/testing/CTH/T-001.sh
+drbd-0.7.18/testing/CTH/T-002.sh
+drbd-0.7.18/testing/CTH/CTH_bash.helpers
+drbd-0.7.18/testing/CTH/T-003.sh
+drbd-0.7.18/testing/CTH/T-004.sh
+drbd-0.7.18/testing/CTH/bloodymary.sh.conf
+drbd-0.7.18/testing/CTH/T-005.sh
+drbd-0.7.18/testing/read_gc.pl
+drbd-0.7.18/testing/uml-screen-debug
+drbd-0.7.18/Makefile
+drbd-0.7.18/user/drbdadm_parser.y
+drbd-0.7.18/user/drbdadm_main.c
+drbd-0.7.18/user/drbd_limits.h
+drbd-0.7.18/user/drbdadm.h
+drbd-0.7.18/user/drbdadm_scanner.fl
+drbd-0.7.18/user/drbdadm_adjust.c
+drbd-0.7.18/user/drbdsetup.c
+drbd-0.7.18/user/Makefile
+drbd-0.7.18/documentation/drbd.8
+drbd-0.7.18/documentation/drbd.conf.5
+drbd-0.7.18/documentation/drbdsetup.8
+drbd-0.7.18/documentation/drbdadm.8
+drbd-0.7.18/documentation/drbddisk.8
+drbd-0.7.18/drbd_config.h
+drbd-0.7.18/drbd/drbd_buildtag.c
+drbd-0.7.18/.filelist
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/ChangeLog new/drbd-0.7.18/ChangeLog
--- old/drbd-0.7.17/ChangeLog 2006-03-06 17:07:09.000000000 +0100
+++ new/drbd-0.7.18/ChangeLog 2006-05-04 17:07:57.000000000 +0200
@@ -4,6 +4,22 @@
Cumulative changes since last tarball.
For even more detail, use "svn log" and "svn diff".
+0.7.18 (api:78/proto:74)
+-----
+ * Under high memory pressure it was possible to hit a deadlock
+ on a kmalloc(). Changed the GFP mask, it is no longer possible to
+ deadlock it with memory pressure.
+ * With very unlucky network timing during connect DRBD falls into
+ a connect / drop-connection loop, that as soon as DRBD is in this
+ loop is very stable. This is fixed now, DRBD detects this situation
+ an breaks out of it.
+ * Fix to the init-script. Now it waits until udev has created
+ the device nodes of _all_ resources.
+ * A small fix for the 32bit userland 64bit kernel people, running
+ older kernels.
+ * Improved handling of IO errors during initial read in of the
+ activity log.
+
0.7.17 (api:77/proto:74)
-----
* There was a bug that could cause the activity log to be not applied
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/Makefile new/drbd-0.7.18/Makefile
--- old/drbd-0.7.17/Makefile 2005-08-31 10:23:41.000000000 +0200
+++ new/drbd-0.7.18/Makefile 2006-03-27 17:40:08.000000000 +0200
@@ -188,7 +188,7 @@
-e "s/^\(Packager:\).*/\1 $(USER)@$(HOSTNAME)/;" < drbd.spec.in \
> dist/SPECS/drbd.spec ; \
fi
- $(RPMBUILD) -ba \
+ $(RPMBUILD) -bb \
--define "_topdir $(PWD)/dist" \
--define "buildroot $(PWD)/dist/install" \
--define "kernelversion $(KVER)" \
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/documentation/drbd.8 new/drbd-0.7.18/documentation/drbd.8
--- old/drbd-0.7.17/documentation/drbd.8 2006-03-06 17:07:19.000000000 +0100
+++ new/drbd-0.7.18/documentation/drbd.8 2006-05-04 17:08:25.000000000 +0200
@@ -3,7 +3,7 @@
.\" http://shell.ipoline.com/~elmert/comp/docbook2X/
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng .
-.TH "DRBD" "8" "06 March 2006" "" ""
+.TH "DRBD" "8" "04 May 2006" "" ""
.SH NAME
/etc/init.d/drbd \- The start and stop script for DRBD
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/documentation/drbd.conf.5 new/drbd-0.7.18/documentation/drbd.conf.5
--- old/drbd-0.7.17/documentation/drbd.conf.5 2006-03-06 17:07:18.000000000 +0100
+++ new/drbd-0.7.18/documentation/drbd.conf.5 2006-05-04 17:08:24.000000000 +0200
@@ -3,7 +3,7 @@
.\" http://shell.ipoline.com/~elmert/comp/docbook2X/
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng .
-.TH "DRBD.CONF" "5" "06 March 2006" "" ""
+.TH "DRBD.CONF" "5" "04 May 2006" "" ""
.SH NAME
drbd.conf \- Configuration file for DRBD's devices
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/documentation/drbdadm.8 new/drbd-0.7.18/documentation/drbdadm.8
--- old/drbd-0.7.17/documentation/drbdadm.8 2006-03-06 17:07:20.000000000 +0100
+++ new/drbd-0.7.18/documentation/drbdadm.8 2006-05-04 17:08:26.000000000 +0200
@@ -3,7 +3,7 @@
.\" http://shell.ipoline.com/~elmert/comp/docbook2X/
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng .
-.TH "DRBDADM" "8" "06 March 2006" "" ""
+.TH "DRBDADM" "8" "04 May 2006" "" ""
.SH NAME
drbdadm \- Administration tool for DRBD
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/documentation/drbddisk.8 new/drbd-0.7.18/documentation/drbddisk.8
--- old/drbd-0.7.17/documentation/drbddisk.8 2006-03-06 17:07:21.000000000 +0100
+++ new/drbd-0.7.18/documentation/drbddisk.8 2006-05-04 17:08:26.000000000 +0200
@@ -3,7 +3,7 @@
.\" http://shell.ipoline.com/~elmert/comp/docbook2X/
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng .
-.TH "DRBDDISK" "8" "06 March 2006" "" ""
+.TH "DRBDDISK" "8" "04 May 2006" "" ""
.SH NAME
/etc/ha.d/resource.d/drbddisk \- Script to mark devices as primary and mount filesystems
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/documentation/drbdsetup.8 new/drbd-0.7.18/documentation/drbdsetup.8
--- old/drbd-0.7.17/documentation/drbdsetup.8 2006-03-06 17:07:18.000000000 +0100
+++ new/drbd-0.7.18/documentation/drbdsetup.8 2006-05-04 17:08:23.000000000 +0200
@@ -3,7 +3,7 @@
.\" http://shell.ipoline.com/~elmert/comp/docbook2X/
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng .
-.TH "DRBDSETUP" "8" "06 March 2006" "" ""
+.TH "DRBDSETUP" "8" "04 May 2006" "" ""
.SH NAME
drbdsetup \- Setup tool for DRBD
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/drbd/drbd_actlog.c new/drbd-0.7.18/drbd/drbd_actlog.c
--- old/drbd-0.7.17/drbd/drbd_actlog.c 2006-03-06 17:07:09.000000000 +0100
+++ new/drbd-0.7.18/drbd/drbd_actlog.c 2006-05-04 17:07:57.000000000 +0200
@@ -64,7 +64,7 @@
STATIC int _drbd_md_sync_page_io(drbd_dev *mdev, struct page *page,
sector_t sector, int rw, int size)
{
- struct bio *bio = bio_alloc(GFP_KERNEL, 1);
+ struct bio *bio = bio_alloc(GFP_NOIO, 1);
struct completion event;
int ok;
@@ -112,7 +112,7 @@
// in case hardsect != 512 [ s390 only? ]
if( hardsect != MD_HARDSECT ) {
if(!mdev->md_io_tmpp) {
- struct page *page = alloc_page(GFP_KERNEL);
+ struct page *page = alloc_page(GFP_NOIO);
if(!page) return 0;
WARN("Meta data's bdev hardsect_size != %d\n",
@@ -368,6 +368,12 @@
return 1;
}
+/**
+ * drbd_al_read_tr: Reads a single transaction record form the
+ * on disk activity log.
+ * Returns -1 on IO error, 0 on checksum error and 1 if it is a valid
+ * record.
+ */
STATIC int drbd_al_read_tr(struct Drbd_Conf *mdev,
struct al_transaction* b,
int index)
@@ -381,7 +387,7 @@
if(!drbd_md_sync_page_io(mdev,sector,READ)) {
drbd_chk_io_error(mdev, 1);
drbd_io_error(mdev);
- return 0;
+ return -1;
}
rv = ( be32_to_cpu(b->magic) == DRBD_MAGIC );
@@ -394,7 +400,12 @@
return rv;
}
-void drbd_al_read_log(struct Drbd_Conf *mdev)
+/**
+ * drbd_al_read_log: Restores the activity log from its on disk
+ * representation. Returns 1 on success, returns 0 when
+ * reading the log failed due to IO errors.
+ */
+int drbd_al_read_log(struct Drbd_Conf *mdev)
{
struct al_transaction* buffer;
int from=-1,to=-1,i,cnr, overflow=0,rv;
@@ -413,7 +424,12 @@
// Find the valid transaction in the log
for(i=0;i<=mx;i++) {
- if(!drbd_al_read_tr(mdev,buffer,i)) continue;
+ rv = drbd_al_read_tr(mdev,buffer,i);
+ if(rv == 0) continue;
+ if(rv == -1) {
+ up(&mdev->md_io_mutex);
+ return 0;
+ }
cnr = be32_to_cpu(buffer->tr_number);
// INFO("index %d valid tnr=%d\n",i,cnr);
@@ -433,7 +449,7 @@
WARN("No usable activity log found.\n");
up(&mdev->md_io_mutex);
- return;
+ return 1;
}
// Read the valid transactions.
@@ -448,7 +464,11 @@
unsigned int trn;
rv = drbd_al_read_tr(mdev,buffer,i);
- ERR_IF(!rv) goto cancel;
+ ERR_IF(rv == 0) goto cancel;
+ if(rv == -1) {
+ up(&mdev->md_io_mutex);
+ return 0;
+ }
trn=be32_to_cpu(buffer->tr_number);
@@ -489,6 +509,8 @@
INFO("Found %d transactions (%d active extents) in activity log.\n",
transactions,active_extents);
+
+ return 1;
}
/**
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/drbd/drbd_buildtag.c new/drbd-0.7.18/drbd/drbd_buildtag.c
--- old/drbd-0.7.17/drbd/drbd_buildtag.c 2006-03-06 17:07:21.000000000 +0100
+++ new/drbd-0.7.18/drbd/drbd_buildtag.c 2006-05-04 17:08:27.000000000 +0200
@@ -1,6 +1,6 @@
/* automatically generated. DO NOT EDIT. */
const char * drbd_buildtag(void)
{
- return "SVN Revision: 2093"
- " build by lmb@chip, 2006-03-06 17:07:21";
+ return "SVN Revision: 2186"
+ " build by lmb@chip, 2006-05-04 17:08:27";
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/drbd/drbd_fs.c new/drbd-0.7.18/drbd/drbd_fs.c
--- old/drbd-0.7.17/drbd/drbd_fs.c 2006-03-06 17:07:09.000000000 +0100
+++ new/drbd-0.7.18/drbd/drbd_fs.c 2006-05-04 17:07:57.000000000 +0200
@@ -567,11 +567,20 @@
}
if (md_gc_valid > 0) {
- drbd_al_read_log(mdev);
- if (apply_al) {
+ i = drbd_al_read_log(mdev);
+ if (apply_al && i) {
drbd_al_apply_to_bm(mdev);
drbd_al_to_on_disk_bm(mdev);
}
+ if(!i) {
+ ERR("IO error on meta device while reading AL\n");
+ drbd_free_ll_dev(mdev);
+ set_cstate(mdev,Unconfigured);
+ retcode = MDIOError;
+ module_put(THIS_MODULE);
+ if (put_user(retcode, &arg->ret_code)) return -EFAULT;
+ return -EINVAL;
+ }
} /* else {
FIXME wipe out on disk al!
} */
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/drbd/drbd_int.h new/drbd-0.7.18/drbd/drbd_int.h
--- old/drbd-0.7.17/drbd/drbd_int.h 2006-03-06 17:07:09.000000000 +0100
+++ new/drbd-0.7.18/drbd/drbd_int.h 2006-05-04 17:07:57.000000000 +0200
@@ -289,21 +289,6 @@
( typecheck(struct Drbd_Conf*,x) && \
((x) ? (((x)->magic ^ DRBD_MAGIC) == (long)(x)):0))
-
-/*
- * GFP_DRBD is used for allocations inside drbd_make_request,
- * and for the sk->allocation scheme.
- *
- * Try to get away with GFP_NOIO, which is
- * in 2.4.x: (__GFP_HIGH | __GFP_WAIT) // HIGH == EMERGENCY, not HIGHMEM!
- * in 2.6.x: (__GFP_WAIT)
- *
- * As far as i can see we do not allocate from interrupt context...
- * if we do, we certainly should fix that.
- * - lge
- */
-#define GFP_DRBD GFP_NOIO
-
/* these defines should go into blkdev.h
(if it will be ever includet into linus' linux) */
#define RQ_DRBD_NOTHING 0x0001
@@ -1090,7 +1075,7 @@
extern void drbd_rs_complete_io(struct Drbd_Conf *mdev, sector_t sector);
extern int drbd_rs_begin_io(struct Drbd_Conf *mdev, sector_t sector);
extern void drbd_rs_cancel_all(drbd_dev* mdev);
-extern void drbd_al_read_log(struct Drbd_Conf *mdev);
+extern int drbd_al_read_log(struct Drbd_Conf *mdev);
extern void __drbd_set_in_sync(drbd_dev* mdev, sector_t sector, int size, const char* file, const unsigned int line);
#define drbd_set_in_sync(mdev,sector,size) \
__drbd_set_in_sync(mdev,sector,size, __FILE__, __LINE__ )
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/drbd/drbd_main.c new/drbd-0.7.18/drbd/drbd_main.c
--- old/drbd-0.7.17/drbd/drbd_main.c 2005-12-20 14:14:13.000000000 +0100
+++ new/drbd-0.7.18/drbd/drbd_main.c 2006-05-04 17:07:57.000000000 +0200
@@ -245,8 +245,6 @@
barrier_nr_issue++;
- // THINK this is called in the IO path with the send_mutex held
- // and GFP_KERNEL may itself start IO. set it to GFP_NOIO.
b=kmalloc(sizeof(struct drbd_barrier),GFP_NOIO);
if(!b) {
ERR("could not kmalloc() barrier\n");
@@ -322,11 +320,14 @@
sector_t sector;
unsigned int size;
- new_first=kmalloc(sizeof(struct drbd_barrier),GFP_KERNEL);
+ new_first=kmalloc(sizeof(struct drbd_barrier),GFP_NOIO);
if(!new_first) {
ERR("could not kmalloc() barrier\n");
}
+ /* FIXME if indeed we could not kmalloc, this will Oops!
+ * can we somehow just recycle one of the existing barriers?
+ */
INIT_LIST_HEAD(&new_first->requests);
new_first->next=0;
new_first->br_number=4711;
@@ -1541,13 +1542,13 @@
// caches
drbd_request_cache = kmem_cache_create(
"drbd_req_cache", sizeof(drbd_request_t),
- 0, SLAB_NO_REAP, NULL, NULL);
+ 0, 0, NULL, NULL);
if (drbd_request_cache == NULL)
goto Enomem;
drbd_ee_cache = kmem_cache_create(
"drbd_ee_cache", sizeof(struct Tl_epoch_entry),
- 0, SLAB_NO_REAP, NULL, NULL);
+ 0, 0, NULL, NULL);
if (drbd_ee_cache == NULL)
goto Enomem;
@@ -1671,6 +1672,7 @@
unregister_ioctl32_conversion(DRBD_IOCTL_WAIT_CONNECT);
unregister_ioctl32_conversion(DRBD_IOCTL_WAIT_SYNC);
unregister_ioctl32_conversion(DRBD_IOCTL_UNCONFIG_DISK);
+ unregister_ioctl32_conversion(DRBD_IOCTL_SET_STATE_FLAGS);
unlock_kernel();
#endif
#endif
@@ -1909,6 +1911,7 @@
register_ioctl32_conversion(DRBD_IOCTL_WAIT_CONNECT,NULL);
register_ioctl32_conversion(DRBD_IOCTL_WAIT_SYNC,NULL);
register_ioctl32_conversion(DRBD_IOCTL_UNCONFIG_DISK,NULL);
+ register_ioctl32_conversion(DRBD_IOCTL_SET_STATE_FLAGS,NULL);
unlock_kernel();
#endif
#endif
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/drbd/drbd_receiver.c new/drbd-0.7.18/drbd/drbd_receiver.c
--- old/drbd-0.7.17/drbd/drbd_receiver.c 2006-02-16 16:39:30.000000000 +0100
+++ new/drbd-0.7.18/drbd/drbd_receiver.c 2006-05-04 17:07:57.000000000 +0200
@@ -57,8 +57,8 @@
#define is_syncer_blk(A,B) ((B)==ID_SYNCER)
-#ifdef __arch_um__
-void *to_virt(unsigned long phys)
+#if defined(__arch_um__) && !defined(HAVE_UML_TO_VIRT)
+static inline void *to_virt(unsigned long phys)
{
return((void *) uml_physmem + phys);
}
@@ -161,7 +161,11 @@
{
struct Tl_epoch_entry* e;
- e = kmem_cache_alloc(drbd_ee_cache, mask);
+ /* kmem_cache does not like to mix different memory types.
+ * so even if we alloc'ed the page from HIGHMEM,
+ * the ee comes from normal memory.
+ */
+ e = kmem_cache_alloc(drbd_ee_cache, mask & ~(__GFP_HIGHMEM));
if( e == NULL ) return FALSE;
drbd_ee_init(e,page);
@@ -181,7 +185,12 @@
page=alloc_page(mask);
if(!page) return FALSE;
- if(!_drbd_alloc_ee(mdev,page,GFP_KERNEL)) {
+ /* if we got the page, we really want the ee, too,
+ * even for "GFP_TRY".
+ * we may wait, but better not cause IO,
+ * we might be in the IO path (of our peer).
+ */
+ if(!_drbd_alloc_ee(mdev,page,mask | GFP_NOIO)) {
__free_page(page);
return FALSE;
}
@@ -309,6 +318,11 @@
if( ( mdev->ee_vacant+mdev->ee_in_use) <
mdev->conf.max_buffers ) {
if(drbd_alloc_ee(mdev,GFP_TRY)) {
+ /* race race race
+ * (currently harmless for drbd07, since drbd_get_ee is called by
+ * receiver_thread only. solved with different implementation in
+ * drbd-plus already.)
+ */
spin_lock_irq(&mdev->ee_lock);
break;
}
@@ -328,6 +342,7 @@
finish_wait(&mdev->ee_wait, &wait);
}
+ /* race race race */
le=mdev->free_ee.next;
list_del(le);
mdev->ee_vacant--;
@@ -707,6 +722,10 @@
set_cstate(mdev,WFConnection);
+ /* Break out of unknown connect loops by random wait here. */
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(net_random() % ((mdev->conf.try_connect_int*HZ)/4));
+
while(1) {
sock=drbd_try_connect(mdev);
if(sock) {
@@ -743,10 +762,8 @@
msock->sk->SK_(reuse)=1; /* SO_REUSEADDR */
sock->sk->SK_(reuse)=1; /* SO_REUSEADDR */
- /* to prevent oom deadlock... */
- /* The default allocation priority was GFP_KERNEL */
- sock->sk->SK_(allocation) = GFP_DRBD;
- msock->sk->SK_(allocation) = GFP_DRBD;
+ sock->sk->SK_(allocation) = GFP_NOIO;
+ msock->sk->SK_(allocation) = GFP_NOIO;
sock->sk->SK_(priority)=TC_PRIO_BULK;
NOT_IN_26(sock->sk->tp_pinfo.af_tcp.nonagle=0;)
@@ -1988,10 +2005,10 @@
int rv;
rv = drbd_send_handshake(mdev);
- if (!rv) return 0;
+ if (!rv) goto break_c_loop;
rv = drbd_recv_header(mdev,&p->head);
- if (!rv) return 0;
+ if (!rv) goto break_c_loop;
if (p->head.command == ReportParams) {
ERR("expected HandShake packet, received ReportParams...\n");
@@ -2042,6 +2059,23 @@
}
return 1;
+
+ break_c_loop:
+ WARN( "My msock connect got accepted onto peer's sock!\n");
+ /* In case a tcp connection set-up takes longer than
+ connect-int, we might get into the situation that this
+ node's msock gets connected to the peer's sock!
+
+ To break out of this endless loop behaviour, we need to
+ wait unti the peer's msock connect tries are over. (1 Second)
+
+ Additionally we wait connect-int/2 to hit with our next
+ connect try exactly in the peer's window of expectation. */
+
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(HZ + (mdev->conf.try_connect_int*HZ)/2);
+
+ return 0;
}
int drbdd_init(struct Drbd_thread *thi)
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/drbd/drbd_req.c new/drbd-0.7.18/drbd/drbd_req.c
--- old/drbd-0.7.17/drbd/drbd_req.c 2005-08-31 10:23:41.000000000 +0200
+++ new/drbd-0.7.18/drbd/drbd_req.c 2006-05-04 17:07:57.000000000 +0200
@@ -172,7 +172,6 @@
{
drbd_request_t *req;
int local, remote;
- int target_area_out_of_sync = FALSE; // only relevant for reads
if (unlikely(drbd_did_panic == DRBD_MAGIC)) {
drbd_bio_IO_error(bio);
@@ -226,7 +225,7 @@
/* allocate outside of all locks
*/
- req = mempool_alloc(drbd_request_mempool, GFP_DRBD);
+ req = mempool_alloc(drbd_request_mempool, GFP_NOIO);
if (!req) {
/* only pass the error to the upper layers.
* if user cannot handle io errors, thats not our business.
@@ -340,8 +339,6 @@
dec_ap_pending(mdev);
drbd_end_req(req, RQ_DRBD_SENT, 1, sector);
}
- } else if (target_area_out_of_sync) {
- drbd_read_remote(mdev,req);
} else {
// this node is diskless ...
drbd_read_remote(mdev,req);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/drbd/linux/drbd.h new/drbd-0.7.18/drbd/linux/drbd.h
--- old/drbd-0.7.17/drbd/linux/drbd.h 2004-11-02 11:09:09.000000000 +0100
+++ new/drbd-0.7.18/drbd/linux/drbd.h 2006-05-04 17:07:57.000000000 +0200
@@ -128,6 +128,7 @@
MDMounted,
LDMDInvalid,
LDDeviceTooLarge,
+ MDIOError
};
struct ioctl_disk_config {
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/drbd/linux/drbd_config.h new/drbd-0.7.18/drbd/linux/drbd_config.h
--- old/drbd-0.7.17/drbd/linux/drbd_config.h 2006-03-06 17:07:09.000000000 +0100
+++ new/drbd-0.7.18/drbd/linux/drbd_config.h 2006-05-04 17:07:57.000000000 +0200
@@ -22,8 +22,8 @@
extern const char * drbd_buildtag(void);
-#define REL_VERSION "0.7.17"
-#define API_VERSION 77
+#define REL_VERSION "0.7.18"
+#define API_VERSION 78
#define PRO_VERSION 74
//#define DBG_ALL_SYMBOLS // no static functs, improves quality of OOPS traces
@@ -65,4 +65,8 @@
// for troubles.
// #define DRBD_DISABLE_SENDPAGE
+// older, unpached kernel sources do not have it, so we added it in drbd_receiver.c
+// but more recent kernels define it in arch/um/include/mem.h
+#define HAVE_UML_TO_VIRT
+
#endif
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/drbd/lru_cache.c new/drbd-0.7.18/drbd/lru_cache.c
--- old/drbd-0.7.17/drbd/lru_cache.c 2005-04-13 09:50:10.000000000 +0200
+++ new/drbd-0.7.18/drbd/lru_cache.c 2006-05-04 17:07:57.000000000 +0200
@@ -137,7 +137,7 @@
PARANOIA_ENTRY();
BUG_ON(e->refcnt);
list_del(&e->list);
- hlist_del(&e->colision);
+ hlist_del_init(&e->colision);
e->lc_number = LC_FREE;
e->refcnt = 0;
list_add(&e->list,&lc->free);
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/drbd.spec.in new/drbd-0.7.18/drbd.spec.in
--- old/drbd-0.7.17/drbd.spec.in 2006-03-06 17:07:09.000000000 +0100
+++ new/drbd-0.7.18/drbd.spec.in 2006-05-04 17:07:57.000000000 +0200
@@ -190,6 +190,22 @@
/sbin/depmod -a -F /boot/System.map-%{kernelversion} %{kernelversion} >/dev/null 2>&1 || true
%changelog
+* Mon Apr 26 2006 14:10:07 +0200 Philipp Reisner
+- drbd (0.7.18-1)
+ * Under high memory pressure it was possible to hit a deadlock
+ on a kmalloc(). Changed the GFP mask, it is no longer possible to
+ deadlock it with memory pressure.
+ * With very unlucky network timing during connect DRBD falls into
+ a connect / drop-connection loop, that as soon as DRBD is in this
+ loop is very stable. This is fixed now, DRBD detects this situation
+ an breaks out of it.
+ * Fix to the init-script. Now it waits until udev has created
+ the device nodes of _all_ resources.
+ * A small fix for the 32bit userland 64bit kernel people, running
+ older kernels.
+ * Improved handling of IO errors during initial read in of the
+ activity log.
+
* Mon Mar 6 2006 14:43:41 +0200 Philipp Reisner
- drbd (0.7.17-1)
* There was a bug that could cause the activity log to be not applied
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/scripts/drbd new/drbd-0.7.18/scripts/drbd
--- old/drbd-0.7.17/scripts/drbd 2005-01-17 12:37:49.000000000 +0100
+++ new/drbd-0.7.18/scripts/drbd 2006-05-04 17:07:57.000000000 +0200
@@ -41,13 +41,14 @@
[ -e /var/run/klogd.pid ] && [ -x /sbin/klogd ] && /sbin/klogd -i
# make sure udev has time to create the device files
- RESOURCE=`$DRBDADM sh-resources` || exit 20
- RESOURCE=${RESOURCE%%\ *}
- DEVICE=`$DRBDADM sh-dev $RESOURCE` || exit 20
-
- while [ ! -e $DEVICE ] && [ $UDEV_TIMEOUT -gt 0 ] ; do
- sleep 1
- UDEV_TIMEOUT=$(( $UDEV_TIMEOUT-1 ))
+ for RESOURCE in `$DRBDADM sh-resources`; do
+ for DEVICE in `$DRBDADM sh-dev $RESOURCE`; do
+ UDEV_TIMEOUT_LOCAL=$UDEV_TIMEOUT
+ while [ ! -e $DEVICE ] && [ $UDEV_TIMEOUT_LOCAL -gt 0 ] ; do
+ sleep 1
+ UDEV_TIMEOUT_LOCAL=$(( $UDEV_TIMEOUT_LOCAL-1 ))
+ done
+ done
done
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/user/drbdadm_main.c new/drbd-0.7.18/user/drbdadm_main.c
--- old/drbd-0.7.17/user/drbdadm_main.c 2006-02-16 16:39:30.000000000 +0100
+++ new/drbd-0.7.18/user/drbdadm_main.c 2006-03-27 17:40:08.000000000 +0200
@@ -456,10 +456,13 @@
int timeout;
sigaction(SIGALRM,&sa,&so);
alarm_raised=0;
- switch(flags) {
+ switch(flags & 0x0f) {
case SLEEPS_SHORT: timeout = 5; break;
case SLEEPS_LONG: timeout = 120; break;
case SLEEPS_VERY_LONG: timeout = 600; break;
+ default:
+ fprintf(stderr,"%s:%u: oops... flags=%02x\n", __FILE__ , __LINE__ , flags);
+ exit(E_thinko);
}
alarm(timeout);
}
diff -urN --exclude=CVS --exclude=.cvsignore --exclude=.svn --exclude=.svnignore old/drbd-0.7.17/user/drbdsetup.c new/drbd-0.7.18/user/drbdsetup.c
--- old/drbd-0.7.17/user/drbdsetup.c 2005-08-31 10:23:41.000000000 +0200
+++ new/drbd-0.7.18/user/drbdsetup.c 2006-05-04 17:07:57.000000000 +0200
@@ -651,6 +651,7 @@
[LDNoConfig]="You have to use the disk command first.",
[LDMounted]="Lower device is already mounted.",
[MDMounted]="Meta device is already mounted.",
+ [MDIOError]="IO error on meta device",
[LDMDInvalid]="Lower device / meta device / index combination invalid.",
[LDDeviceTooLarge]="Currently we only support devices up to 3.998TB.\n"
"(up to 2TB in case you do not have CONFIG_LBD set)",
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Remember to have fun...