The patch titled Subject: aoe: provide ATA identify device content to user on request has been added to the -mm tree. Its filename is aoe-provide-ata-identify-device-content-to-user-on-request.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/SubmitChecklist when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Ed Cashin <ecashin@xxxxxxxxxx> Subject: aoe: provide ATA identify device content to user on request Make the aoe driver follow expected behavior when the user uses ioctl to get the ATA device identify information. Signed-off-by: Ed Cashin <ecashin@xxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- drivers/block/aoe/aoe.h | 1 + drivers/block/aoe/aoeblk.c | 30 ++++++++++++++++++++++++++++++ drivers/block/aoe/aoecmd.c | 16 ++++++++++++++++ 3 files changed, 47 insertions(+) diff -puN drivers/block/aoe/aoe.h~aoe-provide-ata-identify-device-content-to-user-on-request drivers/block/aoe/aoe.h --- a/drivers/block/aoe/aoe.h~aoe-provide-ata-identify-device-content-to-user-on-request +++ a/drivers/block/aoe/aoe.h @@ -169,6 +169,7 @@ struct aoedev { struct aoetgt *htgt; /* target needing rexmit assistance */ ulong ntargets; ulong kicked; + char ident[512]; }; /* kthread tracking */ diff -puN drivers/block/aoe/aoeblk.c~aoe-provide-ata-identify-device-content-to-user-on-request drivers/block/aoe/aoeblk.c --- a/drivers/block/aoe/aoeblk.c~aoe-provide-ata-identify-device-content-to-user-on-request +++ a/drivers/block/aoe/aoeblk.c @@ -17,6 +17,7 @@ #include <linux/mutex.h> #include <linux/export.h> #include <linux/moduleparam.h> +#include <scsi/sg.h> #include "aoe.h" static DEFINE_MUTEX(aoeblk_mutex); @@ -212,9 +213,38 @@ aoeblk_getgeo(struct block_device *bdev, return 0; } +static int +aoeblk_ioctl(struct block_device *bdev, fmode_t mode, uint cmd, ulong arg) +{ + struct aoedev *d; + + if (!arg) + return -EINVAL; + + d = bdev->bd_disk->private_data; + if ((d->flags & DEVFL_UP) == 0) { + pr_err("aoe: disk not up\n"); + return -ENODEV; + } + + if (cmd == HDIO_GET_IDENTITY) { + if (!copy_to_user((void __user *) arg, &d->ident, + sizeof(d->ident))) + return 0; + return -EFAULT; + } + + /* udev calls scsi_id, which uses SG_IO, resulting in noise */ + if (cmd != SG_IO) + pr_info("aoe: unknown ioctl 0x%x\n", cmd); + + return -ENOTTY; +} + static const struct block_device_operations aoe_bdops = { .open = aoeblk_open, .release = aoeblk_release, + .ioctl = aoeblk_ioctl, .getgeo = aoeblk_getgeo, .owner = THIS_MODULE, }; diff -puN drivers/block/aoe/aoecmd.c~aoe-provide-ata-identify-device-content-to-user-on-request drivers/block/aoe/aoecmd.c --- a/drivers/block/aoe/aoecmd.c~aoe-provide-ata-identify-device-content-to-user-on-request +++ a/drivers/block/aoe/aoecmd.c @@ -799,6 +799,17 @@ aoecmd_sleepwork(struct work_struct *wor } static void +ata_ident_fixstring(u16 *id, int ns) +{ + u16 s; + + while (ns-- > 0) { + s = *id; + *id++ = s >> 8 | s << 8; + } +} + +static void ataid_complete(struct aoedev *d, struct aoetgt *t, unsigned char *id) { u64 ssize; @@ -833,6 +844,11 @@ ataid_complete(struct aoedev *d, struct d->geo.sectors = get_unaligned_le16(&id[56 << 1]); } + ata_ident_fixstring((u16 *) &id[10<<1], 10); /* serial */ + ata_ident_fixstring((u16 *) &id[23<<1], 4); /* firmware */ + ata_ident_fixstring((u16 *) &id[27<<1], 20); /* model */ + memcpy(d->ident, id, sizeof(d->ident)); + if (d->ssize != ssize) printk(KERN_INFO "aoe: %pm e%ld.%d v%04x has %llu sectors\n", _ Patches currently in -mm which might be from ecashin@xxxxxxxxxx are linux-compilerh-add-__must_hold-macro-for-functions-called-with-a-lock-held.patch documentation-sparsetxt-document-context-annotations-for-lock-checking.patch aoe-describe-the-behavior-of-the-err-character-device.patch aoe-print-warning-regarding-a-common-reason-for-dropped-transmits.patch aoe-print-warning-regarding-a-common-reason-for-dropped-transmits-v2.patch aoe-print-warning-regarding-a-common-reason-for-dropped-transmits-fix.patch aoe-update-cap-on-outstanding-commands-based-on-config-query-response.patch aoe-support-the-forgetting-flushing-of-a-user-specified-aoe-target.patch aoe-support-larger-i-o-requests-via-aoe_maxsectors-module-param.patch aoe-payload-sysfs-file-exports-per-aoe-command-data-transfer-size.patch aoe-cleanup-remove-unused-ata_scnt-function.patch aoe-whitespace-cleanup.patch aoe-update-driver-internal-version-number-to-60.patch aoe-avoid-running-request-handler-on-plugged-queue.patch aoe-provide-ata-identify-device-content-to-user-on-request.patch aoe-improve-network-congestion-handling.patch aoe-err-device-include-mac-addresses-for-unexpected-responses.patch aoe-manipulate-aoedev-network-stats-under-lock.patch aoe-use-high-resolution-rtts-with-fallback-to-low-res.patch aoe-commands-in-retransmit-queue-use-new-destination-on-failure.patch aoe-update-driver-internal-version-to-64.patch -- To unsubscribe from this list: send the line "unsubscribe mm-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html