[DRBD-cvs] r1520 - in trunk: documentation drbd drbd/linux scripts
user
svn at svn.drbd.org
svn at svn.drbd.org
Tue Aug 31 13:47:00 CEST 2004
Author: lars
Date: 2004-08-31 13:46:58 +0200 (Tue, 31 Aug 2004)
New Revision: 1520
Modified:
trunk/documentation/Makefile
trunk/documentation/Makefile.lang
trunk/drbd/Makefile
trunk/drbd/drbd_compat_wrappers.h
trunk/drbd/drbd_fs.c
trunk/drbd/drbd_int.h
trunk/drbd/drbd_main.c
trunk/drbd/linux/drbd.h
trunk/drbd/linux/drbd_config.h
trunk/scripts/Makefile
trunk/scripts/adjust_drbd_config_h.sh
trunk/user/drbdsetup.c
Log:
- reviewd Makefiles for correct handling of empty PREFIX
and added some missing '/'
- improved adjust_drbd_config_h magic, so it does not trigger a recompile
if it does not change a thing
- added check for DRBD_MAX_SECTORS in the "attach disk" path.
this limits drbd device size to 2TB, which is the limit introduced by
code leftovers still using unsigned long to represent disk size
at various places.
- added DRBD_DISABLE_SENDPAGE to drbd_config.h
sendpage is now disabled by default,
since we seemingly still have data corruption problems where it is
involved on certain kernel flavours.
If you (think you) know that your kernel flavour & drbd combination
is not affected, you can comment it out, to get the performance gain
of zero-copy network send.
Modified: trunk/documentation/Makefile
===================================================================
--- trunk/documentation/Makefile 2004-08-27 13:08:47 UTC (rev 1519)
+++ trunk/documentation/Makefile 2004-08-31 11:46:58 UTC (rev 1520)
@@ -139,16 +139,16 @@
@ok=true; for f in $(MANPAGES) ; \
do [ -e $$f ] || { echo $$f missing ; ok=false; } ; \
done ; $$ok
- @ set -e; for f in $(MANPAGES) ; do \
+ set -e; for f in $(MANPAGES) ; do \
s=$${f##*.}; \
- install -v -D -m 644 $$f $(PREFIX)usr/share/man/man$$s/$$f ; \
+ install -v -D -m 644 $$f $(PREFIX)/usr/share/man/man$$s/$$f ; \
done
@ set -e; for i in $(LANGS); do $(MAKE) -C $$i install; done
uninstall:
@ set -e; for f in $(MANPAGES) ; do \
s=$${f##*.}; \
- rm -v $(PREFIX)usr/share/man/man$$s/$$f ; \
+ rm -v $(PREFIX)/usr/share/man/man$$s/$$f ; \
done
@ set -e; for i in $(LANGS); do $(MAKE) -C $$i uninstall; done
Modified: trunk/documentation/Makefile.lang
===================================================================
--- trunk/documentation/Makefile.lang 2004-08-27 13:08:47 UTC (rev 1519)
+++ trunk/documentation/Makefile.lang 2004-08-31 11:46:58 UTC (rev 1520)
@@ -93,14 +93,14 @@
rm -f *.ps.gz *.pdf *.ps *.html
install:
- install -D -m 644 drbdsetup.8 $(PREFIX)usr/share/man/$(C_LANG)/man8/drbdsetup.8
- install -D -m 644 drbd.conf.5 $(PREFIX)usr/share/man/$(C_LANG)/man5/drbd.conf.5
- install -D -m 644 drbd.8 $(PREFIX)usr/share/man/$(C_LANG)/man8/drbd.8
+ install -D -m 644 drbdsetup.8 $(PREFIX)/usr/share/man/$(C_LANG)/man8/drbdsetup.8
+ install -D -m 644 drbd.conf.5 $(PREFIX)/usr/share/man/$(C_LANG)/man5/drbd.conf.5
+ install -D -m 644 drbd.8 $(PREFIX)/usr/share/man/$(C_LANG)/man8/drbd.8
uninstall:
- rm $(PREFIX)usr/share/man/$(C_LANG)/man8/drbdsetup.8
- rm $(PREFIX)usr/share/man/$(C_LANG)/man5/drbd.conf.5
- rm $(PREFIX)usr/share/man/$(C_LANG)/man8/drbd.8
+ rm $(PREFIX)/usr/share/man/$(C_LANG)/man8/drbdsetup.8
+ rm $(PREFIX)/usr/share/man/$(C_LANG)/man5/drbd.conf.5
+ rm $(PREFIX)/usr/share/man/$(C_LANG)/man8/drbd.8
html: $(shell ls *.sgml | sed s/sgml/html/g)
pdf: $(shell ls *.sgml | sed s/sgml/pdf/g)
Modified: trunk/drbd/Makefile
===================================================================
--- trunk/drbd/Makefile 2004-08-27 13:08:47 UTC (rev 1519)
+++ trunk/drbd/Makefile 2004-08-31 11:46:58 UTC (rev 1520)
@@ -148,9 +148,9 @@
@if ! [ -e $(MODOBJ) ] ; then \
echo "No $(MODOBJ): nothing to install??"; false ; \
fi
- install -d $(PREFIX)var/lib/drbd
- install -d $(PREFIX)lib/modules/$(KERNELRELEASE)/$(MODSUBDIR)
- install -m 644 $(MODOBJ) $(PREFIX)lib/modules/$(KERNELRELEASE)/$(MODSUBDIR)
+# install -d $(PREFIX)/var/lib/drbd
+ install -d $(PREFIX)/lib/modules/$(KERNELRELEASE)/$(MODSUBDIR)
+ install -m 644 $(MODOBJ) $(PREFIX)/lib/modules/$(KERNELRELEASE)/$(MODSUBDIR)
ifeq ($(shell uname -r),$(KERNELRELEASE))
/sbin/depmod -a || /sbin/depmod -e $(MODOBJ) 2>&1 >/dev/null || true
else
Modified: trunk/drbd/drbd_compat_wrappers.h
===================================================================
--- trunk/drbd/drbd_compat_wrappers.h 2004-08-27 13:08:47 UTC (rev 1519)
+++ trunk/drbd/drbd_compat_wrappers.h 2004-08-31 11:46:58 UTC (rev 1520)
@@ -366,7 +366,7 @@
static inline void drbd_set_my_capacity(drbd_dev *mdev, sector_t size)
{
set_capacity(mdev->vdisk,size);
- mdev->this_bdev->bd_inode->i_size = (loff_t)size << 9;
+ mdev->this_bdev->bd_inode->i_size = ((loff_t)size) << 9;
}
//#warning "FIXME why don't we care for the return value?"
Modified: trunk/drbd/drbd_fs.c
===================================================================
--- trunk/drbd/drbd_fs.c 2004-08-27 13:08:47 UTC (rev 1519)
+++ trunk/drbd/drbd_fs.c 2004-08-31 11:46:58 UTC (rev 1520)
@@ -366,6 +366,11 @@
goto release_bdev2_fail_ioctl;
}
+ if (drbd_get_capacity(bdev) > DRBD_MAX_SECTORS) {
+ retcode = LDDeviceTooLarge;
+ goto release_bdev2_fail_ioctl;
+ }
+
if ( new_conf.meta_index == -1 ) i = 1;
else i = new_conf.meta_index+1;
Modified: trunk/drbd/drbd_int.h
===================================================================
--- trunk/drbd/drbd_int.h 2004-08-27 13:08:47 UTC (rev 1519)
+++ trunk/drbd/drbd_int.h 2004-08-31 11:46:58 UTC (rev 1520)
@@ -77,6 +77,12 @@
# warning "FIXME. DRBD_MAJOR is now officially defined in major.h"
#endif
+/* FIXME because of code leftovers from previous times,
+ * currently our code gets heavily confused for device sizes larger
+ * than 2TB, so refuse to configure devices of that size.
+ */
+#define DRBD_MAX_SECTORS (0xffffffffLU)
+
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
/*lge: this hack is to get rid of the compiler warnings about
* 'do_nbd_request declared static but never defined'
Modified: trunk/drbd/drbd_main.c
===================================================================
--- trunk/drbd/drbd_main.c 2004-08-27 13:08:47 UTC (rev 1519)
+++ trunk/drbd/drbd_main.c 2004-08-31 11:46:58 UTC (rev 1520)
@@ -903,12 +903,36 @@
return ret;
}
+#ifdef DRBD_DISABLE_SENDPAGE
int _drbd_send_page(drbd_dev *mdev, struct page *page,
int offset, size_t size)
{
int sent,ok;
int len = size;
+ spin_lock(&mdev->send_task_lock);
+ mdev->send_task=current;
+ spin_unlock(&mdev->send_task_lock);
+
+ sent = _drbd_no_send_page(mdev, page, offset, size);
+ if (likely(sent > 0)) len -= sent;
+
+ spin_lock(&mdev->send_task_lock);
+ mdev->send_task=NULL;
+ spin_unlock(&mdev->send_task_lock);
+
+ ok = (len == 0);
+ if (likely(ok))
+ mdev->send_cnt += size>>9;
+ return ok;
+}
+#else
+int _drbd_send_page(drbd_dev *mdev, struct page *page,
+ int offset, size_t size)
+{
+ int sent,ok;
+ int len = size;
+
#ifdef SHOW_SENDPAGE_USAGE
unsigned long now = jiffies;
static unsigned long total = 0;
@@ -980,6 +1004,7 @@
mdev->send_cnt += size>>9;
return ok;
}
+#endif
// Used to send write requests: bh->b_rsector !!
int drbd_send_dblock(drbd_dev *mdev, drbd_request_t *req)
Modified: trunk/drbd/linux/drbd.h
===================================================================
--- trunk/drbd/linux/drbd.h 2004-08-27 13:08:47 UTC (rev 1519)
+++ trunk/drbd/linux/drbd.h 2004-08-31 11:46:58 UTC (rev 1520)
@@ -100,6 +100,8 @@
int al_extents;
};
+/* KEEP the order, do not delete or insert!
+ * Or change the API_VERSION, too. */
enum ret_codes {
NoError=0,
LAAlreadyInUse,
@@ -116,7 +118,8 @@
LDNoConfig,
LDMounted,
MDMounted,
- LDMDInvalid
+ LDMDInvalid,
+ LDDeviceTooLarge,
};
struct ioctl_disk_config {
Modified: trunk/drbd/linux/drbd_config.h
===================================================================
--- trunk/drbd/linux/drbd_config.h 2004-08-27 13:08:47 UTC (rev 1519)
+++ trunk/drbd/linux/drbd_config.h 2004-08-31 11:46:58 UTC (rev 1520)
@@ -28,6 +28,26 @@
//#define DBG_ALL_SYMBOLS // no static functs, improves quality of OOPS traces
+//-------------------------------
+/*
+ * FIXME
+ * This is not yet understood.
+ * Seemingly DRBD and RedHat kernel do not like each other.
+ * Maybe the issue shows with other kernels too.
+ *
+ * In any case, we default to NOT using sendpage, to be on the safe side.
+ *
+ * Out tests with kernel.org/debian/SuSE 2.6. kernel showed no problems
+ * with sendpage, and it inceases performance.
+ *
+ * If you did your own tests, or you are a vendor and really know that it
+ * does not affect your kernel, comment it out.
+ *
+ */
+#define DRBD_DISABLE_SENDPAGE
+//-------------------------------
+
+
//#define DBG_SPINLOCKS // enables MUST_HOLD macro (assertions for spinlocks)
//#define DBG_ASSERTS // drbd_assert_breakpoint() function
//#define DUMP_MD 1 // Dump metadata to syslog upon connect
Modified: trunk/scripts/Makefile
===================================================================
--- trunk/scripts/Makefile 2004-08-27 13:08:47 UTC (rev 1519)
+++ trunk/scripts/Makefile 2004-08-31 11:46:58 UTC (rev 1520)
@@ -58,7 +58,7 @@
fi
install -m 755 drbddisk $(PREFIX)/etc/ha.d/resource.d
ifeq ($(DIST),suselike)
- ln -s ../etc/init.d/drbd $(PREFIX)/sbin/rcdrbd
+ ln -sf ../etc/init.d/drbd $(PREFIX)/sbin/rcdrbd
endif
@ echo
@ echo "Don't forget to run update-rc.d or chkconfig"
Modified: trunk/scripts/adjust_drbd_config_h.sh
===================================================================
--- trunk/scripts/adjust_drbd_config_h.sh 2004-08-27 13:08:47 UTC (rev 1519)
+++ trunk/scripts/adjust_drbd_config_h.sh 2004-08-31 11:46:58 UTC (rev 1520)
@@ -77,7 +77,7 @@
test -e ./linux/drbd_config.h.orig || cp ./linux/drbd_config.h{,.orig}
-perl -i -pe "
+perl -pe "
s{.*(#define SIGHAND_HACK.*)}
{ ( $need_sighand_hack ? '' : '//' ) . \$1}e;
s{.*(#define REDHAT_HLIST_BACKPORT.*)}
@@ -87,10 +87,13 @@
s{.*(#define HAVE_FIND_NEXT_BIT.*)}
{ ( $have_find_next_bit ? '' : '//' ) . \$1}e;
s{.*(#define HAVE_MM_INLINE_H.*)}
- { ( $have_mm_inline_h ? '' : '//' ) . \$1}e;" ./linux/drbd_config.h
+ { ( $have_mm_inline_h ? '' : '//' ) . \$1}e;" \
+ < ./linux/drbd_config.h \
+ > ./linux/drbd_config.h.new
-if ! DIFF=$(diff -s -U0 ./linux/drbd_config.h{.orig,}) ; then
+if ! DIFF=$(diff -s -U0 ./linux/drbd_config.h{,.new}) ; then
+ mv ./linux/drbd_config.h{.new,}
sed -e 's/^/ /' <<___
Adjusted drbd_config.h:
@@ -98,5 +101,6 @@
___
else
+ rm ./linux/drbd_config.h.new
echo -e "\n Using unmodified drbd_config.h\n"
fi
Modified: trunk/user/drbdsetup.c
===================================================================
--- trunk/user/drbdsetup.c 2004-08-27 13:08:47 UTC (rev 1519)
+++ trunk/user/drbdsetup.c 2004-08-31 11:46:58 UTC (rev 1520)
@@ -565,7 +565,9 @@
[LDNoConfig]="You have to use the disk command first.",
[LDMounted]="Lower device is already mounted.",
[MDMounted]="Meta device is already mounted.",
- [LDMDInvalid]="Lower device / meta device / index combination invalid."
+ [LDMDInvalid]="Lower device / meta device / index combination invalid.",
+ [LDDeviceTooLarge]="Currently we only support devices up to 2TB.\n"
+ "Contact office at linbit.com, if you need more.",
};
if (err_no>ARRY_SIZE(etext) || err_no<0) err_no=0;
More information about the drbd-cvs
mailing list