[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