All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jonathan Cameron <jic23@kernel.org>
To: Lars-Peter Clausen <lars@metafoo.de>
Cc: linux-iio@vger.kernel.org
Subject: Re: [PATCH 02/10] iio: Keep a reference to the IIO device for open file descriptors
Date: Sat, 21 Sep 2013 12:44:03 +0100	[thread overview]
Message-ID: <523D8683.5030400@kernel.org> (raw)
In-Reply-To: <1379534574-11213-2-git-send-email-lars@metafoo.de>

On 09/18/13 21:02, Lars-Peter Clausen wrote:
> Make sure that the IIO device is not freed while we still have file descriptors
> for it.
> 
> Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Back ported to the fixes-togreg branch and applied.

Lars.  Either these should have been based on that branch, or
you should have sent a good reason why not.  Whilst these are
rather large and invasive, they are fixing real bugs so
should go into mainline asap as far as I can see.

Jonathan
> ---
>  drivers/iio/industrialio-core.c  |  4 ++++
>  drivers/iio/industrialio-event.c | 19 ++++++++++++++-----
>  2 files changed, 18 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/iio/industrialio-core.c b/drivers/iio/industrialio-core.c
> index 96b35f0..5ea741c 100644
> --- a/drivers/iio/industrialio-core.c
> +++ b/drivers/iio/industrialio-core.c
> @@ -1012,6 +1012,8 @@ static int iio_chrdev_open(struct inode *inode, struct file *filp)
>  	if (test_and_set_bit(IIO_BUSY_BIT_POS, &indio_dev->flags))
>  		return -EBUSY;
>  
> +	iio_device_get(indio_dev);
> +
>  	filp->private_data = indio_dev;
>  
>  	return 0;
> @@ -1025,6 +1027,8 @@ static int iio_chrdev_release(struct inode *inode, struct file *filp)
>  	struct iio_dev *indio_dev = container_of(inode->i_cdev,
>  						struct iio_dev, chrdev);
>  	clear_bit(IIO_BUSY_BIT_POS, &indio_dev->flags);
> +	iio_device_put(indio_dev);
> +
>  	return 0;
>  }
>  
> diff --git a/drivers/iio/industrialio-event.c b/drivers/iio/industrialio-event.c
> index 2390e3d..f89843b 100644
> --- a/drivers/iio/industrialio-event.c
> +++ b/drivers/iio/industrialio-event.c
> @@ -72,7 +72,8 @@ EXPORT_SYMBOL(iio_push_event);
>  static unsigned int iio_event_poll(struct file *filep,
>  			     struct poll_table_struct *wait)
>  {
> -	struct iio_event_interface *ev_int = filep->private_data;
> +	struct iio_dev *indio_dev = filep->private_data;
> +	struct iio_event_interface *ev_int = indio_dev->event_interface;
>  	unsigned int events = 0;
>  
>  	poll_wait(filep, &ev_int->wait, wait);
> @@ -90,7 +91,8 @@ static ssize_t iio_event_chrdev_read(struct file *filep,
>  				     size_t count,
>  				     loff_t *f_ps)
>  {
> -	struct iio_event_interface *ev_int = filep->private_data;
> +	struct iio_dev *indio_dev = filep->private_data;
> +	struct iio_event_interface *ev_int = indio_dev->event_interface;
>  	unsigned int copied;
>  	int ret;
>  
> @@ -121,7 +123,8 @@ error_unlock:
>  
>  static int iio_event_chrdev_release(struct inode *inode, struct file *filep)
>  {
> -	struct iio_event_interface *ev_int = filep->private_data;
> +	struct iio_dev *indio_dev = filep->private_data;
> +	struct iio_event_interface *ev_int = indio_dev->event_interface;
>  
>  	spin_lock_irq(&ev_int->wait.lock);
>  	__clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags);
> @@ -133,6 +136,8 @@ static int iio_event_chrdev_release(struct inode *inode, struct file *filep)
>  	kfifo_reset_out(&ev_int->det_events);
>  	spin_unlock_irq(&ev_int->wait.lock);
>  
> +	iio_device_put(indio_dev);
> +
>  	return 0;
>  }
>  
> @@ -158,12 +163,16 @@ int iio_event_getfd(struct iio_dev *indio_dev)
>  		return -EBUSY;
>  	}
>  	spin_unlock_irq(&ev_int->wait.lock);
> -	fd = anon_inode_getfd("iio:event",
> -				&iio_event_chrdev_fileops, ev_int, O_RDONLY | O_CLOEXEC);
> +
> +	iio_device_get(indio_dev);
> +
> +	fd = anon_inode_getfd("iio:event", &iio_event_chrdev_fileops,
> +				indio_dev, O_RDONLY | O_CLOEXEC);
>  	if (fd < 0) {
>  		spin_lock_irq(&ev_int->wait.lock);
>  		__clear_bit(IIO_BUSY_BIT_POS, &ev_int->flags);
>  		spin_unlock_irq(&ev_int->wait.lock);
> +		iio_device_put(indio_dev);
>  	}
>  	return fd;
>  }
> 

  reply	other threads:[~2013-09-21 10:43 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-18 20:02 [PATCH 01/10] iio: Stop sampling when the device is removed Lars-Peter Clausen
2013-09-18 20:02 ` [PATCH 02/10] iio: Keep a reference to the IIO device for open file descriptors Lars-Peter Clausen
2013-09-21 11:44   ` Jonathan Cameron [this message]
2013-09-21 11:48   ` Jonathan Cameron
2013-09-18 20:02 ` [PATCH 03/10] iio: Set the IIO device as the parent for the character device Lars-Peter Clausen
2013-09-21 11:52   ` Jonathan Cameron
2013-09-18 20:02 ` [PATCH 04/10] iio:buffer_cb: Add missing iio_buffer_init() Lars-Peter Clausen
2013-09-21 11:53   ` Jonathan Cameron
2013-09-18 20:02 ` [PATCH 05/10] iio: Add reference counting for buffers Lars-Peter Clausen
2013-09-18 20:02 ` [PATCH 06/10] iio: Remove debugfs entries in iio_device_unregister() Lars-Peter Clausen
2013-09-18 20:02 ` [PATCH 07/10] iio: Return -ENODEV for file operations if the device has been unregistered Lars-Peter Clausen
2013-09-18 20:02 ` [PATCH 08/10] iio: Wakeup poll and blocking reads when the device is unregistered Lars-Peter Clausen
2013-09-21 11:56   ` Jonathan Cameron
2013-09-21 11:43     ` Lars-Peter Clausen
2013-09-21 12:45       ` Jonathan Cameron
2013-09-21 15:16         ` Lars-Peter Clausen
2013-09-21 18:18           ` Jonathan Cameron
2013-09-18 20:02 ` [PATCH 09/10] iio:buffer: Add proper locking for iio_update_buffers() Lars-Peter Clausen
2013-09-18 20:27   ` Lars-Peter Clausen
2013-09-21 11:59     ` Jonathan Cameron
2013-09-21 11:05       ` Lars-Peter Clausen
2013-09-21 12:09         ` Jonathan Cameron
2013-09-18 20:02 ` [PATCH 10/10] iio:buffer: Ignore noop requests " Lars-Peter Clausen
2013-09-21 11:57   ` Jonathan Cameron
2013-09-18 22:00 ` [PATCH 01/10] iio: Stop sampling when the device is removed Jonathan Cameron
2013-09-18 21:08   ` Lars-Peter Clausen
2013-09-18 22:11     ` Jonathan Cameron
2013-09-21 11:36 ` Jonathan Cameron
2013-09-21 10:45   ` Lars-Peter Clausen

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=523D8683.5030400@kernel.org \
    --to=jic23@kernel.org \
    --cc=lars@metafoo.de \
    --cc=linux-iio@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.