[DRBD-user] local disk flush failed with status -5

Lars Ellenberg lars.ellenberg at linbit.com
Wed Mar 19 10:20:36 CET 2008

Note: "permalinks" may not be as permanent as we would like,
direct links of old sources may well be a few messages off.


On Tue, Mar 18, 2008 at 06:58:18PM +0100, Emir Mahmutbegovic wrote:
> Hallo,
>
> I am running one two node cluster with heartbeat 2.1.3 and drbd. I made 
> update of drbd (from 8.2.4) to 8.2.5 version and since then i do find this 
> in dmesg on both nodes (node with primary drbd does not print this out):
>
> drbd1: local disk flush failed with status -5
> drbd1: local disk flush failed with status -5
> drbd0: local disk flush failed with status -5
> drbd1: local disk flush failed with status -5
> drbd1: local disk flush failed with status -5
> drbd1: local disk flush failed with status -5
> drbd2: local disk flush failed with status -5
> drbd1: local disk flush failed with status -5
> drbd1: local disk flush failed with status -5
> drbd1: local disk flush failed with status -5
> drbd1: local disk flush failed with status -5
>
> Could someone please tell me what does this error mean ?

drbd 8.0.11 (and 8.2.5) uses barriers/flushes in certain places
to be able to work reliably even on io subsystems with volatile
- but flushable - caches.

whether or not DRBD uses these features is decided by trying once, and
if that results in "sorry, I don't support that", never try again.

on the way to 2.6.24, kernel.org did change the way how barriers and
flushes are handled, but forgot to properly pass the "not supported"
status back, returning a generic "IO error" instead (the -5 above).

this was later fixed again, see below.
so please use a kernel that contains that fix,
or a kernel that does still use the old behaviour.

commit cc66b4512cae8df4ed1635483210aabf7690ec27
Author: Jens Axboe <jens.axboe at oracle.com>
Date:   Tue Mar 4 11:47:46 2008 +0100

    block: fix blkdev_issue_flush() not detecting and passing EOPNOTSUPP back
    
    This is important to eg dm, that tries to decide whether to stop using
    barriers or not.
    
    Tested as working by Anders Henke <anders.henke at 1und1.de>
    
    Signed-off-by: Jens Axboe <jens.axboe at oracle.com>

diff --git a/block/blk-barrier.c b/block/blk-barrier.c
index 6901eed..55c5f1f 100644
--- a/block/blk-barrier.c
+++ b/block/blk-barrier.c
@@ -259,8 +259,11 @@ int blk_do_ordered(struct request_queue *q, struct request **rqp)
 
 static void bio_end_empty_barrier(struct bio *bio, int err)
 {
-	if (err)
+	if (err) {
+		if (err == -EOPNOTSUPP)
+			set_bit(BIO_EOPNOTSUPP, &bio->bi_flags);
 		clear_bit(BIO_UPTODATE, &bio->bi_flags);
+	}
 
 	complete(bio->bi_private);
 }
@@ -309,7 +312,9 @@ int blkdev_issue_flush(struct block_device *bdev, sector_t *error_sector)
 		*error_sector = bio->bi_sector;
 
 	ret = 0;
-	if (!bio_flagged(bio, BIO_UPTODATE))
+	if (bio_flagged(bio, BIO_EOPNOTSUPP))
+		ret = -EOPNOTSUPP;
+	else if (!bio_flagged(bio, BIO_UPTODATE))
 		ret = -EIO;
 
 	bio_put(bio);

-- 
: Lars Ellenberg                           http://www.linbit.com :
: DRBD/HA support and consulting             sales at linbit.com :
: LINBIT Information Technologies GmbH      Tel +43-1-8178292-0  :
: Vivenotgasse 48, A-1120 Vienna/Europe     Fax +43-1-8178292-82 :
__
please use the "List-Reply" function of your email client.



More information about the drbd-user mailing list