dcssblk_save_store(struct device *dev, const char *inbuf, size_t count) 
dcssblk_save_store(struct device *dev, struct device_attribute *attr, const char *inbuf, size_t count) 
dcssblk_save_store(struct device *dev, const char *inbuf, size_t count){	struct dcssblk_dev_info *dev_info;	if ((count > 1) && (inbuf[1] != '\n') && (inbuf[1] != '\0')) {		PRINT_WARN("Invalid value, must be 0 or 1\n");		return -EINVAL;	}	dev_info = container_of(dev, struct dcssblk_dev_info, dev);	down_write(&dcssblk_devices_sem);	if (inbuf[0] == '1') {		if (atomic_read(&dev_info->use_count) == 0) {			// device is idle => we save immediately			PRINT_INFO("Saving segment %s\n",				   dev_info->segment_name);			segment_save(dev_info->segment_name);		}  else {			// device is busy => we save it when it becomes			// idle in dcssblk_release			PRINT_INFO("Segment %s is currently busy, it will "				   "be saved when it becomes idle...\n",				   dev_info->segment_name);			dev_info->save_pending = 1;		}	} else if (inbuf[0] == '0') {		if (dev_info->save_pending) {			// device is busy & the user wants to undo his save			// request			dev_info->save_pending = 0;			PRINT_INFO("Pending save for segment %s deactivated\n",					dev_info->segment_name);		}	} else {		up_write(&dcssblk_devices_sem);		PRINT_WARN("Invalid value, must be 0 or 1\n");		return -EINVAL;	}	up_write(&dcssblk_devices_sem);	return count;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/e404e274f62665f3333d6a539d0d3701f678a598/dcssblk.c/clean/drivers/s390/block/dcssblk.c