dcssblk_remove_store(struct device *dev, const char *buf, size_t count) 
dcssblk_remove_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 
dcssblk_remove_store(struct device *dev, const char *buf, size_t count){	struct dcssblk_dev_info *dev_info;	int rc, i;	char *local_buf;	if (dev != dcssblk_root_dev) {		return -EINVAL;	}	local_buf = kmalloc(count + 1, GFP_KERNEL);	if (local_buf == NULL) {		return -ENOMEM;	}	/*	 * parse input	 */	for (i = 0; ((*(buf+i)!='\0') && (*(buf+i)!='\n') && i < count); i++) {		local_buf[i] = toupper(buf[i]);	}	local_buf[i] = '\0';	if ((i == 0) || (i > 8)) {		rc = -ENAMETOOLONG;		goto out_buf;	}	down_write(&dcssblk_devices_sem);	dev_info = dcssblk_get_device_by_name(local_buf);	if (dev_info == NULL) {		up_write(&dcssblk_devices_sem);		PRINT_WARN("Segment %s is not loaded!\n", local_buf);		rc = -ENODEV;		goto out_buf;	}	if (atomic_read(&dev_info->use_count) != 0) {		up_write(&dcssblk_devices_sem);		PRINT_WARN("Segment %s is in use!\n", local_buf);		rc = -EBUSY;		goto out_buf;	}	list_del(&dev_info->lh);	del_gendisk(dev_info->gd);	blk_put_queue(dev_info->dcssblk_queue);	dev_info->gd->queue = NULL;	put_disk(dev_info->gd);	device_unregister(&dev_info->dev);	segment_unload(dev_info->segment_name);	PRINT_DEBUG("Segment %s unloaded successfully\n",			dev_info->segment_name);	put_device(&dev_info->dev);	up_write(&dcssblk_devices_sem);	rc = count;out_buf:	kfree(local_buf);	return rc;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/e404e274f62665f3333d6a539d0d3701f678a598/dcssblk.c/clean/drivers/s390/block/dcssblk.c