diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2018-06-22 21:20:35 +0200 | 
|---|---|---|
| committer | Thomas Gleixner <tglx@linutronix.de> | 2018-06-22 21:20:35 +0200 | 
| commit | 7731b8bc94e599c9a79e428f3359ff2c34b7576a (patch) | |
| tree | 879f18ccbe274122f2d4f095b43cbc7f953e0ada /drivers/ide/ide-proc.c | |
| parent | 48e315618dc4dc8904182cd221e3d395d5d97005 (diff) | |
| parent | 9ffc59d57228d74809700be6f7ecb1db10292f05 (diff) | |
Merge branch 'linus' into x86/urgent
Required to queue a dependent fix.
Diffstat (limited to 'drivers/ide/ide-proc.c')
| -rw-r--r-- | drivers/ide/ide-proc.c | 182 | 
1 files changed, 18 insertions, 164 deletions
diff --git a/drivers/ide/ide-proc.c b/drivers/ide/ide-proc.c index 863db44c7916..45c997430332 100644 --- a/drivers/ide/ide-proc.c +++ b/drivers/ide/ide-proc.c @@ -56,19 +56,6 @@ static int ide_imodel_proc_show(struct seq_file *m, void *v)  	return 0;  } -static int ide_imodel_proc_open(struct inode *inode, struct file *file) -{ -	return single_open(file, ide_imodel_proc_show, PDE_DATA(inode)); -} - -static const struct file_operations ide_imodel_proc_fops = { -	.owner		= THIS_MODULE, -	.open		= ide_imodel_proc_open, -	.read		= seq_read, -	.llseek		= seq_lseek, -	.release	= single_release, -}; -  static int ide_mate_proc_show(struct seq_file *m, void *v)  {  	ide_hwif_t	*hwif = (ide_hwif_t *) m->private; @@ -80,19 +67,6 @@ static int ide_mate_proc_show(struct seq_file *m, void *v)  	return 0;  } -static int ide_mate_proc_open(struct inode *inode, struct file *file) -{ -	return single_open(file, ide_mate_proc_show, PDE_DATA(inode)); -} - -static const struct file_operations ide_mate_proc_fops = { -	.owner		= THIS_MODULE, -	.open		= ide_mate_proc_open, -	.read		= seq_read, -	.llseek		= seq_lseek, -	.release	= single_release, -}; -  static int ide_channel_proc_show(struct seq_file *m, void *v)  {  	ide_hwif_t	*hwif = (ide_hwif_t *) m->private; @@ -101,19 +75,6 @@ static int ide_channel_proc_show(struct seq_file *m, void *v)  	return 0;  } -static int ide_channel_proc_open(struct inode *inode, struct file *file) -{ -	return single_open(file, ide_channel_proc_show, PDE_DATA(inode)); -} - -static const struct file_operations ide_channel_proc_fops = { -	.owner		= THIS_MODULE, -	.open		= ide_channel_proc_open, -	.read		= seq_read, -	.llseek		= seq_lseek, -	.release	= single_release, -}; -  static int ide_identify_proc_show(struct seq_file *m, void *v)  {  	ide_drive_t *drive = (ide_drive_t *)m->private; @@ -141,19 +102,6 @@ static int ide_identify_proc_show(struct seq_file *m, void *v)  	return 0;  } -static int ide_identify_proc_open(struct inode *inode, struct file *file) -{ -	return single_open(file, ide_identify_proc_show, PDE_DATA(inode)); -} - -static const struct file_operations ide_identify_proc_fops = { -	.owner		= THIS_MODULE, -	.open		= ide_identify_proc_open, -	.read		= seq_read, -	.llseek		= seq_lseek, -	.release	= single_release, -}; -  /**   *	ide_find_setting	-	find a specific setting   *	@st: setting table pointer @@ -441,27 +389,14 @@ static const struct file_operations ide_settings_proc_fops = {  	.write		= ide_settings_proc_write,  }; -static int ide_capacity_proc_show(struct seq_file *m, void *v) +int ide_capacity_proc_show(struct seq_file *m, void *v)  {  	seq_printf(m, "%llu\n", (long long)0x7fffffff);  	return 0;  } +EXPORT_SYMBOL_GPL(ide_capacity_proc_show); -static int ide_capacity_proc_open(struct inode *inode, struct file *file) -{ -	return single_open(file, ide_capacity_proc_show, NULL); -} - -const struct file_operations ide_capacity_proc_fops = { -	.owner		= THIS_MODULE, -	.open		= ide_capacity_proc_open, -	.read		= seq_read, -	.llseek		= seq_lseek, -	.release	= single_release, -}; -EXPORT_SYMBOL_GPL(ide_capacity_proc_fops); - -static int ide_geometry_proc_show(struct seq_file *m, void *v) +int ide_geometry_proc_show(struct seq_file *m, void *v)  {  	ide_drive_t	*drive = (ide_drive_t *) m->private; @@ -471,20 +406,7 @@ static int ide_geometry_proc_show(struct seq_file *m, void *v)  			drive->bios_cyl, drive->bios_head, drive->bios_sect);  	return 0;  } - -static int ide_geometry_proc_open(struct inode *inode, struct file *file) -{ -	return single_open(file, ide_geometry_proc_show, PDE_DATA(inode)); -} - -const struct file_operations ide_geometry_proc_fops = { -	.owner		= THIS_MODULE, -	.open		= ide_geometry_proc_open, -	.read		= seq_read, -	.llseek		= seq_lseek, -	.release	= single_release, -}; -EXPORT_SYMBOL(ide_geometry_proc_fops); +EXPORT_SYMBOL(ide_geometry_proc_show);  static int ide_dmodel_proc_show(struct seq_file *seq, void *v)  { @@ -495,19 +417,6 @@ static int ide_dmodel_proc_show(struct seq_file *seq, void *v)  	return 0;  } -static int ide_dmodel_proc_open(struct inode *inode, struct file *file) -{ -	return single_open(file, ide_dmodel_proc_show, PDE_DATA(inode)); -} - -static const struct file_operations ide_dmodel_proc_fops = { -	.owner		= THIS_MODULE, -	.open		= ide_dmodel_proc_open, -	.read		= seq_read, -	.llseek		= seq_lseek, -	.release	= single_release, -}; -  static int ide_driver_proc_show(struct seq_file *m, void *v)  {  	ide_drive_t		*drive = (ide_drive_t *)m->private; @@ -523,65 +432,6 @@ static int ide_driver_proc_show(struct seq_file *m, void *v)  	return 0;  } -static int ide_driver_proc_open(struct inode *inode, struct file *file) -{ -	return single_open(file, ide_driver_proc_show, PDE_DATA(inode)); -} - -static int ide_replace_subdriver(ide_drive_t *drive, const char *driver) -{ -	struct device *dev = &drive->gendev; -	int ret = 1; -	int err; - -	device_release_driver(dev); -	/* FIXME: device can still be in use by previous driver */ -	strlcpy(drive->driver_req, driver, sizeof(drive->driver_req)); -	err = device_attach(dev); -	if (err < 0) -		printk(KERN_WARNING "IDE: %s: device_attach error: %d\n", -			__func__, err); -	drive->driver_req[0] = 0; -	if (dev->driver == NULL) { -		err = device_attach(dev); -		if (err < 0) -			printk(KERN_WARNING -				"IDE: %s: device_attach(2) error: %d\n", -				__func__, err); -	} -	if (dev->driver && !strcmp(dev->driver->name, driver)) -		ret = 0; - -	return ret; -} - -static ssize_t ide_driver_proc_write(struct file *file, const char __user *buffer, -				     size_t count, loff_t *pos) -{ -	ide_drive_t	*drive = PDE_DATA(file_inode(file)); -	char name[32]; - -	if (!capable(CAP_SYS_ADMIN)) -		return -EACCES; -	if (count > 31) -		count = 31; -	if (copy_from_user(name, buffer, count)) -		return -EFAULT; -	name[count] = '\0'; -	if (ide_replace_subdriver(drive, name)) -		return -EINVAL; -	return count; -} - -static const struct file_operations ide_driver_proc_fops = { -	.owner		= THIS_MODULE, -	.open		= ide_driver_proc_open, -	.read		= seq_read, -	.llseek		= seq_lseek, -	.release	= single_release, -	.write		= ide_driver_proc_write, -}; -  static int ide_media_proc_show(struct seq_file *m, void *v)  {  	ide_drive_t	*drive = (ide_drive_t *) m->private; @@ -613,11 +463,10 @@ static const struct file_operations ide_media_proc_fops = {  };  static ide_proc_entry_t generic_drive_entries[] = { -	{ "driver",	S_IFREG|S_IRUGO,	 &ide_driver_proc_fops	}, -	{ "identify",	S_IFREG|S_IRUSR,	 &ide_identify_proc_fops}, -	{ "media",	S_IFREG|S_IRUGO,	 &ide_media_proc_fops	}, -	{ "model",	S_IFREG|S_IRUGO,	 &ide_dmodel_proc_fops	}, -	{ "settings",	S_IFREG|S_IRUSR|S_IWUSR, &ide_settings_proc_fops}, +	{ "driver",	S_IFREG|S_IRUGO,	 ide_driver_proc_show	}, +	{ "identify",	S_IFREG|S_IRUSR,	 ide_identify_proc_show	}, +	{ "media",	S_IFREG|S_IRUGO,	 ide_media_proc_show	}, +	{ "model",	S_IFREG|S_IRUGO,	 ide_dmodel_proc_show	},  	{}  }; @@ -628,7 +477,7 @@ static void ide_add_proc_entries(struct proc_dir_entry *dir, ide_proc_entry_t *p  	if (!dir || !p)  		return;  	while (p->name != NULL) { -		ent = proc_create_data(p->name, p->mode, dir, p->proc_fops, data); +		ent = proc_create_single_data(p->name, p->mode, dir, p->show, data);  		if (!ent) return;  		p++;  	} @@ -693,8 +542,12 @@ void ide_proc_port_register_devices(ide_hwif_t *hwif)  			continue;  		drive->proc = proc_mkdir(drive->name, parent); -		if (drive->proc) +		if (drive->proc) {  			ide_add_proc_entries(drive->proc, generic_drive_entries, drive); +			proc_create_data("setting", S_IFREG|S_IRUSR|S_IWUSR, +					drive->proc, &ide_settings_proc_fops, +					drive); +		}  		sprintf(name, "ide%d/%s", (drive->name[2]-'a')/2, drive->name);  		ent = proc_symlink(drive->name, proc_ide_root, name);  		if (!ent) return; @@ -704,6 +557,7 @@ void ide_proc_port_register_devices(ide_hwif_t *hwif)  void ide_proc_unregister_device(ide_drive_t *drive)  {  	if (drive->proc) { +		remove_proc_entry("settings", drive->proc);  		ide_remove_proc_entries(drive->proc, generic_drive_entries);  		remove_proc_entry(drive->name, proc_ide_root);  		remove_proc_entry(drive->name, drive->hwif->proc); @@ -712,9 +566,9 @@ void ide_proc_unregister_device(ide_drive_t *drive)  }  static ide_proc_entry_t hwif_entries[] = { -	{ "channel",	S_IFREG|S_IRUGO,	&ide_channel_proc_fops	}, -	{ "mate",	S_IFREG|S_IRUGO,	&ide_mate_proc_fops	}, -	{ "model",	S_IFREG|S_IRUGO,	&ide_imodel_proc_fops	}, +	{ "channel",	S_IFREG|S_IRUGO,	ide_channel_proc_show	}, +	{ "mate",	S_IFREG|S_IRUGO,	ide_mate_proc_show	}, +	{ "model",	S_IFREG|S_IRUGO,	ide_imodel_proc_show	},  	{}  };  | 
