It's harmless even if: chrdev_open() and cdev_device_del() run at the same time, and gpio_chrdev_open() gets called after the underlying GPIO chip has gone. The subsequent file operations check the availability of struct gpio_chip anyway.
Don't check struct gpio_chip in gpio_chrdev_open(). Signed-off-by: Tzung-Bi Shih <[email protected]> --- drivers/gpio/gpiolib-cdev.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/drivers/gpio/gpiolib-cdev.c b/drivers/gpio/gpiolib-cdev.c index 24449bbe38c9..e42cfdb47885 100644 --- a/drivers/gpio/gpiolib-cdev.c +++ b/drivers/gpio/gpiolib-cdev.c @@ -2689,13 +2689,7 @@ static int gpio_chrdev_open(struct inode *inode, struct file *file) struct gpio_device *gdev = container_of(inode->i_cdev, struct gpio_device, chrdev); struct gpio_chardev_data *cdev; - int ret = -ENOMEM; - - guard(srcu)(&gdev->srcu); - - /* Fail on open if the backing gpiochip is gone */ - if (!rcu_access_pointer(gdev->chip)) - return -ENODEV; + int ret; cdev = kzalloc(sizeof(*cdev), GFP_KERNEL); if (!cdev) -- 2.52.0.457.g6b5491de43-goog
