static void mts_remove_nolock( struct mts_desc* to_remove ) { MTS_DEBUG( "removing 0x%x from list\n", (int)to_remove ); lock_kernel(); mts_urb_abort(to_remove); MTS_DEBUG_GOT_HERE(); if ( to_remove != mts_list ) { MTS_DEBUG_GOT_HERE(); if (to_remove->prev && to_remove->next) to_remove->prev->next = to_remove->next; } else { MTS_DEBUG_GOT_HERE(); mts_list = to_remove->next; if (mts_list) { MTS_DEBUG_GOT_HERE(); mts_list->prev = 0; } } if ( to_remove->next ) { MTS_DEBUG_GOT_HERE(); to_remove->next->prev = to_remove->prev; } MTS_DEBUG_GOT_HERE(); scsi_unregister_host(&to_remove->ctempl); unlock_kernel(); kfree( to_remove ); }
static int mts_scsi_abort (Scsi_Cmnd *srb) { struct mts_desc* desc = (struct mts_desc*)(srb->host->hostdata[0]); MTS_DEBUG_GOT_HERE(); mts_urb_abort(desc); return SCSI_ABORT_PENDING; }
static int mts_scsi_abort (Scsi_Cmnd *srb) { struct mts_desc* desc = (struct mts_desc*)(srb->device->host->hostdata[0]); MTS_DEBUG_GOT_HERE(); mts_urb_abort(desc); return FAILED; }
static int mts_scsi_abort (Scsi_Cmnd *srb) /* interrupt context (!) */ /* FIXME this is about to become task context */ { struct mts_desc* desc = (struct mts_desc*)(srb->host->hostdata[0]); MTS_DEBUG_GOT_HERE(); mts_request_abort(desc); mts_urb_abort(desc); return SCSI_ABORT_PENDING; }
static inline void mts_wait_abort(struct mts_desc* desc) { mts_request_abort(desc); while( !atomic_read(&desc->lock.count) ) { /* Is there a function to check if the semaphore is locked? */ schedule_timeout( MTS_ABORT_TIMEOUT ); MTS_DEBUG_GOT_HERE(); mts_urb_abort(desc); } }