generic NVMe over Fabrics library support V2

Christoph Hellwig
2016-06-13T14:45:20Z

This patch set adds the necessary infrastructure for the NVMe over
Fabrics functionality and the NVMe over Fabrics library itself.

First we add some needed parameters to NVMe request allocation such as flags
(for reserved commands - connect and keep-alive), also support tag
allocation of a given queue ID (for connect to be executed per-queue)
and allow request to be queued at the head of the request queue (so
reconnects can pass in flight I/O).

Second, we add support for additional sysfs attributes that are needed
or useful for the Fabrics driver.

Third we add the NVMe over Fabrics related header definitions and the
Fabrics library itself which is transport independent and handles
Fabrics specific commands and variables.

Last, we add support for periodic keep-alive mechanism which is mandatory
for Fabrics.

Changes from V1:
- don't directly free host->opts on connect failure (Sagi)
- blk_mq_alloc_request_hctx improvements (Ming and me)
- keep alive should not use blk_mq_alloc_request_hctx (me)