[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#482943: linux-image-2.6.24: Device mapper not reporting no-barrier-support?



Package: linux-image-2.6.24-1-686
Version: 2.6.24-7
Severity: important
File: linux-image-2.6.24
Tags: patch


DRBD gives the error message "drbd0: local disk flush failed with status -5".
This seems to be this problem reported here by Anders Henke to LKML:

<http://groups.google.com/group/fa.linux.kernel/browse_thread/thread/3ca7a07dd9d3c54d/8c7d1e1024c215cf>

> I'm currently stuck between Kernel LVM and DRBD, as I'm using Kernel
> 2.6.24.2 with DRBD 8.2.5 on top of an LVM2 device (LV).
> 
> -LVM2/device mapper doesn't support write barriers
> -DRBD uses blkdev_issue_flush() to flush its metadata to disk.
> 
> On a no-barrier-device, DRBD should receive EOPNOTSUPP, but
> it really does receive an EIO. Promptly, DRBD gives the
> error message "drbd0: local disk flush failed with status -5".
> 
> The physical disk (in LVM speak) is a RAID1 on a 3ware 9650SE-2LP
> controller; the driver 3w-9xxx supports barriers and after moving my
> DRBD device from the LV to a single partition on the same RAID1, the
> error messages from DRBD vanished. <<

Patch can be found here:
<http://groups.google.com/group/fa.linux.kernel/attach/8c7d1e1024c215cf/ll_rw_blk-eopnotsup-2.6.24.2.patch?part=2>


-- Package-specific info:
** Version:
Linux version 2.6.24-1-686 (Debian 2.6.24-7) (dannf@debian.org) (gcc version 4.1.3 20080114 (prerelease) (Debian 4.1.2-19)) #1 SMP Thu May 8 02:16:39 UTC 2008

** Command line:
root=/dev/hda1 ro 

** Not tainted

** Kernel log:
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
drbd0: local disk flush failed with status -5
drbd0: local disk flush failed with status -5
drbd0: 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
drbd0: local disk flush failed with status -5
drbd0: local disk flush failed with status -5
drbd0: local disk flush failed with status -5
[...]

** Loaded modules:
Module                  Size  Used by
sha1_generic            2592  0 
cn                      8032  0 
ocfs2_dlmfs            21224  1 
ocfs2_dlm             178628  1 ocfs2_dlmfs
ocfs2_nodemanager     147036  5 ocfs2_dlmfs,ocfs2_dlm
configfs               25648  2 ocfs2_nodemanager
bridge                 49240  0 
tun                    10976  1 
ipv6                  240836  12 
loop                   16804  0 
parport_pc             33668  0 
parport                34280  1 parport_pc
pcspkr                  3200  0 
rtc                    13052  0 
psmouse                36464  0 
serio_raw               6660  0 
i2c_piix4               8428  0 
i2c_core               22432  1 i2c_piix4
container               4864  0 
ac                      6116  0 
button                  8432  0 
intel_agp              23412  1 
agpgart                31688  1 intel_agp
shpchp                 31028  0 
pci_hotplug            27712  1 shpchp
evdev                  11104  0 
ext3                  122920  1 
jbd                    43732  1 ext3
mbcache                 8288  1 ext3
dm_mirror              21600  0 
dm_snapshot            16964  0 
dm_mod                 55812  9 dm_mirror,dm_snapshot
ide_disk               15648  5 
ata_generic             7428  0 
libata                144624  1 ata_generic
scsi_mod              141164  1 libata
generic                 4388  0 [permanent]
floppy                 54628  0 
pcnet32                32068  0 
mii                     5312  1 pcnet32
piix                    7492  0 [permanent]
ide_core              108292  3 ide_disk,generic,piix
thermal                16028  0 
processor              36552  1 thermal
fan                     4772  0 

** PCI devices:
not available


-- System Information:
Debian Release: lenny/sid
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: i386 (i686)

Kernel: Linux 2.6.24-1-686 (SMP w/1 CPU core)
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Shell: /bin/sh linked to /bin/bash

Versions of packages linux-image-2.6.24-1-686 depends on:
ii  debconf [debconf-2.0]         1.5.22     Debian configuration management sy
ii  initramfs-tools [linux-initra 0.92a      tools for generating an initramfs
ii  module-init-tools             3.4-1      tools for managing Linux kernel mo

Versions of packages linux-image-2.6.24-1-686 recommends:
ii  libc6-i686                    2.7-10     GNU C Library: Shared libraries [i

-- debconf information excluded
--- linux-2.6.24.2-vanilla/block/ll_rw_blk.c	2008-02-11 06:51:11.000000000 +0100
+++ linux-2.6.24.2/block/ll_rw_blk.c	2008-02-28 10:38:22.392987649 +0100
@@ -2667,8 +2667,11 @@ EXPORT_SYMBOL(blk_execute_rq);
 
 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);
 }
@@ -2717,7 +2720,9 @@ int blkdev_issue_flush(struct block_devi
 		*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);

Reply to: