netfilter-devel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@lst.de>
To: Andrew Morton <akpm@linux-foundation.org>,
	Alexander Viro <viro@zeniv.linux.org.uk>
Cc: linux-rtc@vger.kernel.org,
	Alessandro Zummo <a.zummo@towertech.it>,
	Alexandre Belloni <alexandre.belloni@bootlin.com>,
	devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org,
	linux-scsi@vger.kernel.org, linux-ide@vger.kernel.org,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	jfs-discussion@lists.sourceforge.net,
	linux-afs@lists.infradead.org, linux-acpi@vger.kernel.org,
	netdev@vger.kernel.org, netfilter-devel@vger.kernel.org,
	Jiri Slaby <jslaby@suse.com>,
	linux-ext4@vger.kernel.org, Alexey Dobriyan <adobriyan@gmail.com>,
	megaraidlinux.pdl@broadcom.com, drbd-dev@lists.linbit.com
Subject: [PATCH 19/42] acpi/battery: simplify procfs code
Date: Wed, 16 May 2018 11:43:23 +0200	[thread overview]
Message-ID: <20180516094346.20506-20-hch@lst.de> (raw)
In-Reply-To: <20180516094346.20506-1-hch@lst.de>

Use remove_proc_subtree to remove the whole subtree on cleanup, and
unwind the registration loop into individual calls.  Switch to use
proc_create_seq where applicable.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
---
 drivers/acpi/battery.c | 121 +++++++++--------------------------------
 1 file changed, 26 insertions(+), 95 deletions(-)

diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
index bdb24d636d9a..76550689ce10 100644
--- a/drivers/acpi/battery.c
+++ b/drivers/acpi/battery.c
@@ -81,14 +81,6 @@ MODULE_PARM_DESC(cache_time, "cache time in milliseconds");
 #ifdef CONFIG_ACPI_PROCFS_POWER
 extern struct proc_dir_entry *acpi_lock_battery_dir(void);
 extern void *acpi_unlock_battery_dir(struct proc_dir_entry *acpi_battery_dir);
-
-enum acpi_battery_files {
-	info_tag = 0,
-	state_tag,
-	alarm_tag,
-	ACPI_BATTERY_NUMFILES,
-};
-
 #endif
 
 static const struct acpi_device_id battery_device_ids[] = {
@@ -985,9 +977,10 @@ static const char *acpi_battery_units(const struct acpi_battery *battery)
 		"mA" : "mW";
 }
 
-static int acpi_battery_print_info(struct seq_file *seq, int result)
+static int acpi_battery_info_proc_show(struct seq_file *seq, void *offset)
 {
 	struct acpi_battery *battery = seq->private;
+	int result = acpi_battery_update(battery, false);
 
 	if (result)
 		goto end;
@@ -1041,9 +1034,10 @@ static int acpi_battery_print_info(struct seq_file *seq, int result)
 	return result;
 }
 
-static int acpi_battery_print_state(struct seq_file *seq, int result)
+static int acpi_battery_state_proc_show(struct seq_file *seq, void *offset)
 {
 	struct acpi_battery *battery = seq->private;
+	int result = acpi_battery_update(battery, false);
 
 	if (result)
 		goto end;
@@ -1088,9 +1082,10 @@ static int acpi_battery_print_state(struct seq_file *seq, int result)
 	return result;
 }
 
