[DRBD-cvs] drbd by phil; * Fixed another annoying special case wi...
drbd-user@lists.linbit.com
drbd-user@lists.linbit.com
Sun, 7 Mar 2004 21:17:23 +0100 (CET)
DRBD CVS committal
Author : phil
Module : drbd
Dir : drbd/drbd
Modified Files:
Tag: rel-0_7-branch
drbd_dsender.c drbd_int.h drbd_main.c
Log Message:
* Fixed another annoying special case with the resync code.
[Triggered if accidentially w_make_resync_request() just
stopped one of its runs, when all requests for this resync
process were issued. -> But since it has not yet seen the
MBDS_DONE we run into the ASSERTION in w_update_odbm() ]
* Removed gs_snr. Was unused.
* Increased the time drbdsetup may take. Reading AL and BitMap
can take some time on real systems...
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_dsender.c,v
retrieving revision 1.1.2.82
retrieving revision 1.1.2.83
diff -u -3 -r1.1.2.82 -r1.1.2.83
--- drbd_dsender.c 7 Mar 2004 17:57:25 -0000 1.1.2.82
+++ drbd_dsender.c 7 Mar 2004 20:17:18 -0000 1.1.2.83
@@ -456,7 +456,12 @@
}
}
- requeue:
+ requeue:
+ if(bm_is_rs_done(mdev->mbds_id)) {
+ mdev->resync_work.cb = w_resync_inactive;
+ return 1;
+ }
+
mdev->resync_timer.expires = jiffies + SLEEP_TIME;
add_timer(&mdev->resync_timer);
return 1;
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_int.h,v
retrieving revision 1.58.2.134
retrieving revision 1.58.2.135
diff -u -3 -r1.58.2.134 -r1.58.2.135
--- drbd_int.h 7 Mar 2004 11:49:23 -0000 1.58.2.134
+++ drbd_int.h 7 Mar 2004 20:17:18 -0000 1.58.2.135
@@ -571,7 +571,6 @@
unsigned long size;
unsigned long* bm;
unsigned long gs_bitnr;
- unsigned long gs_snr;
spinlock_t bm_lock;
};
@@ -810,6 +809,8 @@
extern int bm_get_bit(struct BitMap* sbm, sector_t sector, int size);
extern int bm_count_sectors(struct BitMap* sbm, unsigned long enr);
extern int bm_end_of_dev_case(struct BitMap* sbm);
+extern int bm_is_rs_done(struct BitMap* sbm);
+
extern drbd_dev *drbd_conf;
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_main.c,v
retrieving revision 1.73.2.141
retrieving revision 1.73.2.142
diff -u -3 -r1.73.2.141 -r1.73.2.142
--- drbd_main.c 7 Mar 2004 10:51:57 -0000 1.73.2.141
+++ drbd_main.c 7 Mar 2004 20:17:18 -0000 1.73.2.142
@@ -1879,6 +1879,25 @@
return ret;
}
+int bm_is_rs_done(struct BitMap* sbm)
+{
+ int rv=0;
+
+ spin_lock(&sbm->bm_lock);
+
+ if( (sbm->gs_bitnr<<BM_SS) + ((1<<BM_SS)-1) > sbm->dev_size<<1) {
+ int ns = sbm->dev_size % (1<<(BM_BLOCK_SIZE_B-10));
+ if(!ns) {
+ sbm->gs_bitnr = -1;
+ rv=1;
+ }
+ }
+
+ spin_unlock(&sbm->bm_lock);
+
+ return rv;
+}
+
void bm_reset(struct BitMap* sbm)
{
spin_lock(&sbm->bm_lock);