Note: "permalinks" may not be as permanent as we would like,
direct links of old sources may well be a few messages off.
Hi! It's me again. :) This is a patch against 0.7 CVS for three things: - add a "Kconfig" file for drbd being built in a kernel tree - inside/outside kernel tree test added to Makefile - script to generate a kernel patch against a kernel tree and drbd tree With these, I think anyone can build drbd inside and outside of a kernel tree, monolithic or modular. -- Kees Cook Open Source Development Lab kees at osdl.org -------------- next part -------------- diff -uNrp drbd/drbd/Kconfig drbd-0.7-kees/drbd/Kconfig --- drbd/drbd/Kconfig 1969-12-31 16:00:00.000000000 -0800 +++ drbd-0.7-kees/drbd/Kconfig 2004-04-16 16:40:15.000000000 -0700 @@ -0,0 +1,27 @@ +# +# DRBD device driver configuration +# +config BLK_DEV_DRBD + tristate "Distributed redundant block device support" + depends on NET && PROC_FS && !BLK_DEV_NBD + ---help--- + 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 RAID 1. + + This device replaces the regular "network block device". + + Each device (drbd provides more than one of these devices) has a + state, which can be 'primary' or 'secondary'. On the node with the + primary device the application is supposed to run and to access the + device (/dev/nbX). Every write is sent to the local 'lower level + block device' and to the node with the device in 'secondary' state. + The secondary device simply writes the data to its lower level block + device. Reads are always carried out locally. + + Drbd management is done through user-space tools. + + http://www.drbd.org/ + + If unsure, say N. + diff -uNrp drbd/drbd/Makefile drbd-0.7-kees/drbd/Makefile --- drbd/drbd/Makefile 2004-04-08 23:53:43.000000000 -0700 +++ drbd-0.7-kees/drbd/Makefile 2004-04-16 16:53:31.000000000 -0700 @@ -32,8 +32,14 @@ ifneq ($(KERNELRELEASE),) $(error "won't compile with this kernel version") endif - # override needed for 2.4.X kbuild - override CFLAGS += -I$(DRBDSRC) + # override needed for 2.4.X+ kbuild + ifneq ($(DRBDSRC),) + # outside the kernel tree + override CFLAGS += -I$(DRBDSRC) + else + # inside the kernel tree + EXTRA_CFLAGS += -Idrivers/block/drbd + endif obj-m += drbd.o drbd-objs := drbd_fs.o drbd_main.o drbd_proc.o drbd_dsender.o \ diff -uNrp drbd/scripts/patch-kernel drbd-0.7-kees/scripts/patch-kernel --- drbd/scripts/patch-kernel 1969-12-31 16:00:00.000000000 -0800 +++ drbd-0.7-kees/scripts/patch-kernel 2004-04-16 16:40:03.000000000 -0700 @@ -0,0 +1,99 @@ +#!/bin/bash +# +# Create a patch against a kernel tree which adds the DRBD sources. +# +# $Id:$ +# +# Copyright (C) 2003 Kees Cook, OSDL +# kees at osdl.org, http://developer.osdl.org/kees/ +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# http://www.gnu.org/copyleft/gpl.html +# +KERNEL=$1 +DRBD=$2 +if [ -z "$KERNEL" ] || [ -z "$DRBD" ]; then + echo "Usage: kernel-patch KERNEL_SOURCE_DIR DRBD_PACKAGE_DIR" >&2 + exit 1 +fi +if [ ! -d "$KERNEL/Documentation" ]; then + echo "Please specify the kernel tree to patch" >&2 + exit 1 +fi +KERNEL=`(cd $KERNEL && pwd)` +KERNEL_BASE=`basename $KERNEL` + +if [ ! -d "$DRBD/documentation" ]; then + echo "Please specify the drbd tree to use" >&2 + exit 1 +fi +DRBD=`(cd $DRBD && pwd)` +DRBD_BASE="$KERNEL_BASE"-drbd + +TEMPDIR=`mktemp -d /tmp/drbd-patch-XXXXXX` +if [ $? -gt 0 ]; then + echo "Could not make temp directory" >&2 + exit 1 +fi + +# Set up our work area +cd $TEMPDIR || exit 1 + +# Set up the diff directories +mkdir -p $KERNEL_BASE/drivers/block || exit 1 +mkdir -p $DRBD_BASE/drivers/block || exit 1 + +# Pull in the base drbd source +cp -a $DRBD/drbd $DRBD_BASE/drivers/block/ || exit 1 +# Convert the Makefile to just what's needed in 2.6 +# ... nothing? + +# Bring over the current kernel Kconfig and Makefiles +cp -a $KERNEL/drivers/block/{Kconfig,Makefile} $KERNEL_BASE/drivers/block || exit 1 +cp -a $KERNEL/drivers/block/{Kconfig,Makefile} $DRBD_BASE/drivers/block || exit 1 + +# Add drbd to the block drivers Makefile and Kconfig if we need to +grep drbd/ $DRBD_BASE/drivers/block/Makefile >/dev/null || \ + echo 'obj-$(CONFIG_BLK_DEV_DRBD) += drbd/' >> \ + $DRBD_BASE/drivers/block/Makefile \ + || exit 1 +grep drbd/ $DRBD_BASE/drivers/block/Kconfig >/dev/null || \ + perl -pi -e 'if ($go && /^config /) { + print "source \"drivers/block/drbd/Kconfig\"\n\n"; + $go=0; + } elsif (/^config BLK_DEV_NBD/) { + $go=1; + }' $DRBD_BASE/drivers/block/Kconfig \ + || exit 1 + +# Create diff! +diff -uNrp --exclude=CVS $KERNEL_BASE $DRBD_BASE && exit 1 + +# Clean up kernel stub +rm $KERNEL_BASE/drivers/block/{Kconfig,Makefile} || exit 1 +rmdir $KERNEL_BASE/drivers/block || exit 1 +rmdir $KERNEL_BASE/drivers || exit 1 +rmdir $KERNEL_BASE || exit 1 + +# Clean up drbd copies +cd $DRBD_BASE/drivers/block || exit 1 +rm -r Kconfig Makefile drbd || exit 1 +cd $TEMPDIR || exit 1 +rmdir $DRBD_BASE/drivers/block || exit 1 +rmdir $DRBD_BASE/drivers || exit 1 +rmdir $DRBD_BASE || exit 1 + +cd / || exit 1 +rmdir $TEMPDIR