--- /dev/null
+--- drbd.orig/drbd/drbd.c Fri May 25 13:13:22 2001
++++ drbd/drbd/drbd.c Sat Sep 8 10:04:56 2001
+@@ -404,7 +404,7 @@
+
+ rlen = rlen + sprintf(buf + rlen, "\n");
+
+- for (i = 0; i < NR_REQUEST; i++) {
++ for (i = 0; i < QUEUE_NR_REQUESTS; i++) {
+ if (my_all_requests[i].rq_status == RQ_INACTIVE) {
+ l = 'E';
+ } else {
+@@ -1079,8 +1079,8 @@
+ unsigned long flags;
+ del_timer(&mdev->s_timeout);
+ spin_lock_irqsave(¤t->sigmask_lock,flags);
+- if (sigismember(¤t->signal, DRBD_SIG)) {
+- sigdelset(¤t->signal, DRBD_SIG);
++ if (sigismember(¤t->pending.signal, DRBD_SIG)) {
++ sigdelset(¤t->pending.signal, DRBD_SIG);
+ recalc_sigpending(current);
+ spin_unlock_irqrestore(¤t->sigmask_lock,flags);
+
+@@ -1237,7 +1237,7 @@
+
+ void drbd_dio_end(struct buffer_head *bh, int uptodate)
+ {
+- struct request *req = bh->b_dev_id;
++ struct request *req = bh->b_private;
+
+ // READs are sorted out in drbd_end_req().
+ drbd_end_req(req, RQ_DRBD_WRITTEN, uptodate);
+@@ -1356,7 +1356,7 @@
+ #endif
+
+ bh->b_list = BUF_LOCKED;
+- bh->b_dev_id = req;
++ bh->b_private = req;
+ bh->b_end_io = drbd_dio_end;
+
+ if(req->cmd == WRITE)
+@@ -2222,8 +2222,8 @@
+ unsigned long flags;
+ del_timer(&accept_timeout);
+ spin_lock_irqsave(¤t->sigmask_lock,flags);
+- if (sigismember(¤t->signal, DRBD_SIG)) {
+- sigdelset(¤t->signal, DRBD_SIG);
++ if (sigismember(¤t->pending.signal, DRBD_SIG)) {
++ sigdelset(¤t->pending.signal, DRBD_SIG);
+ recalc_sigpending(current);
+ spin_unlock_irqrestore(¤t->sigmask_lock,
+ flags);
+@@ -2453,7 +2453,7 @@
+ return FALSE;
+
+ mark_buffer_uptodate(bh, 0);
+- mark_buffer_dirty(bh, 1);
++ mark_buffer_dirty(bh);
+
+ if (drbd_conf[minor].conf.wire_protocol == DRBD_PROT_B
+ && header.block_id != ID_SYNCER) {
+@@ -2480,7 +2480,7 @@
+ */
+
+ if (drbd_conf[minor].conf.wire_protocol == DRBD_PROT_C) {
+- if (drbd_conf[minor].unacked_cnt >= (NR_REQUEST / 4)) {
++ if (drbd_conf[minor].unacked_cnt >= (QUEUE_NR_REQUESTS / 4)) {
+ run_task_queue(&tq_disk);
+ }
+ }
+@@ -2869,8 +2869,8 @@
+ thi->t_state = Running;
+ wake_up(&thi->wait);
+ spin_lock_irqsave(¤t->sigmask_lock,flags);
+- if (sigismember(¤t->signal, SIGTERM)) {
+- sigdelset(¤t->signal, SIGTERM);
++ if (sigismember(¤t->pending.signal, SIGTERM)) {
++ sigdelset(¤t->pending.signal, SIGTERM);
+ recalc_sigpending(current);
+ }
+ spin_unlock_irqrestore(¤t->sigmask_lock,flags);
-Summary: drbd
-Summary(pl): drbd
+%define _kernel_ver %(grep UTS_RELEASE %{_kernelsrcdir}/include/linux/version.h 2>/dev/null | cut -d'"' -f2)
+%define _kernel24 %(echo %{_kernel_ver} | grep -q '2\.[012]\.' ; echo $?)
+%define smpstr %{?_with_smp:smp}%{!?_with_smp:up}
+%define smp %{?_with_smp:1}%{!?_with_smp:0}
+
+%define rel 1
+
+Summary: drbd is a block device designed to build high availibility clusters
+Summary(pl): drbd jest urz±dzeniem blokowym dla klastrów o wysokiej niezawodno¶ci
Name: drbd
Version: 0.5.8
-Release: 1
+Release: %{rel}@%{_kernel_ver}%{smpstr}
License: GPL
-Group: Utilities
-###### Unknown group!
-Group(pl): Narzêdzia
-Source0: %{name}-%{version}.tar.gz
-URL: http://complang.tuwien.ac.at/reisner/drbd/
+Group: Base/Kernel
+Group(de): Grundsätzlich/Kern
+Group(pl): Podstawowe/J±dro
+Source0: http://www.complang.tuwien.ac.at/reisner/drbd/download/%{name}-%{version}.tar.gz
+Patch0: %{name}-kernel24.patch
+URL: http://www.complang.tuwien.ac.at/reisner/drbd/
+Prereq: /sbin/depmod
+Conflicts: kernel < %{_kernel_ver}, kernel > %{_kernel_ver}
+Conflicts: kernel-%{?_with_smp:up}%{!?_with_smp:smp}
BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n)
-%define _kernelversion 2.2.19
-
%description
-heartbeat is a basic heartbeat subsystem for Linux-HA. It will run
-scripts at initialization, and when machines go up or down. This
-version will also perform IP address takeover using gratuitous ARPs.
-It works correctly for a 2-node configuration, and is extensible to
-larger configurations.
-
-It implements the following kinds of heartbeats:
- - Bidirectional Serial Rings ("raw" serial ports)
- - UDP/IP broadcast (ethernet, etc)
- - Bidirectional Serial PPP/UDP Rings (using PPP)
+drbd is a block device which is designed to build high availability
+clusters. This is done by mirroring a whole block device via (a
+dedicated) network. You could see it as a network RAID1.
%description -l pl
-heartbeat jest podstawowym podsystemem dla systemów o podwy¿szonej
-dostêpno¶ci budowanych w oparciu o Linuxa. Zajmuje siê uruchamianiem
-skryptów podczas startu i zamykania systemu. Ta wersja pakietu pozwala
-na przejmowanie adresów IP. Oprogramowanie dzia³a poprawnie dla
-konfiguracji sk³adaj±cej siê z 2 hostów, mo¿na je równie¿ stosowaæ do
-bardziej skomplikowanych konfiguracji.
+drbd jest urz±dzeniem blokowym zaprojektowanym dla klastrów o wysokiej
+niezawodno¶ci. drbd dzia³a jako mirroring ca³ego urz±dzenia blokowego
+przez (dedykowan±) sieæ. Mo¿e byæ widoczny jako sieciowy RAID1.
+
+%package -n drbdsetup
+Summary: Setup tool and scripts for DRBD
+Summary(pl): Narzêdzie konfiguracyjne i skrypty dla DRBD
+Release: %{rel}
+Group: Applications/System
+Group(de): Applikationen/System
+Group(pl): Aplikacje/System
+Prereq: chkconfig
+Requires: %{name} = %{version}
+
+%description -n drbdsetup
+Setup tool and init scripts for DRBD.
+
+%description -n drbdsetup -l pl
+Narzêdzie konfiguracyjne i skrypty startowe dla DRBD.
%prep
%setup -q -n %{name}
+%if %{_kernel24}
+%patch -p1
+%endif
%build
-%{__make}
+%if %{smp}
+SMP="-D__SMP__"
+%endif
+%{__make} \
+%ifarch %{ix86}
+ KAF_i386="%{rpmcflags} -malign-loops=2 -malign-jumps=2 -malign-functions=2 -fomit-frame-pointer" \
+%else
+%ifarch %{alpha}
+ KAF_alpha="%{rpmcfalgs} -ffixed8 -mno-fp-regs" \
+%endif
+%endif
+ SMPFLAG="$SMP" \
+ KERNVER="%{_kernel_ver}" \
+ INCLUDE="-I%{_kernelsrcdir}/include" \
+ DEBUGFLAGS="%{rpmcflags} %{?debug:-DDBG}"
%install
rm -rf $RPM_BUILD_ROOT
-install -d $RPM_BUILD_ROOT%{_sbindir}
-
-#%{__make} install PREFIX=$RPM_BUILD_ROOT/
-#dir drbd
-install -d $RPM_BUILD_ROOT/lib/modules/%{_kernelversion}/block/
-install drbd/drbd.o $RPM_BUILD_ROOT/lib/modules/%{_kernelversion}/block/
-#dir user
-install user/drbdsetup $RPM_BUILD_ROOT%{_sbindir}/
-#dir documentation
-install -d $RPM_BUILD_ROOT/%{_defaultdocdir}/%{name}
-cd documentation
-install drbd.conf.5 drbd.conf.sgml drbdsetup.8 drbdsetup.sgml manpage.links manpage.refs $RPM_BUILD_ROOT/%{_defaultdocdir}/%{name}
+install -d $RPM_BUILD_ROOT{%{_sbindir},%{_mandir}/man{5,8},%{_sysconfdir}} \
+ $RPM_BUILD_ROOT{/etc/rc.d/init.d,/etc/ha.d/resource.d}
-%post
-/sbin/depmod
+%if %{_kernel24}
+install -d $RPM_BUILD_ROOT/lib/modules/%{_kernel_ver}/misc
+install drbd/drbd.o $RPM_BUILD_ROOT/lib/modules/%{_kernel_ver}/misc
+%else
+install -d $RPM_BUILD_ROOT/lib/modules/%{_kernel_ver}/block
+install drbd/drbd.o $RPM_BUILD_ROOT/lib/modules/%{_kernel_ver}/block
+%endif
+
+install user/drbdsetup $RPM_BUILD_ROOT%{_sbindir}
+install scripts/drbd.conf $RPM_BUILD_ROOT%{_sysconfdir}
+install scripts/drbd $RPM_BUILD_ROOT/etc/rc.d/init.d
+ln -sf /etc/rc.d/init.d/drbd $RPM_BUILD_ROOT/etc/ha.d/resource.d/datadisk
-%preun
-/sbin/depmod
+install documentation/drbd.conf.5 $RPM_BUILD_ROOT%{_mandir}/man5
+install documentation/drbdsetup.8 $RPM_BUILD_ROOT%{_mandir}/man8
+
+gzip -9nf ChangeLog README TODO
%clean
rm -rf $RPM_BUILD_ROOT
+%post
+/sbin/depmod -a
+
+%postun
+/sbin/depmod -a
+
+%post -n drbdsetup
+chkconfig --add drbd
+
+%preun -n drbdsetup
+chkconfig --del drbd
+
%files
%defattr(644,root,root,755)
-%doc %{_defaultdocdir}/%{name}
+%doc *.gz
+%if %{_kernel24}
+/lib/modules/%{_kernel_ver}/misc/drbd.o
+%else
+/lib/modules/%{_kernel_ver}/block/drbd.o
+%endif
+
+%files -n drbdsetup
+%defattr(644,root,root,755)
%attr(755,root,root) %{_sbindir}/drbdsetup
-/lib/modules/%{_kernelversion}/block/drbd.o
-%{_mandir}/man8/*
-%{_mandir}/man5/*
+%attr(755,root,root) /etc/rc.d/init.d/drbd
+%attr(755,root,root) /etc/ha.d/resource.d/datadisk
+%config(noreplace) %verify(not size mtime md5) %{_sysconfdir}/drbd.conf
+%{_mandir}/man[58]/*