From: Mike Christie <[EMAIL PROTECTED]>
fc_eh_device_reset is not called with a spin_lock and is called
from the scsi eh process, so we do not have to use GFP_ATOMIC.
Signed-off-by: Mike Christie <[EMAIL PROTECTED]>
---
drivers/scsi/libfc/fc_fcp.c | 9 +++++----
1 files changed, 5 insertions(+), 4 deletions(-)
diff --git a/drivers/scsi/libfc/fc_fcp.c b/drivers/scsi/libfc/fc_fcp.c
index eb37a66..95605a1 100644
--- a/drivers/scsi/libfc/fc_fcp.c
+++ b/drivers/scsi/libfc/fc_fcp.c
@@ -185,17 +185,18 @@ static void fc_fcp_srr_error(struct fc_fcp_pkt *, struct
fc_frame *);
/**
* fc_fcp_pkt_alloc - allocation routine for scsi_pkt packet
* @lp: fc lport struct
+ * @gfp: gfp flags for allocation
*
* This is used by upper layer scsi driver.
* Return Value : scsi_pkt structure or null on allocation failure.
* Context : call from process context. no locking required.
*/
-static struct fc_fcp_pkt *fc_fcp_pkt_alloc(struct fc_lport *lp)
+static struct fc_fcp_pkt *fc_fcp_pkt_alloc(struct fc_lport *lp, gfp_t gfp)
{
struct fc_fcp_internal *si = fc_get_scsi_internal(lp);
struct fc_fcp_pkt *sp;
- sp = mempool_alloc(si->scsi_pkt_pool, GFP_ATOMIC);
+ sp = mempool_alloc(si->scsi_pkt_pool, gfp);
if (sp) {
memset(sp, 0, sizeof(*sp));
sp->lp = lp;
@@ -1703,7 +1704,7 @@ int fc_queuecommand(struct scsi_cmnd *sc_cmd, void
(*done)(struct scsi_cmnd *))
goto out;
}
- sp = fc_fcp_pkt_alloc(lp);
+ sp = fc_fcp_pkt_alloc(lp, GFP_ATOMIC);
if (sp == NULL) {
rc = SCSI_MLQUEUE_HOST_BUSY;
goto out;
@@ -1955,7 +1956,7 @@ int fc_eh_device_reset(struct scsi_cmnd *sc_cmd)
if (lp->state != LPORT_ST_READY)
return rc;
- sp = fc_fcp_pkt_alloc(lp);
+ sp = fc_fcp_pkt_alloc(lp, GFP_NOIO);
if (sp == NULL) {
FC_DBG("could not allocate scsi_pkt\n");
sc_cmd->result = DID_NO_CONNECT << 16;
--
1.5.4.1
_______________________________________________
devel mailing list
[email protected]
http://www.open-fcoe.org/mailman/listinfo/devel