int rc; 
int rc, feature_ro; 
dasd_ioctl_information(struct block_device *bdev, int no, long args){	struct dasd_device *device;	struct dasd_information2_t *dasd_info;	unsigned long flags;	int rc;	struct ccw_device *cdev;	device = bdev->bd_disk->private_data;	if (device == NULL)		return -ENODEV;	if (!device->discipline->fill_info)		return -EINVAL;	dasd_info = kmalloc(sizeof(struct dasd_information2_t), GFP_KERNEL);	if (dasd_info == NULL)		return -ENOMEM;	rc = device->discipline->fill_info(device, dasd_info);	if (rc) {		kfree(dasd_info);		return rc;	}	cdev = device->cdev;	dasd_info->devno = _ccw_device_get_device_number(device->cdev);	dasd_info->schid = _ccw_device_get_subchannel_number(device->cdev);	dasd_info->cu_type = cdev->id.cu_type;	dasd_info->cu_model = cdev->id.cu_model;	dasd_info->dev_type = cdev->id.dev_type;	dasd_info->dev_model = cdev->id.dev_model;	dasd_info->open_count = atomic_read(&device->open_count);	dasd_info->status = device->state;		/*	 * check if device is really formatted	 * LDL / CDL was returned by 'fill_info'	 */	if ((device->state < DASD_STATE_READY) ||	    (dasd_check_blocksize(device->bp_block)))		dasd_info->format = DASD_FORMAT_NONE;		dasd_info->features |= test_bit(DASD_FLAG_RO, &device->flags) ?		DASD_FEATURE_READONLY : DASD_FEATURE_DEFAULT;	if (device->discipline)		memcpy(dasd_info->type, device->discipline->name, 4);	else		memcpy(dasd_info->type, "none", 4);	dasd_info->req_queue_len = 0;	dasd_info->chanq_len = 0;	if (device->request_queue->request_fn) {		struct list_head *l;#ifdef DASD_EXTENDED_PROFILING		{			struct list_head *l;			spin_lock_irqsave(&device->lock, flags);			list_for_each(l, &device->request_queue->queue_head)				dasd_info->req_queue_len++;			spin_unlock_irqrestore(&device->lock, flags);		}#endif				/* DASD_EXTENDED_PROFILING */		spin_lock_irqsave(get_ccwdev_lock(device->cdev), flags);		list_for_each(l, &device->ccw_queue)			dasd_info->chanq_len++;		spin_unlock_irqrestore(get_ccwdev_lock(device->cdev),				       flags);	}	rc = 0;	if (copy_to_user((long __user *) args, (long *) dasd_info,			 ((no == (unsigned int) BIODASDINFO2) ?			  sizeof (struct dasd_information2_t) :			  sizeof (struct dasd_information_t))))		rc = -EFAULT;	kfree(dasd_info);	return rc;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/f24acd4503270ed4c842c8fef0b71105285e0a06/dasd_ioctl.c/clean/drivers/s390/block/dasd_ioctl.c