[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);