-static int acpi_battery_print_alarm(struct seq_file *seq, int result)
+static int acpi_battery_alarm_proc_show(struct seq_file *seq, void *offset)
 {
 	struct acpi_battery *battery = seq->private;
+	int result = acpi_battery_update(battery, false);
 
 	if (result)
 		goto end;
@@ -1142,82 +1137,22 @@ static ssize_t acpi_battery_write_alarm(struct file *file,
 	return result;
 }
 
-typedef int(*print_func)(struct seq_file *seq, int result);
-
-static print_func acpi_print_funcs[ACPI_BATTERY_NUMFILES] = {
-	acpi_battery_print_info,
-	acpi_battery_print_state,
-	acpi_battery_print_alarm,
-};
-
-static int acpi_battery_read(int fid, struct seq_file *seq)
+static int acpi_battery_alarm_proc_open(struct inode *inode, struct file *file)
 {
-	struct acpi_battery *battery = seq->private;
-	int result = acpi_battery_update(battery, false);
-	return acpi_print_funcs[fid](seq, result);
+	return single_open(file, acpi_battery_alarm_proc_show, PDE_DATA(inode));
 }
 
-#define DECLARE_FILE_FUNCTIONS(_name) \
-static int acpi_battery_read_##_name(struct seq_file *seq, void *offset) \
-{ \
-	return acpi_battery_read(_name##_tag, seq); \
-} \
-static int acpi_battery_##_name##_open_fs(struct inode *inode, struct file *file) \
-{ \
-	return single_open(file, acpi_battery_read_##_name, PDE_DATA(inode)); \
-}
-
-DECLARE_FILE_FUNCTIONS(info);
-DECLARE_FILE_FUNCTIONS(state);
-DECLARE_FILE_FUNCTIONS(alarm);
-
-#undef DECLARE_FILE_FUNCTIONS
-
-#define FILE_DESCRIPTION_RO(_name) \
-	{ \
-	.name = __stringify(_name), \
-	.mode = S_IRUGO, \
-	.ops = { \
-		.open = acpi_battery_##_name##_open_fs, \
-		.read = seq_read, \
-		.llseek = seq_lseek, \
-		.release = single_release, \
-		.owner = THIS_MODULE, \
-		}, \
-	}
-
-#define FILE_DESCRIPTION_RW(_name) \
-	{ \
-	.name = __stringify(_name), \
-	.mode = S_IFREG | S_IRUGO | S_IWUSR, \
-	.ops = { \
-		.open = acpi_battery_##_name##_open_fs, \
-		.read = seq_read, \
-		.llseek = seq_lseek, \
-		.write = acpi_battery_write_##_name, \
-		.release = single_release, \
-		.owner = THIS_MODULE, \
-		}, \
-	}
-
-static const struct battery_file {
-	struct file_operations ops;
-	umode_t mode;
-	const char *name;
-} acpi_battery_file[] = {
-	FILE_DESCRIPTION_RO(info),
-	FILE_DESCRIPTION_RO(state),
-	FILE_DESCRIPTION_RW(alarm),
+static const struct file_operations acpi_battery_alarm_fops = {
+	.owner		= THIS_MODULE,
+	.open		= acpi_battery_alarm_proc_open,
+	.read		= seq_read,
+	.write		= acpi_battery_write_alarm,
+	.llseek		= seq_lseek,
+	.release	= single_release,
 };
 
-#undef FILE_DESCRIPTION_RO
-#undef FILE_DESCRIPTION_RW
-
 static int acpi_battery_add_fs(struct acpi_device *device)
 {
-	struct proc_dir_entry *entry = NULL;
-	int i;
-
 	printk(KERN_WARNING PREFIX "Deprecated procfs I/F for battery is loaded,"
 			" please retry with CONFIG_ACPI_PROCFS_POWER cleared\n");
 	if (!acpi_device_dir(device)) {
@@ -1227,28 +1162,24 @@ static int acpi_battery_add_fs(struct acpi_device *device)
 			return -ENODEV;
 	}
 
-	for (i = 0; i < ACPI_BATTERY_NUMFILES; ++i) {
-		entry = proc_create_data(acpi_battery_file[i].name,
-					 acpi_battery_file[i].mode,
-					 acpi_device_dir(device),
-					 &acpi_battery_file[i].ops,
-					 acpi_driver_data(device));
-		if (!entry)
-			return -ENODEV;
-	}
+	if (!proc_create_single_data("info", S_IRUGO, acpi_device_dir(device),
+			acpi_battery_info_proc_show, acpi_driver_data(device)))
+		return -ENODEV;
+	if (!proc_create_single_data("state", S_IRUGO, acpi_device_dir(device),
+			acpi_battery_state_proc_show, acpi_driver_data(device)))
+		return -ENODEV;
+	if (!proc_create_data("alarm", S_IFREG | S_IRUGO | S_IWUSR,
+			acpi_device_dir(device), &acpi_battery_alarm_fops,
+			acpi_driver_data(device)))
+		return -ENODEV;
 	return 0;
 }
 
 static void acpi_battery_remove_fs(struct acpi_device *device)
 {
-	int i;
 	if (!acpi_device_dir(device))
 		return;
-	for (i = 0; i < ACPI_BATTERY_NUMFILES; ++i)
-		remove_proc_entry(acpi_battery_file[i].name,
-				  acpi_device_dir(device));
-
-	remove_proc_entry(acpi_device_bid(device), acpi_battery_dir);
+	remove_proc_subtree(acpi_device_bid(device), acpi_battery_dir);
 	acpi_device_dir(device) = NULL;
 }
 
-- 
2.17.0

  parent reply	other threads:[~2018-05-16  9:43 UTC|newest]

Thread overview: 49+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-16  9:43 simplify procfs code for seq_file instances V3 Christoph Hellwig
     [not found] ` <20180516094346.20506-1-hch-jcswGhMUV9g@public.gmane.org>
2018-05-16  9:43   ` [PATCH 01/42] net/can: single_open_net needs to be paired with single_release_net Christoph Hellwig
2018-05-16  9:43 ` [PATCH 02/42] proc: introduce a proc_pid_ns helper Christoph Hellwig
2018-05-16  9:43 ` [PATCH 03/42] proc: don't detour through seq->private to get the inode Christoph Hellwig
2018-05-16  9:43 ` [PATCH 04/42] proc: simplify proc_register calling conventions Christoph Hellwig
2018-05-16  9:43 ` [PATCH 05/42] proc: add a proc_create_reg helper Christoph Hellwig
2018-05-16  9:43 ` [PATCH 06/42] proc: introduce proc_create_seq{,_data} Christoph Hellwig
2018-05-16  9:43 ` [PATCH 07/42] proc: introduce proc_create_seq_private Christoph Hellwig
2018-05-16  9:43 ` [PATCH 08/42] proc: introduce proc_create_single{,_data} Christoph Hellwig
2018-05-16  9:43 ` [PATCH 09/42] ipv{4,6}/udp{,lite}: simplify proc registration Christoph Hellwig
2018-05-16  9:43 ` [PATCH 10/42] ipv{4,6}/tcp: simplify procfs registration Christoph Hellwig
2018-05-16  9:43 ` [PATCH 11/42] ipv{4,6}/ping: simplify proc file creation Christoph Hellwig
2018-05-16  9:43 ` [PATCH 12/42] ipv{4, 6}/raw: simplify ѕeq_file code Christoph Hellwig
2018-05-16  9:43 ` [PATCH 13/42] ipv6/flowlabel: simplify pid namespace lookup Christoph Hellwig
2018-05-16  9:43 ` [PATCH 14/42] net/kcm: simplify proc registration Christoph Hellwig
2018-05-16  9:43 ` [PATCH 15/42] netfilter/x_tables: simplify ѕeq_file code Christoph Hellwig
2018-05-16  9:43 ` [PATCH 16/42] net: move seq_file_single_net to <linux/seq_file_net.h> Christoph Hellwig
2018-05-16  9:43 ` [PATCH 17/42] proc: introduce proc_create_net{,_data} Christoph Hellwig
2018-05-16  9:43 ` [PATCH 18/42] proc: introduce proc_create_net_single Christoph Hellwig
2018-05-16  9:43 ` Christoph Hellwig [this message]
2018-05-16  9:43 ` [PATCH 20/42] sgi-gru: simplify procfs code Christoph Hellwig
2018-05-16  9:43 ` [PATCH 21/42] megaraid: " Christoph Hellwig
2018-05-16  9:43 ` [PATCH 22/42] sg: " Christoph Hellwig
2018-05-16  9:43 ` [PATCH 23/42] afs: " Christoph Hellwig
2018-05-16  9:43 ` [PATCH 24/42] ext4: " Christoph Hellwig
2018-05-16  9:43 ` [PATCH 25/42] jfs: " Christoph Hellwig
2018-05-16 13:15   ` [Jfs-discussion] " Dave Kleikamp
2018-05-16  9:43 ` [PATCH 26/42] staging/rtl8192u: " Christoph Hellwig
2018-05-16  9:43 ` [PATCH 27/42] resource: switch to proc_create_seq_data Christoph Hellwig
2018-05-16  9:43 ` [PATCH 28/42] drbd: switch to proc_create_single Christoph Hellwig
     [not found]   ` <20180516094346.20506-29-hch-jcswGhMUV9g@public.gmane.org>
2018-05-18 12:55     ` Lars Ellenberg
2018-05-16  9:43 ` [PATCH 29/42] rtc/proc: switch to proc_create_single_data Christoph Hellwig
2018-05-16  9:43 ` [PATCH 30/42] bonding: switch to proc_create_seq_data Christoph Hellwig
2018-05-16  9:43 ` [PATCH 31/42] hostap: switch to proc_create_{seq,single}_data Christoph Hellwig
2018-05-16  9:43 ` [PATCH 32/42] neigh: switch to proc_create_seq_data Christoph Hellwig
2018-05-16  9:43 ` [PATCH 33/42] netfilter/xt_hashlimit: switch to proc_create_{seq, single}_data Christoph Hellwig
2018-05-16  9:43 ` [PATCH 34/42] netfilter/x_tables: switch to proc_create_seq_private Christoph Hellwig
2018-05-16  9:43 ` [PATCH 35/42] bluetooth: switch to proc_create_seq_data Christoph Hellwig
2018-05-16  9:43 ` [PATCH 36/42] atm: simplify procfs code Christoph Hellwig
2018-05-16  9:43 ` [PATCH 37/42] atm: switch to proc_create_seq_private Christoph Hellwig
2018-05-16  9:43 ` [PATCH 38/42] isdn: replace ->proc_fops with ->proc_show Christoph Hellwig
2018-05-18  8:43   ` Paul Bolle
     [not found]     ` <4e7091873e8a220c454a7ce5a3f52edc5b5c3e3a.camel-IWqWACnzNjzz+pZb47iToQ@public.gmane.org>
2018-05-18  8:58       ` Christoph Hellwig
2018-05-16  9:43 ` [PATCH 39/42] ide: remove ide_driver_proc_write Christoph Hellwig
2018-05-16  9:43 ` [PATCH 40/42] ide: replace ->proc_fops with ->proc_show Christoph Hellwig
2018-05-16  9:43 ` [PATCH 41/42] tty: " Christoph Hellwig
2018-05-16  9:58   ` Greg Kroah-Hartman
2018-05-16  9:43 ` [PATCH 42/42] proc: update SIZEOF_PDE_INLINE_NAME for the new pde fields Christoph Hellwig
2018-05-16 13:28 ` simplify procfs code for seq_file instances V3 Al Viro

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180516094346.20506-20-hch@lst.de \
    --to=hch@lst.de \
    --cc=a.zummo@towertech.it \
    --cc=adobriyan@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=alexandre.belloni@bootlin.com \
    --cc=devel@driverdev.osuosl.org \
    --cc=drbd-dev@lists.linbit.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jfs-discussion@lists.sourceforge.net \
    --cc=jslaby@suse.com \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-afs@lists.infradead.org \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rtc@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=megaraidlinux.pdl@broadcom.com \
    --cc=netdev@vger.kernel.org \
    --cc=netfilter-devel@vger.kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).