[DRBD-cvs] r1526 - in trunk: drbd drbd/linux user

svn at svn.drbd.org svn at svn.drbd.org
Wed Sep 1 20:35:03 CEST 2004


Author: phil
Date: 2004-09-01 20:35:00 +0200 (Wed, 01 Sep 2004)
New Revision: 1526

Modified:
   trunk/drbd/drbd_actlog.c
   trunk/drbd/drbd_bitmap.c
   trunk/drbd/drbd_compat_wrappers.h
   trunk/drbd/drbd_fs.c
   trunk/drbd/drbd_int.h
   trunk/drbd/drbd_receiver.c
   trunk/drbd/linux/drbd.h
   trunk/drbd/linux/drbd_config.h
   trunk/user/drbdsetup.c
Log:
I tried to rise drbd's device limit to 3.998TB. Currently 
untested; needs testing. 


Modified: trunk/drbd/drbd_actlog.c
===================================================================
--- trunk/drbd/drbd_actlog.c	2004-09-01 11:58:53 UTC (rev 1525)
+++ trunk/drbd/drbd_actlog.c	2004-09-01 18:35:00 UTC (rev 1526)
@@ -504,9 +504,10 @@
  */
 void drbd_al_apply_to_bm(struct Drbd_Conf *mdev)
 {
-	int i;
 	unsigned int enr;
 	unsigned long add=0;
+	char ppb[10];
+	int i;
 
 	wait_event(mdev->al_wait, lc_try_lock(mdev->act_log));
 
@@ -519,7 +520,8 @@
 	lc_unlock(mdev->act_log);
 	wake_up(&mdev->al_wait);
 
-	INFO("Marked additional %lu KB as out-of-sync based on AL.\n",add >> 1);
+	INFO("Marked additional %s as out-of-sync based on AL.\n",
+	     ppsize(ppb,add >> 1));
 }
 
 static inline int _try_lc_del(struct Drbd_Conf *mdev,struct lc_element *al_ext)

Modified: trunk/drbd/drbd_bitmap.c
===================================================================
--- trunk/drbd/drbd_bitmap.c	2004-09-01 11:58:53 UTC (rev 1525)
+++ trunk/drbd/drbd_bitmap.c	2004-09-01 18:35:00 UTC (rev 1526)
@@ -576,6 +576,7 @@
 	struct drbd_bitmap *b = mdev->bitmap;
 	sector_t sector;
 	int bm_words, num_sectors;
+	char ppb[10];
 
 	MUST_BE_LOCKED();
 
@@ -587,8 +588,8 @@
 		drbd_bm_read_sect(mdev,sector);
 	}
 
