TRACE(TRACE_DEBUG | TRACE_SCSI, "%s", "Sending RELEASE req to "
"SCSI mid-level");
rc = scsi_execute(scsi_dev, cdb, SCST_DATA_NONE, NULL, 0,
- sense, SCST_DEFAULT_TIMEOUT, 0, GFP_KERNEL);
+ sense, SCST_DEFAULT_TIMEOUT, 0, 0);
TRACE_DBG("MODE_SENSE done: %x", rc);
if (scsi_status_is_good(rc)) {
TRACE(TRACE_SCSI, "%s", "Doing internal MODE_SENSE");
res = scsi_execute(dev->scsi_dev, cmd, SCST_DATA_READ, buffer,
sizeof(buffer), sense_buffer, SCST_DEFAULT_TIMEOUT,
- 0, GFP_KERNEL);
+ 0, 0);
TRACE_DBG("MODE_SENSE done: %x", res);
return SCST_CONTEXT_DIRECT;
}
+static inline bool scst_is_context_gfp_atomic(void)
+{
+ return irqs_disabled() || in_atomic() || in_interrupt();
+}
+
extern unsigned long scst_max_cmd_mem;
extern mempool_t *scst_mgmt_mempool;
}
if (cmd->status == SAM_STAT_CHECK_CONDITION)
- scst_alloc_set_sense(cmd, in_irq(), rq_sense, rq_sense_len);
+ scst_alloc_set_sense(cmd, scst_is_context_gfp_atomic(),
+ rq_sense, rq_sense_len);
TRACE(TRACE_SCSI, "result=%x, cmd->status=%x, resid=%d, "
"cmd->msg_status=%x, cmd->host_status=%x, "