summaryrefslogtreecommitdiffstats
path: root/drivers/parport
diff options
context:
space:
mode:
authorSudip Mukherjee <sudipm.mukherjee@gmail.com>2017-03-06 23:23:42 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2017-03-30 09:41:25 +0200
commit0f29bcfdcf681b440695e3faa0d90f7ed226e327 (patch)
treeb8f5e04cfd7acb6112acc8058d07438b09eb9389 /drivers/parport
parent1e6b5033501291bea037d98bea19f0eb03f2adef (diff)
downloadlinux-stable-0f29bcfdcf681b440695e3faa0d90f7ed226e327.tar.gz
linux-stable-0f29bcfdcf681b440695e3faa0d90f7ed226e327.tar.bz2
linux-stable-0f29bcfdcf681b440695e3faa0d90f7ed226e327.zip
parport: fix attempt to write duplicate procfiles
commit 03270c6ac6207fc55bbf9d20d195029dca210c79 upstream. Usually every parallel port will have a single pardev registered with it. But ppdev driver is an exception. This userspace parallel port driver allows to create multiple parrallel port devices for a single parallel port. And as a result we were having a nice warning like: "sysctl table check failed: /dev/parport/parport0/devices/ppdev0/timeslice Sysctl already exists" Use the same logic as used in parport_register_device() and register the proc files only once for each parallel port. Fixes: 6fa45a226897 ("parport: add device-model to parport subsystem") Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1414656 Bugzilla: https://bugs.archlinux.org/task/52322 Tested-by: James Feeney <james@nurealm.net> Signed-off-by: Sudip Mukherjee <sudip.mukherjee@codethink.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/parport')
-rw-r--r--drivers/parport/share.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/parport/share.c b/drivers/parport/share.c
index 3308427ed9f7..4399de34054a 100644
--- a/drivers/parport/share.c
+++ b/drivers/parport/share.c
@@ -939,8 +939,10 @@ parport_register_dev_model(struct parport *port, const char *name,
* pardevice fields. -arca
*/
port->ops->init_state(par_dev, par_dev->state);
- port->proc_device = par_dev;
- parport_device_proc_register(par_dev);
+ if (!test_and_set_bit(PARPORT_DEVPROC_REGISTERED, &port->devflags)) {
+ port->proc_device = par_dev;
+ parport_device_proc_register(par_dev);
+ }
return par_dev;