|
@@ -250,6 +250,14 @@ bsg_map_hdr(struct bsg_device *bd, struct sg_io_v4 *hdr, fmode_t has_write_perm,
|
|
|
int ret, rw;
|
|
|
unsigned int dxfer_len;
|
|
|
void *dxferp = NULL;
|
|
|
+ struct bsg_class_device *bcd = &q->bsg_dev;
|
|
|
+
|
|
|
+ /* if the LLD has been removed then the bsg_unregister_queue will
|
|
|
+ * eventually be called and the class_dev was freed, so we can no
|
|
|
+ * longer use this request_queue. Return no such address.
|
|
|
+ */
|
|
|
+ if (!bcd->class_dev)
|
|
|
+ return ERR_PTR(-ENXIO);
|
|
|
|
|
|
dprintk("map hdr %llx/%u %llx/%u\n", (unsigned long long) hdr->dout_xferp,
|
|
|
hdr->dout_xfer_len, (unsigned long long) hdr->din_xferp,
|