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) ([EMAIL PROTECTED]) (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);