-	INFO("%lu KB marked out-of-sync by on disk bit-map.\n",
-	      drbd_bm_total_weight(mdev) << (BM_BLOCK_SIZE_B-10) );
+	INFO("%s marked out-of-sync by on disk bit-map.\n",
+	     ppsize(ppb,drbd_bm_total_weight(mdev) << (BM_BLOCK_SIZE_B-10)) );
 }
 
 /**

Modified: trunk/drbd/drbd_compat_wrappers.h
===================================================================
--- trunk/drbd/drbd_compat_wrappers.h	2004-09-01 11:58:53 UTC (rev 1525)
+++ trunk/drbd/drbd_compat_wrappers.h	2004-09-01 18:35:00 UTC (rev 1526)
@@ -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-09-01 11:58:53 UTC (rev 1525)
+++ trunk/drbd/drbd_fs.c	2004-09-01 18:35:00 UTC (rev 1526)
@@ -88,6 +88,21 @@
 	return rv;
 }
 
+char* ppsize(char* buf, size_t size) 
+{
+	// Needs 9 bytes at max.
+	static char units[] = { 'K','M','G','T' };
+	int base = 0;
+	while (size >= 10000 ) {
+		size = size >> 10;
+		base++;
+	}
+	sprintf(buf,"%d %cB",size,units[base]);
+
+	return buf;
+}
+
+
 /* Returns 1 if there is a disk-less node, 0 if both nodes have a disk. */
 /*
  * THINK do we want the size to be KB or sectors ?
@@ -104,12 +119,13 @@
  */
 STATIC int do_determin_dev_size(struct Drbd_Conf* mdev)
 {
-	unsigned long p_size = mdev->p_size;  // partner's disk size.
-	unsigned long la_size = mdev->la_size; // last agreed size.
-	unsigned long m_size; // my size
-	unsigned long u_size = mdev->lo_usize; // size requested by user.
-	unsigned long size=0;
+	sector_t p_size = mdev->p_size;  // partner's disk size.
+	sector_t la_size = mdev->la_size; // last agreed size.
+	sector_t m_size; // my size
+	sector_t u_size = mdev->lo_usize; // size requested by user.
+	sector_t size=0;
 	int rv;
+	char ppb[10];
 
 	m_size = drbd_get_capacity(mdev->backing_bdev)>>1;
 
@@ -120,7 +136,7 @@
 
 	if(p_size && m_size) {
 		rv=0;
-		size=min_t(unsigned long,p_size,m_size);
+		size=min_t(sector_t,p_size,m_size);
 	} else {
 		rv=1;
 		if(la_size) {
@@ -140,7 +156,7 @@
 	if(u_size) {
 		if(u_size > size) {
 			ERR("Requested disk size is too big (%lu > %lu)\n",
-			    u_size, size);
+			    (unsigned long)u_size, (unsigned long)size);
 		} else {
 			size = u_size;
 		}
@@ -151,12 +167,14 @@
 		err = drbd_bm_resize(mdev,size<<1); // wants sectors
 		if (unlikely(err)) {
 			ERR("BM resizing failed. "
-			    "Leaving size unchanged at size = %lu KB\n", size);
+			    "Leaving size unchanged at size = %lu KB\n", 
+			    (unsigned long)size);
 		} else {
 			// racy, see comments above.
 			drbd_set_my_capacity(mdev,size<<1);
 			mdev->la_size = size;
-			INFO("size = %lu KB\n",size);
+			INFO("size = %s (%lu KB)\n",ppsize(ppb,size),
+			     (unsigned long)size);
 		}
 	}
 

Modified: trunk/drbd/drbd_int.h
===================================================================
--- trunk/drbd/drbd_int.h	2004-09-01 11:58:53 UTC (rev 1525)
+++ trunk/drbd/drbd_int.h	2004-09-01 18:35:00 UTC (rev 1526)
@@ -77,12 +77,6 @@
 # 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'
@@ -751,13 +745,13 @@
 	struct file *lo_file;
 	struct file *md_file;
 	int md_index;
-	unsigned long lo_usize;   /* user provided size */
-	unsigned long p_size;     /* partner's disk size */
+	sector_t lo_usize;   /* user provided size */
+	sector_t p_size;     /* partner's disk size */
 	Drbd_State state;
 	volatile Drbd_CState cstate;
 	wait_queue_head_t cstate_wait; // TODO Rename into "misc_wait". 
 	Drbd_State o_state;
-	unsigned long int la_size; // last agreed disk size
+	sector_t la_size; // last agreed disk size
 	unsigned int send_cnt;
 	unsigned int recv_cnt;
 	unsigned int read_cnt;
@@ -967,6 +961,9 @@
 #define BM_EXT_PER_SECT	    ( 512 / BM_BYTES_PER_EXTENT )        //   4
  */
 
+#define DRBD_MAX_SECTORS \
+          ( (MD_RESERVED_SIZE*2 - MD_BM_OFFSET) * (1<<BM_EXT_SIZE_B-9) )
+
 extern int  drbd_bm_init      (drbd_dev *mdev);
 extern int  drbd_bm_resize    (drbd_dev *mdev, sector_t sectors);
 extern void drbd_bm_cleanup   (drbd_dev *mdev);
@@ -1021,6 +1018,7 @@
 extern int drbd_read_remote(drbd_dev *mdev, drbd_request_t *req);
 
 // drbd_fs.c
+extern char* ppsize(char* buf, size_t size);
 extern int drbd_determin_dev_size(drbd_dev*);
 extern int drbd_set_state(drbd_dev *mdev,Drbd_State newstate);
 extern int drbd_ioctl(struct inode *inode, struct file *file,

Modified: trunk/drbd/drbd_receiver.c
===================================================================
--- trunk/drbd/drbd_receiver.c	2004-09-01 11:58:53 UTC (rev 1525)
+++ trunk/drbd/drbd_receiver.c	2004-09-01 18:35:00 UTC (rev 1526)
@@ -1338,7 +1338,7 @@
 	Drbd_Parameter_Packet *p = (Drbd_Parameter_Packet*)h;
 	int consider_sync;
 	int oo_state;
-	unsigned long p_size;
+	sector_t p_size;
 
 	if (h->length != (sizeof(*p)-sizeof(*h))) {
 		ERR("Incompatible packet size of Parameter packet!\n");
@@ -1444,7 +1444,8 @@
 
 	if( mdev->lo_usize != be64_to_cpu(p->u_size) ) {
 		mdev->lo_usize = be64_to_cpu(p->u_size);
-		INFO("Peer sets u_size to %ld KB\n",mdev->lo_usize);
+		INFO("Peer sets u_size to %lu KB\n",
+		     (unsigned long)mdev->lo_usize);
 	}
 
 	if(!p_size) {

Modified: trunk/drbd/linux/drbd.h
===================================================================
--- trunk/drbd/linux/drbd.h	2004-09-01 11:58:53 UTC (rev 1525)
+++ trunk/drbd/linux/drbd.h	2004-09-01 18:35:00 UTC (rev 1526)
@@ -64,7 +64,7 @@
 
 struct disk_config {
 	IN int      lower_device;
-	IN unsigned int disk_size;
+	IN __u64    disk_size;
 	IN enum io_error_handler on_io_error;
 	IN int      meta_device;
 	IN int      meta_index;
@@ -194,7 +194,7 @@
 	struct syncer_config  sconf;
 	OUT int               lower_device_major;
 	OUT int               lower_device_minor;
-	OUT unsigned int      disk_size_user;
+	OUT __u64             disk_size_user;
 	OUT enum io_error_handler on_io_error;
 	OUT int               meta_device_major;
 	OUT int               meta_device_minor;

Modified: trunk/drbd/linux/drbd_config.h
===================================================================
--- trunk/drbd/linux/drbd_config.h	2004-09-01 11:58:53 UTC (rev 1525)
+++ trunk/drbd/linux/drbd_config.h	2004-09-01 18:35:00 UTC (rev 1526)
@@ -23,7 +23,7 @@
 extern const char * drbd_buildtag(void);
 
 #define REL_VERSION "0.7.3"
-#define API_VERSION 75
+#define API_VERSION 76
 #define PRO_VERSION 74
 
 //#define DBG_ALL_SYMBOLS // no static functs, improves quality of OOPS traces

Modified: trunk/user/drbdsetup.c
===================================================================
--- trunk/user/drbdsetup.c	2004-09-01 11:58:53 UTC (rev 1525)
+++ trunk/user/drbdsetup.c	2004-09-01 18:35:00 UTC (rev 1526)
@@ -566,7 +566,7 @@
     [LDMounted]="Lower device is already mounted.",
     [MDMounted]="Meta device is already mounted.",
     [LDMDInvalid]="Lower device / meta device / index combination invalid.",
-    [LDDeviceTooLarge]="Currently we only support devices up to 2TB.\n"
+    [LDDeviceTooLarge]="Currently we only support devices up to 3.998TB.\n"
                        "Contact office at linbit.com, if you need more.",
   };
 



More information about the drbd-cvs mailing list