[DRBD-cvs] drbd by phil; Support for 64bit sector_t on 32bit mach...

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Sun, 15 Feb 2004 15:40:16 +0100 (CET)


DRBD CVS committal

Author  : phil
Module  : drbd

Dir     : drbd/drbd


Modified Files:
      Tag: rel-0_7-branch
	drbd_actlog.c drbd_dsender.c drbd_int.h drbd_proc.c 
	drbd_receiver.c 


Log Message:
Support for 64bit sector_t on 32bit machines aka CONFIG_LBD.

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_actlog.c,v
retrieving revision 1.1.2.70
retrieving revision 1.1.2.71
diff -u -3 -r1.1.2.70 -r1.1.2.71
--- drbd_actlog.c	8 Feb 2004 12:26:14 -0000	1.1.2.70
+++ drbd_actlog.c	15 Feb 2004 14:40:10 -0000	1.1.2.71
@@ -36,7 +36,7 @@
  * this is mostly from drivers/md/md.c
  */
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
-int drbd_md_sync_page_io(drbd_dev *mdev, unsigned long sector, int rw)
+int drbd_md_sync_page_io(drbd_dev *mdev, sector_t sector, int rw)
 {
 	struct buffer_head bh;
 	struct completion event;
@@ -58,7 +58,7 @@
 	return test_bit(BH_Uptodate, &bh.b_state);
 }
 #else
