forked from mirrors/linux
		
	[SCSI] libfc: release DDP context if frame_send() fails
In case frame_send() fails, make sure to let the underlying HW release the DDP context that has already been set up before calling frame_send(). Signed-off-by: Yi Zou <yi.zou@intel.com> Signed-off-by: Robert Love <robert.w.love@intel.com> Signed-off-by: James Bottomley <jbottomley@parallels.com>
This commit is contained in:
		
							parent
							
								
									83383dd11a
								
							
						
					
					
						commit
						6a716a8535
					
				
					 3 changed files with 3 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -1978,6 +1978,7 @@ static struct fc_seq *fc_exch_seq_send(struct fc_lport *lport,
 | 
			
		|||
	spin_unlock_bh(&ep->ex_lock);
 | 
			
		||||
	return sp;
 | 
			
		||||
err:
 | 
			
		||||
	fc_fcp_ddp_done(fr_fsp(fp));
 | 
			
		||||
	rc = fc_exch_done_locked(ep);
 | 
			
		||||
	spin_unlock_bh(&ep->ex_lock);
 | 
			
		||||
	if (!rc)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -312,7 +312,7 @@ void fc_fcp_ddp_setup(struct fc_fcp_pkt *fsp, u16 xid)
 | 
			
		|||
 *		       DDP related resources for a fcp_pkt
 | 
			
		||||
 * @fsp: The FCP packet that DDP had been used on
 | 
			
		||||
 */
 | 
			
		||||
static void fc_fcp_ddp_done(struct fc_fcp_pkt *fsp)
 | 
			
		||||
void fc_fcp_ddp_done(struct fc_fcp_pkt *fsp)
 | 
			
		||||
{
 | 
			
		||||
	struct fc_lport *lport;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -108,6 +108,7 @@ extern struct fc4_prov fc_rport_fcp_init;	/* FCP initiator provider */
 | 
			
		|||
 * Set up direct-data placement for this I/O request
 | 
			
		||||
 */
 | 
			
		||||
void fc_fcp_ddp_setup(struct fc_fcp_pkt *fsp, u16 xid);
 | 
			
		||||
void fc_fcp_ddp_done(struct fc_fcp_pkt *fsp);
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Module setup functions
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue