if (feature_ro && rq_data_dir(req) == WRITE) { 
if (device->features & DASD_FEATURE_READONLY && rq_data_dir(req) == WRITE) { 
__dasd_process_blk_queue(struct dasd_device * device){	request_queue_t *queue;	struct request *req;	struct dasd_ccw_req *cqr;	int nr_queued, feature_ro;	queue = device->request_queue;	/* No queue ? Then there is nothing to do. */	if (queue == NULL)		return;	feature_ro = dasd_get_feature(device->cdev, DASD_FEATURE_READONLY);	if (feature_ro < 0) 	/* no devmap */		return;	/*	 * We requeue request from the block device queue to the ccw	 * queue only in two states. In state DASD_STATE_READY the	 * partition detection is done and we need to requeue requests	 * for that. State DASD_STATE_ONLINE is normal block device	 * operation.	 */	if (device->state != DASD_STATE_READY &&	    device->state != DASD_STATE_ONLINE)		return;	nr_queued = 0;	/* Now we try to fetch requests from the request queue */	list_for_each_entry(cqr, &device->ccw_queue, list)		if (cqr->status == DASD_CQR_QUEUED)			nr_queued++;	while (!blk_queue_plugged(queue) &&	       elv_next_request(queue) &&		nr_queued < DASD_CHANQ_MAX_SIZE) {		req = elv_next_request(queue);		if (feature_ro && rq_data_dir(req) == WRITE) {			DBF_DEV_EVENT(DBF_ERR, device,				      "Rejecting write request %p",				      req);			blkdev_dequeue_request(req);			dasd_end_request(req, 0);			continue;		}		if (device->stopped & DASD_STOPPED_DC_EIO) {			blkdev_dequeue_request(req);			dasd_end_request(req, 0);			continue;		}		cqr = device->discipline->build_cp(device, req);		if (IS_ERR(cqr)) {			if (PTR_ERR(cqr) == -ENOMEM)				break;	/* terminate request queue loop */			DBF_DEV_EVENT(DBF_ERR, device,				      "CCW creation failed (rc=%ld) "				      "on request %p",				      PTR_ERR(cqr), req);			blkdev_dequeue_request(req);			dasd_end_request(req, 0);			continue;		}		cqr->callback = dasd_end_request_cb;		cqr->callback_data = (void *) req;		cqr->status = DASD_CQR_QUEUED;		blkdev_dequeue_request(req);		list_add_tail(&cqr->list, &device->ccw_queue);		dasd_profile_start(device, cqr, req);		nr_queued++;	}}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/c6eb7b7703ac4b3401b74f411c8c51ded214bf19/dasd.c/buggy/drivers/s390/block/dasd.c