[DRBD-cvs] drbd by phil; [untested] code to handle IO errors on t...
drbd-user@lists.linbit.com
drbd-user@lists.linbit.com
Tue, 27 Apr 2004 16:23:23 +0200 (CEST)
DRBD CVS committal
Author : phil
Module : drbd
Dir : drbd/drbd
Modified Files:
Tag: rel-0_7-branch
drbd_actlog.c drbd_fs.c drbd_int.h
Log Message:
[untested] code to handle IO errors on the meta-data device.
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/Attic/drbd_actlog.c,v
retrieving revision 1.1.2.91
retrieving revision 1.1.2.92
diff -u -3 -r1.1.2.91 -r1.1.2.92
--- drbd_actlog.c 26 Apr 2004 16:13:46 -0000 1.1.2.91
+++ drbd_actlog.c 27 Apr 2004 14:23:18 -0000 1.1.2.92
@@ -41,15 +41,13 @@
struct buffer_head bh;
struct completion event;
- /* just to play safe: fill it with zeroes. if you want to, you
- * could define it away based on "PARANOIA" or something. */
+#ifdef PARANOIA
if (rw != WRITE) {
- /* most often this is already mapped, so don't worry
- * about performance loss */
void *b = kmap(mdev->md_io_page);
memset(b,0,PAGE_SIZE);
kunmap(mdev->md_io_page);
}
+#endif
init_completion(&event);
init_buffer(&bh, drbd_md_io_complete, &event);
bh.b_rdev = mdev->md_bdev;
@@ -73,15 +71,13 @@
struct bio_vec vec;
struct completion event;
- /* just to play safe: fill it with zeroes. if you want to, you
- * could define it away based on "PARANOIA" or something. */
+#ifdef PARANOIA
if (rw != WRITE) {
- /* most often this is already mapped, so don't worry
- * about performance loss */
void *b = kmap(mdev->md_io_page);
memset(b,0,PAGE_SIZE);
kunmap(mdev->md_io_page);
}
+#endif
bio_init(&bio);
bio.bi_io_vec = &vec;
vec.bv_page = mdev->md_io_page;
@@ -224,11 +220,6 @@
spin_unlock_irqrestore(&mdev->al_lock,flags);
}
-/*
-
-FIXME md_io might fail unnoticed!
-
-*/
STATIC void
drbd_al_write_transaction(struct Drbd_Conf *mdev,struct lc_element *updated,
unsigned int new_enr)
@@ -279,8 +270,10 @@
sector = drbd_md_ss(mdev) + MD_AL_OFFSET + mdev->al_tr_pos ;
- /* FIXME what if this fails ?? */
- drbd_md_sync_page_io(mdev,sector,WRITE);
+ if(!drbd_md_sync_page_io(mdev,sector,WRITE)) {
+ drbd_chk_io_error(mdev, 1);
+ drbd_io_error(mdev);
+ }
if( ++mdev->al_tr_pos > div_ceil(mdev->act_log->nr_elements,AL_EXTENTS_PT) ) {
mdev->al_tr_pos=0;
@@ -290,11 +283,6 @@
up(&mdev->md_io_mutex);
}
-/*
-
-FIXME md_io might fail unnoticed!
-
-*/
STATIC int drbd_al_read_tr(struct Drbd_Conf *mdev,
struct al_transaction* b,
int index)
@@ -305,8 +293,11 @@
sector = drbd_md_ss(mdev) + MD_AL_OFFSET + index;
- /* FIXME what if this fails ?? */
- drbd_md_sync_page_io(mdev,sector,READ);
+ if(!drbd_md_sync_page_io(mdev,sector,READ)) {
+ drbd_chk_io_error(mdev, 1);
+ drbd_io_error(mdev);
+ return 0;
+ }
rv = ( be32_to_cpu(b->magic) == DRBD_MAGIC );
@@ -520,9 +511,6 @@
/**
* drbd_read_bm: Read the whole bitmap from its on disk location.
-
-FIXME md_io might fail unnoticed!
-
*/
void drbd_read_bm(struct Drbd_Conf *mdev)
{
@@ -546,8 +534,12 @@
sector = drbd_md_ss(mdev) + MD_BM_OFFSET + so;
so++;
- /* FIXME what if this fails ?? */
- drbd_md_sync_page_io(mdev,sector,READ);
+ if(!drbd_md_sync_page_io(mdev,sector,READ)) {
+ drbd_chk_io_error(mdev, 1);
+ drbd_io_error(mdev);
+ break;
+ //return 0; // FIXME error propagation...
+ }
for(buf_i=0;buf_i<want;buf_i++) {
word = lel_to_cpu(buffer[buf_i]);
@@ -574,9 +566,6 @@
* ATTENTION: Based on AL_EXTENT_SIZE, although the chunk
* we write might represent more storage.
* ( actually AL_EXTENT_SIZE*EXTENTS_PER_SECTOR )
-
-FIXME md_io might fail unnoticed!
-
*/
STATIC void drbd_update_on_disk_bm(struct Drbd_Conf *mdev,unsigned int enr)
{
@@ -610,8 +599,10 @@
sector = drbd_md_ss(mdev) + MD_BM_OFFSET + enr/EXTENTS_PER_SECTOR;
- /* FIXME what if this fails ?? */
- drbd_md_sync_page_io(mdev,sector,WRITE);
+ if(!drbd_md_sync_page_io(mdev,sector,WRITE)) {
+ drbd_chk_io_error(mdev, 1);
+ drbd_io_error(mdev);
+ }
up(&mdev->md_io_mutex);
mdev->bm_writ_cnt++;
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_fs.c,v
retrieving revision 1.28.2.80
retrieving revision 1.28.2.81
diff -u -3 -r1.28.2.80 -r1.28.2.81
--- drbd_fs.c 24 Apr 2004 16:35:21 -0000 1.28.2.80
+++ drbd_fs.c 27 Apr 2004 14:23:18 -0000 1.28.2.81
@@ -338,9 +338,6 @@
bm_fill_bm(mdev->mbds_id,-1);
mdev->rs_total = drbd_get_capacity(mdev->this_bdev);
drbd_write_bm(mdev);
-
-/* FIXME whipeout on disk activity log area */
-
}
if ( !mdev->act_log ||
===================================================================
RCS file: /var/lib/cvs/drbd/drbd/drbd/drbd_int.h,v
retrieving revision 1.58.2.147
retrieving revision 1.58.2.148
diff -u -3 -r1.58.2.147 -r1.58.2.148
--- drbd_int.h 27 Apr 2004 13:49:23 -0000 1.58.2.147
+++ drbd_int.h 27 Apr 2004 14:23:18 -0000 1.58.2.148
@@ -543,7 +543,6 @@
// bitfield? enum?
/* flag bits */
#define ISSUE_BARRIER 0
-// #define ISSUE_IO_HINT 1 is now drbd_queue_work'ed
#define SEND_PING 2
#define WRITER_PRESENT 3
#define STOP_SYNC_TIMER 4