if (cp->segments == -2) sym_set_cam_status(cmd, CAM_RESRC_UNAVAIL); else sym_set_cam_status(cmd, CAM_REQ_TOO_BIG); 
sym_set_cam_status(cmd, DID_ERROR); 
int sym_setup_data_and_start(struct sym_hcb *np, struct scsi_cmnd *cmd, struct sym_ccb *cp){	int dir;	struct sym_tcb *tp = &np->target[cp->target];	struct sym_lcb *lp = sym_lp(tp, cp->lun);	/*	 *  Build the CDB.	 */	if (sym_setup_cdb(np, cmd, cp))		goto out_abort;	/*	 *  No direction means no data.	 */	dir = cmd->sc_data_direction;	if (dir != DMA_NONE) {		cp->segments = sym_scatter(np, cp, cmd);		if (cp->segments < 0) {			if (cp->segments == -2)				sym_set_cam_status(cmd, CAM_RESRC_UNAVAIL);			else				sym_set_cam_status(cmd, CAM_REQ_TOO_BIG);			goto out_abort;		}	} else {		cp->data_len = 0;		cp->segments = 0;	}	/*	 *  Set data pointers.	 */	sym_setup_data_pointers(np, cp, dir);	/*	 *  When `#ifed 1', the code below makes the driver 	 *  panic on the first attempt to write to a SCSI device.	 *  It is the first test we want to do after a driver 	 *  change that does not seem obviously safe. :)	 */#if 0	switch (cp->cdb_buf[0]) {	case 0x0A: case 0x2A: case 0xAA:		panic("XXXXXXXXXXXXX WRITE NOT YET ALLOWED XXXXXXXXXXXXXX\n");		break;	default:		break;	}#endif	/*	 *	activate this job.	 */	if (lp)		sym_start_next_ccbs(np, lp, 2);	else		sym_put_start_queue(np, cp);	return 0;out_abort:	sym_free_ccb(np, cp);	sym_xpt_done(np, cmd);	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/53222b906903fd861dc24ebccfa07ee125941313/sym_glue.c/clean/drivers/scsi/sym53c8xx_2/sym_glue.c