feature = dasd_get_feature(device->cdev, DASD_FEATURE_READONLY); if (feature < 0) return 0; substr = feature ? "(ro)" : " "; 
substr = (device->features & DASD_FEATURE_READONLY) ? "(ro)" : " "; 
dasd_devices_show(struct seq_file *m, void *v){	struct dasd_device *device;	char *substr;	int feature;	device = dasd_device_from_devindex((unsigned long) v - 1);	if (IS_ERR(device))		return 0;	/* Print device number. */	seq_printf(m, "%s", device->cdev->dev.bus_id);	/* Print discipline string. */	if (device != NULL && device->discipline != NULL)		seq_printf(m, "(%s)", device->discipline->name);	else		seq_printf(m, "(none)");	/* Print kdev. */	if (device->gdp)		seq_printf(m, " at (%3d:%6d)",			   device->gdp->major, device->gdp->first_minor);	else		seq_printf(m, "  at (???:??????)");	/* Print device name. */	if (device->gdp)		seq_printf(m, " is %-8s", device->gdp->disk_name);	else		seq_printf(m, " is ????????");	/* Print devices features. */	feature = dasd_get_feature(device->cdev, DASD_FEATURE_READONLY);	if (feature < 0)		return 0;	substr = feature ? "(ro)" : " ";	seq_printf(m, "%4s: ", substr);	/* Print device status information. */	switch ((device != NULL) ? device->state : -1) {	case -1:		seq_printf(m, "unknown");		break;	case DASD_STATE_NEW:		seq_printf(m, "new");		break;	case DASD_STATE_KNOWN:		seq_printf(m, "detected");		break;	case DASD_STATE_BASIC:		seq_printf(m, "basic");		break;	case DASD_STATE_READY:	case DASD_STATE_ONLINE:		seq_printf(m, "active ");		if (dasd_check_blocksize(device->bp_block))			seq_printf(m, "n/f	 ");		else			seq_printf(m,				   "at blocksize: %d, %ld blocks, %ld MB",				   device->bp_block, device->blocks,				   ((device->bp_block >> 9) *				    device->blocks) >> 11);		break;	default:		seq_printf(m, "no stat");		break;	}	dasd_put_device(device);	if (dasd_probeonly)		seq_printf(m, "(probeonly)");	seq_printf(m, "\n");	return 0;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/c6eb7b7703ac4b3401b74f411c8c51ded214bf19/dasd_proc.c/clean/drivers/s390/block/dasd_proc.c