return container_of ( blockdev, struct scsi_device, blockdev );
}
+/**
+ * Handle SCSI command with no backing device
+ *
+ * @v scsi SCSI device
+ * @v command SCSI command
+ * @ret rc Return status code
+ */
+int scsi_detached_command ( struct scsi_device *scsi __unused,
+ struct scsi_command *command __unused ) {
+ return -ENODEV;
+}
+
/**
* Issue SCSI command
*
struct refcnt *backend;
};
+extern int scsi_detached_command ( struct scsi_device *scsi,
+ struct scsi_command *command );
extern int init_scsidev ( struct scsi_device *scsi );
#endif /* _GPXE_SCSI_H */
return 0;
}
-static int iscsi_detached_command ( struct scsi_device *scsi __unused,
- struct scsi_command *command __unused ) {
- return -ENODEV;
-}
-
/**
* Shut down iSCSI interface
*
xfer_nullify ( &iscsi->socket );
iscsi_close_connection ( iscsi, 0 );
process_del ( &iscsi->process );
- scsi->command = iscsi_detached_command;
+ scsi->command = scsi_detached_command;
ref_put ( scsi->backend );
scsi->backend = NULL;
}