-int drbd_md_sync_page_io(drbd_dev *mdev, unsigned long sector, int rw)
+int drbd_md_sync_page_io(drbd_dev *mdev, sector_t sector, int rw)
 {
 	struct bio bio;
 	struct bio_vec vec;
@@ -149,7 +149,7 @@
 
 	if (al_ext->lc_number != enr) {
 		// We have to do write an transaction to AL.
-		unsigned long evicted;
+		unsigned int evicted;
 
 		evicted = al_ext->lc_number;
 		al_ext->lc_number = enr;
@@ -512,7 +512,7 @@
 		bm_end_of_dev_case(mdev->mbds_id);
 
 	INFO("%lu KB marked out-of-sync by on disk bit-map.\n",
-	     mdev->rs_total/2);
+	     (unsigned long) mdev->rs_total>>1);
 }
 
 #define BM_WORDS_PER_EXTENT ( (AL_EXTENT_SIZE/BM_BLOCK_SIZE) / BITS_PER_LONG )
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_dsender.c,v
retrieving revision 1.1.2.74
retrieving revision 1.1.2.75
diff -u -3 -r1.1.2.74 -r1.1.2.75
--- drbd_dsender.c	11 Feb 2004 22:59:26 -0000	1.1.2.74
+++ drbd_dsender.c	15 Feb 2004 14:40:11 -0000	1.1.2.75
@@ -359,13 +359,16 @@
 int w_resync_finished(drbd_dev* mdev, struct drbd_work* w)
 {
 	unsigned long dt;
+	sector_t n;
 
 	PARANOIA_BUG_ON(w != &mdev->resync_work);
 	D_ASSERT(mdev->rs_left == 0);
 
 	dt = (jiffies - mdev->rs_start) / HZ + 1;
-	INFO("Resync done (total %lu sec; %lu K/sec)\n",
-	     dt,(mdev->rs_total/2)/dt);
+	n = mdev->rs_total>>1;
+	sector_div(n,dt);
+	INFO("Resync done (total %lu sec; %u K/sec)\n",
+	     dt,(unsigned long)n);
 
 	if (mdev->cstate == SyncTarget) {
 		mdev->gen_cnt[Flags] |= MDF_Consistent;
@@ -580,7 +583,8 @@
 	mdev->rs_mark_time=mdev->rs_start;
 
 	INFO("Resync started as %s (need to sync %lu KB).\n",
-	     side == SyncTarget ? "target" : "source", mdev->rs_left/2);
+	     side == SyncTarget ? "target" : "source", 
+	     (unsigned long) mdev->rs_left>>1);
 
 	PARANOIA_BUG_ON(!list_empty(&mdev->resync_work.list));
 	PARANOIA_BUG_ON(mdev->resync_work.cb != w_resync_inactive);
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_int.h,v
retrieving revision 1.58.2.124
retrieving revision 1.58.2.125
diff -u -3 -r1.58.2.124 -r1.58.2.125
--- drbd_int.h	12 Feb 2004 18:27:06 -0000	1.58.2.124
+++ drbd_int.h	15 Feb 2004 14:40:11 -0000	1.58.2.125
@@ -819,7 +819,7 @@
 extern void drbd_alter_sg(drbd_dev *mdev, int ng);
 extern void drbd_start_resync(drbd_dev *mdev, Drbd_CState side);
 // maybe rather drbd_main.c ?
-extern int drbd_md_sync_page_io(drbd_dev *mdev, unsigned long sector, int rw);
+extern int drbd_md_sync_page_io(drbd_dev *mdev, sector_t sector, int rw);
 // worker callbacks
 extern int w_e_end_data_req      (drbd_dev *mdev, struct drbd_work *w);
 extern int w_e_end_rsdata_req    (drbd_dev *mdev, struct drbd_work *w);
@@ -1122,6 +1122,14 @@
 }
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)
+# define sector_div(n, b)( \
+{ \
+	int _res; \
+	_res = (n) % (b); \
+	(n) /= (b); \
+	_res; \
+} \
+)
 # if (BITS_PER_LONG > 32)
 static inline unsigned long hweight64(__u64 w)
 {
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_proc.c,v
retrieving revision 1.8.2.20
retrieving revision 1.8.2.21
diff -u -3 -r1.8.2.20 -r1.8.2.21
--- drbd_proc.c	12 Feb 2004 18:27:06 -0000	1.8.2.20
+++ drbd_proc.c	15 Feb 2004 14:40:11 -0000	1.8.2.21
@@ -56,8 +56,11 @@
 {
 	int sz = 0;
 	unsigned long res , db, dt, dbdt, rt;
+	sector_t n;
 
-	res = (mdev->rs_left/2048)*1000/(mdev->rs_total/2048 + 1);
+	n = (mdev->rs_left>>11)*1000;
+	sector_div(n,((mdev->rs_total>>11) + 1));
+	res = n;
 	{
 		int i, y = res/50, x = 20-y;
 		sz += sprintf(buf + sz, "\t[");
@@ -72,9 +75,12 @@
 	sz+=sprintf(buf+sz,"sync'ed:%3lu.%lu%% ", res / 10, res % 10);
 	if (mdev->rs_total > 0x100000L) /* if more than 1 GB display in MB */
 		sz+=sprintf(buf+sz,"(%lu/%lu)M\n\t",
-			mdev->rs_left/2048L, mdev->rs_total/2048L);
+			    (unsigned long) mdev->rs_left>>11, 
+			    (unsigned long) mdev->rs_total>>11);
 	else
-		sz+=sprintf(buf+sz,"(%lu/%lu)K\n\t", mdev->rs_left/2, mdev->rs_total/2);
+		sz+=sprintf(buf+sz,"(%lu/%lu)K\n\t", 
+			    (unsigned long) mdev->rs_left>>1, 
+			    (unsigned long) mdev->rs_total>>1);
 
 	/* see drivers/md/md.c
 	 * We do not want to overflow, so the order of operands and
@@ -87,8 +93,10 @@
 	 */
 	dt = (jiffies - mdev->rs_mark_time) / HZ;
 	if (!dt) dt++;
-	db = (mdev->rs_mark_left - mdev->rs_left)/2;
-	rt = (dt * ((mdev->rs_left/2) / (db/100+1)))/100; /* seconds */
+	db = (mdev->rs_mark_left - mdev->rs_left)>>1;
+	n = mdev->rs_left>>1;
+	sector_div(n,(db/100+1));
+	rt = ( dt * (unsigned long) n ) / 100; /* seconds */
 
 	sz += sprintf(buf + sz, "finish: %lu:%02lu:%02lu",
 		rt / 3600, (rt % 3600) / 60, rt % 60);
@@ -104,7 +112,7 @@
 	/* mean speed since syncer started */
 	dt = (jiffies - mdev->rs_start) / HZ;
 	if (!dt) dt++;
-	db = (mdev->rs_total - mdev->rs_left)/2;
+	db = (mdev->rs_total - mdev->rs_left)>>1;
 	if ((dbdt=db/dt) > 1000)
 		sz += sprintf(buf + sz, " (%ld,%03ld)",
 			dbdt/1000,dbdt % 1000);
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_receiver.c,v
retrieving revision 1.97.2.110
retrieving revision 1.97.2.111
diff -u -3 -r1.97.2.110 -r1.97.2.111
--- drbd_receiver.c	12 Feb 2004 18:27:06 -0000	1.97.2.110
+++ drbd_receiver.c	15 Feb 2004 14:40:11 -0000	1.97.2.111
@@ -888,7 +888,7 @@
 	Drbd_Data_Packet *p = (Drbd_Data_Packet*)h;
 
 	static int (*funcs[])(struct Drbd_Conf* , struct Pending_read*,
-		      unsigned long,int) = {
+			      sector_t,int) = {
 			      [Application]  = recv_dless_read,
 			      [Resync]       = recv_resync_read,
 			      [AppAndResync] = recv_both_read