diff options
author | Alexander Motin <mav@FreeBSD.org> | 2013-06-12 12:51:43 +0000 |
---|---|---|
committer | Alexander Motin <mav@FreeBSD.org> | 2013-06-12 12:51:43 +0000 |
commit | ce4bc82d197d8c3b7ff7f4cae17c82ce6d490227 (patch) | |
tree | c970f0c68e475aece32cf8fed5bfd40ed584d038 /sys/dev/cfi | |
parent | 9e4062edd39bdfaa399d0ebbc86648753e0e47ca (diff) | |
download | src-ce4bc82d197d8c3b7ff7f4cae17c82ce6d490227.tar.gz src-ce4bc82d197d8c3b7ff7f4cae17c82ce6d490227.zip |
Use direct custom implementations instead of g_handleattr() for CFI and NAND
d_getattr(). Since these drivers use disk(9) KPI and not directly GEOM, use
of that function means KPI layering violation, causing extra g_io_deliver()
call for the request.
Notes
Notes:
svn path=/head/; revision=251651
Diffstat (limited to 'sys/dev/cfi')
-rw-r--r-- | sys/dev/cfi/cfi_disk.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/sys/dev/cfi/cfi_disk.c b/sys/dev/cfi/cfi_disk.c index 723d1aeeff75..f5bcb1b67fad 100644 --- a/sys/dev/cfi/cfi_disk.c +++ b/sys/dev/cfi/cfi_disk.c @@ -292,14 +292,13 @@ cfi_disk_getattr(struct bio *bp) sc = dsc->parent; dev = sc->sc_dev; - do { - if (g_handleattr(bp, "CFI::device", &dev, sizeof(device_t))) - break; - - return (ERESTART); - } while(0); - - return (EJUSTRETURN); + if (strcmp(bp->bio_attribute, "CFI::device") == 0) { + if (bp->bio_length != sizeof(dev)) + return (EFAULT); + bcopy(&dev, bp->bio_data, sizeof(dev)); + } else + return (-1); + return (0); } |