void do_mcdx_request(request_queue_t * q)
static void do_mcdx_request(request_queue_t * q)
void do_mcdx_request(request_queue_t * q){	struct s_drive_stuff *stuffp;	struct request *req;      again:	req = elv_next_request(q);	if (!req)		return;	stuffp = req->rq_disk->private_data;	if (!stuffp->present) {		xwarn("do_request(): bad device: %s\n",req->rq_disk->disk_name);		xtrace(REQUEST, "end_request(0): bad device\n");		end_request(req, 0);		return;	}	if (stuffp->audio) {		xwarn("do_request() attempt to read from audio cd\n");		xtrace(REQUEST, "end_request(0): read from audio\n");		end_request(req, 0);		return;	}	xtrace(REQUEST, "do_request() (%lu + %lu)\n",	       req->sector, req->nr_sectors);	if (req->cmd != READ) {		xwarn("do_request(): non-read command to cd!!\n");		xtrace(REQUEST, "end_request(0): write\n");		end_request(req, 0);		return;	}	else {		stuffp->status = 0;		while (req->nr_sectors) {			int i;			i = mcdx_transfer(stuffp,					  req->buffer,					  req->sector,					  req->nr_sectors);			if (i == -1) {				end_request(req, 0);				goto again;			}			req->sector += i;			req->nr_sectors -= i;			req->buffer += (i * 512);		}		end_request(req, 1);		goto again;		xtrace(REQUEST, "end_request(1)\n");		end_request(req, 1);	}	goto again;}