[DRBD-cvs] drbd by phil; * We do not use blk_run_queues() any mor...

drbd-user@lists.linbit.com drbd-user@lists.linbit.com
Mon, 15 Mar 2004 15:10:41 +0100 (CET)


DRBD CVS committal

Author  : phil
Module  : drbd

Dir     : drbd/drbd


Modified Files:
      Tag: rel-0_7-branch
	drbd_actlog.c drbd_compat_wrappers.h drbd_int.h drbd_req-2.4.c 


Log Message:
* We do not use blk_run_queues() any more (it is beeing removed from the
  mainline kernel). 

* Store RQ_DRBD_WRITE/RQ_DRBD_READ in rq_status 

* In case a local IO request failed, retry it remotely if on_io_error
  is "Detach".

[untested]

===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_actlog.c,v
retrieving revision 1.1.2.78
retrieving revision 1.1.2.79
diff -u -3 -r1.1.2.78 -r1.1.2.79
--- drbd_actlog.c	14 Mar 2004 19:32:47 -0000	1.1.2.78
+++ drbd_actlog.c	15 Mar 2004 14:10:36 -0000	1.1.2.79
@@ -78,8 +78,7 @@
 	bio.bi_private = &event;
 	bio.bi_end_io = drbd_md_io_complete;
 	submit_bio(rw, &bio);
-	blk_run_queues();
-	// blk_run_queue(bdev_get_queue(mdev->md_bdev)); // might be better.
+	blk_run_queue(bdev_get_queue(mdev->md_bdev));
 	wait_for_completion(&event);
 
 	return test_bit(BIO_UPTODATE, &bio.bi_flags);
@@ -323,7 +322,7 @@
 
 	if(from == -1 || to == -1) {
 		WARN("No usable activity log found.\n");
-		//TODO set all bits in the bitmap!
+
 		return;
 	}
 
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_compat_wrappers.h,v
retrieving revision 1.1.2.34
retrieving revision 1.1.2.35
diff -u -3 -r1.1.2.34 -r1.1.2.35
--- drbd_compat_wrappers.h	11 Mar 2004 13:50:16 -0000	1.1.2.34
+++ drbd_compat_wrappers.h	15 Mar 2004 14:10:36 -0000	1.1.2.35
@@ -199,7 +199,7 @@
 		     |(1 << BH_Req)
 		     |(1 << BH_Mapped) ;
 
-	req->rq_status = RQ_DRBD_NOTHING;
+	req->rq_status = RQ_DRBD_NOTHING | RQ_DRBD_WRITE;
 }
 
 static inline void
@@ -225,7 +225,7 @@
 		     |(1 << BH_Req)
 		     |(1 << BH_Mapped) ;
 
-	req->rq_status = RQ_DRBD_NOTHING;
+	req->rq_status = RQ_DRBD_NOTHING | RQ_DRBD_READ;
 }
 
 static inline struct page* drbd_bio_get_page(struct buffer_head *bh)
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_int.h,v
retrieving revision 1.58.2.138
retrieving revision 1.58.2.139
diff -u -3 -r1.58.2.138 -r1.58.2.139
--- drbd_int.h	14 Mar 2004 19:32:47 -0000	1.58.2.138
+++ drbd_int.h	15 Mar 2004 14:10:36 -0000	1.58.2.139
@@ -257,6 +257,8 @@
 #define RQ_DRBD_LOCAL     0x0020
 #define RQ_DRBD_DONE      0x0030
 #define RQ_DRBD_IN_TL     0x0040
+#define RQ_DRBD_READ      0x0100
+#define RQ_DRBD_WRITE     0x0200
 
 enum MetaDataFlags {
 	MDF_Consistent   = 1,
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_req-2.4.c,v
retrieving revision 1.33.2.59
retrieving revision 1.33.2.60
diff -u -3 -r1.33.2.59 -r1.33.2.60
--- drbd_req-2.4.c	14 Mar 2004 19:32:48 -0000	1.33.2.59
+++ drbd_req-2.4.c	15 Mar 2004 14:10:36 -0000	1.33.2.60
@@ -45,6 +45,7 @@
 
 	struct Drbd_Conf* mdev = drbd_req_get_mdev(req);
 	unsigned long flags=0;
+	int uptodate;
 
 	PARANOIA_BUG_ON(!IS_VALID_MDEV(mdev));
 	PARANOIA_BUG_ON(drbd_req_get_sector(req) != rsector);
@@ -85,10 +86,23 @@
 		drbd_set_in_sync(mdev,rsector,drbd_req_get_size(req));
 	}
 
-	/// TODO look at mdev->on_io_error
-	/// in the Detach case do not report it to the application.
-	drbd_bio_endio(req->master_bio,(req->rq_status & 0x0001));
+	uptodate = req->rq_status & 0x0001;
+	if( !uptodate && mdev->on_io_error == Detach) {
+		if(req->rq_status & RQ_DRBD_READ) {
+			drbd_read_remote(mdev,req);
+			return;
+		} else {
+			drbd_set_out_of_sync(mdev,rsector,
+					     drbd_req_get_size(req));
+			// TODO it should also be as out of sync on 
+			// the other side! But how...
+			drbd_bio_endio(req->master_bio,1);
+			uptodate = 1; 
+                        // The assumption is that we wrote it on the peer.
+		}
+	}
 
+	drbd_bio_endio(req->master_bio,uptodate);
 
 	INVALIDATE_MAGIC(req);
 	mempool_free(req,drbd_request_mempool);