Add (optional) arguments to dm-emc for influencing the switch-over command. --- diff/drivers/md/dm-emc.c 2005-01-12 19:02:54.000000000 +0000 +++ source/drivers/md/dm-emc.c 2005-01-12 19:18:59.000000000 +0000 @@ -137,7 +137,6 @@ unsigned char *page22; unsigned char long_trespass_pg[] = { 0, 0, 0, 0, - /* 0, 0, 0, 0x00, */ TRESPASS_PAGE, /* Page code */ 0x09, /* Page length - 2 */ h->hr ? 0x01 : 0x81, /* Trespass code + Honor reservation bit */ @@ -237,6 +236,28 @@ static int emc_ctr(struct hw_handler *hwh, unsigned argc, char **argv) { struct emc_handler *h; + unsigned hr, short_trespass; + + if (argc == 0) { + /* No arguments: use defaults */ + hr = 0; + short_trespass = 0; + } else if (argc != 2) { + DMWARN("dm-emc hwhandler: incorrect number of arguments"); + return -EINVAL; + } else { + if ((sscanf(argv[0], "%u", &short_trespass) != 1) + || (short_trespass > 1)) { + DMWARN("dm-emc: invalid trespass mode selected"); + return -EINVAL; + } + + if ((sscanf(argv[1], "%u", &hr) != 1) + || (hr > 1)) { + DMWARN("dm-emc: invalid honor reservation flag selected"); + return -EINVAL; + } + } h = alloc_emc_handler(); if (!h) @@ -244,13 +265,17 @@ memset(h, 0, sizeof(*h)); - /* FIXME: Parse [0|1] parameter to send short trespass command for - * FC series */ + hwh->context = h; - /* FIXME: Parse [0|1] parameter whether to set hr flag or not. - */ + if ((h->short_trespass = short_trespass)) + DMWARN("dm-emc: short trespass command will be send"); + else + DMWARN("dm-emc: long trespass command will be send"); - hwh->context = h; + if ((h->hr = hr)) + DMWARN("dm-emc: honor reservation bit will be set"); + else + DMWARN("dm-emc: honor reservation bit will not be set (default)"); return 0; }