[dm-devel] Question about EMC Clariion trespass in multipath

McGreal, Martin (EHQ) MMcGreal at express-scripts.com
Thu Oct 22 20:07:24 UTC 2009


I've been told that dm multipath does not support trespassing LUNs on
Clariion, but after looking through the hardware handler for EMC
Clariion devices, I believe it does.  However, I'm confused about how it
determines when to issue the trespass command.

Since we are using RHEL 5.3, I am looking at the 2.6.18.8 version of the
hardware handler, dm-emc.c
(http://lxr.linux.no/#linux+v2.6.18.8/drivers/md/dm-emc.c).

Looking at emc_pg_init(), which, according to the documentation, is
called "when a Priority Group is selected for use, but before any I/O is
sent to it" (http://lwn.net/Articles/123134), it looks like the only way
out of this function is by either failing the path via
dm_pg_init_complete(), or issuing a switch-over command.  So either a
path is failed or a trespass occurs every time that a priority group is
selected?  What am I missing here?

Any guidance would be appreciated.

Thanks!
Martin


 192static void emc_pg_init(struct hw_handler *hwh, unsigned bypassed,
 193                        struct path *path)
 194{
 195        struct request *rq;
 196        struct request_queue *q = bdev_get_queue(path->dev->bdev);
 197
 198        /*
 199         * We can either blindly init the pg (then look at the
sense),
 200         * or we can send some commands to get the state here (then
 201         * possibly send the fo cmnd), or we can also have the
 202         * initial state passed into us and then get an update here.
 203         */
 204        if (!q) {
 205                DMINFO("emc_pg_init: no queue");
 206                goto fail_path;
 207        }
 208
 209        /* FIXME: The request should be pre-allocated. */
 210        rq = emc_trespass_get(hwh->context, path);
 211        if (!rq) {
 212                DMERR("emc_pg_init: no rq");
 213                goto fail_path;
 214        }
 215
 216        DMINFO("emc_pg_init: sending switch-over command");
 217        elv_add_request(q, rq, ELEVATOR_INSERT_FRONT, 1);
 218        return;
 219
 220fail_path:
 221        dm_pg_init_complete(path, MP_FAIL_PATH);
 222}








More information about the dm-devel mailing list