[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