nvme-fc: require target or discovery role for fc-nvme targets
authorJames Smart <jsmart2021@gmail.com>
Fri, 5 May 2017 23:13:15 +0000 (16:13 -0700)
committerJens Axboe <axboe@fb.com>
Sat, 20 May 2017 16:11:34 +0000 (10:11 -0600)
In order to create an association, the remoteport must be
serving either a target role or a discovery role.

Signed-off-by: James Smart <james.smart@broadcom.com>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Jens Axboe <axboe@fb.com>
drivers/nvme/host/fc.c

index 70e689bf1cad286869922764ccd52f1872e92524..912d457150d58801cd1ed53ba0f35b62315dad2e 100644 (file)
@@ -2720,6 +2720,12 @@ nvme_fc_init_ctrl(struct device *dev, struct nvmf_ctrl_options *opts,
        unsigned long flags;
        int ret, idx;
 
+       if (!(rport->remoteport.port_role &
+           (FC_PORT_ROLE_NVME_DISCOVERY | FC_PORT_ROLE_NVME_TARGET))) {
+               ret = -EBADR;
+               goto out_fail;
+       }
+
        ctrl = kzalloc(sizeof(*ctrl), GFP_KERNEL);
        if (!ctrl) {
                ret = -ENOMEM;