[DRBD-cvs] svn commit by phil - r2593 - trunk/drbd - One more fix
to the 'handle IO errors on secondary code
drbd-cvs at lists.linbit.com
drbd-cvs at lists.linbit.com
Wed Nov 15 16:26:22 CET 2006
Author: phil
Date: 2006-11-15 16:26:21 +0100 (Wed, 15 Nov 2006)
New Revision: 2593
Modified:
trunk/drbd/drbd_actlog.c
trunk/drbd/drbd_int.h
trunk/drbd/drbd_receiver.c
Log:
One more fix to the 'handle IO errors on secondary code':
* We need to update the sequence number also, if we
are going to send a NegAck.
Added tracing code to drbd_al_begin_io() and drbd_al_complete_io().
Modified: trunk/drbd/drbd_actlog.c
===================================================================
--- trunk/drbd/drbd_actlog.c 2006-11-15 14:12:37 UTC (rev 2592)
+++ trunk/drbd/drbd_actlog.c 2006-11-15 15:26:21 UTC (rev 2593)
@@ -224,6 +224,12 @@
struct update_al_work al_work;
D_ASSERT(atomic_read(&mdev->local_cnt)>0);
+
+ MTRACE(TraceTypeALExts,TraceLvlMetrics,
+ INFO("al_begin_io( sec=%llus (al_enr=%u) (rs_enr=%d) )\n",
+ sector, enr, (int)BM_SECT_TO_EXT(sector));
+ );
+
wait_event(mdev->al_wait, (al_ext = _al_get(mdev,enr)) );
if (al_ext->lc_number != enr) {
@@ -267,6 +273,11 @@
struct lc_element *extent;
unsigned long flags;
+ MTRACE(TraceTypeALExts,TraceLvlMetrics,
+ INFO("al_complete_io( sec=%llus (al_enr=%u) (rs_enr=%d) )\n",
+ sector, enr, (int)BM_SECT_TO_EXT(sector));
+ );
+
spin_lock_irqsave(&mdev->al_lock,flags);
extent = lc_find(mdev->act_log,enr);
@@ -914,8 +925,8 @@
int i, sig;
MTRACE(TraceTypeResync, TraceLvlAll,
- INFO("drbd_rs_begin_io: sector=%llus\n",
- (unsigned long long)sector);
+ INFO("drbd_rs_begin_io: sector=%llus (rs_end=%d)\n",
+ (unsigned long long)sector,enr);
);
sig = wait_event_interruptible( mdev->al_wait,
@@ -1075,8 +1086,8 @@
unsigned long flags;
MTRACE(TraceTypeResync, TraceLvlAll,
- INFO("drbd_rs_complete_io: sector=%llus\n",
- (long long)sector);
+ INFO("drbd_rs_complete_io: sector=%llus (rs_enr=%d)\n",
+ (long long)sector, enr);
);
spin_lock_irqsave(&mdev->al_lock,flags);
Modified: trunk/drbd/drbd_int.h
===================================================================
--- trunk/drbd/drbd_int.h 2006-11-15 14:12:37 UTC (rev 2592)
+++ trunk/drbd/drbd_int.h 2006-11-15 15:26:21 UTC (rev 2593)
@@ -1182,6 +1182,7 @@
TraceTypeEE = 0x00000010,
TraceTypeUnplug = 0x00000020,
TraceTypeNl = 0x00000040,
+ TraceTypeALExts = 0x00000080,
};
static inline int
Modified: trunk/drbd/drbd_receiver.c
===================================================================
--- trunk/drbd/drbd_receiver.c 2006-11-15 14:12:37 UTC (rev 2592)
+++ trunk/drbd/drbd_receiver.c 2006-11-15 15:26:21 UTC (rev 2593)
@@ -1305,6 +1305,11 @@
* or in drbd_endio_write_sec. */
if (DRBD_ratelimit(5*HZ,5))
ERR("Can not write mirrored data block to local disk.\n");
+ spin_lock(&mdev->peer_seq_lock);
+ if (mdev->peer_seq+1 == be32_to_cpu(p->seq_num))
+ mdev->peer_seq++;
+ spin_unlock(&mdev->peer_seq_lock);
+
drbd_send_ack_dp(mdev,NegAck,p);
mdev->epoch_size++; // spin lock ?
return drbd_drain_block(mdev,data_size);
More information about the drbd-cvs
mailing list