iio: buffer: Move a sanity check at the beginning of 'iio_scan_mask_set()'
authorChristophe JAILLET <christophe.jaillet@wanadoo.fr>
Wed, 14 Jul 2021 11:14:51 +0000 (13:14 +0200)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 17 Jul 2021 16:57:46 +0000 (17:57 +0100)
This is more standard to have sanity checks at the entry of a function,
instead of allocating some memory first and having to free it if a
condition is not met.

Shuffle code a bit to check 'masklength' before calling 'bitmap_alloc()'

Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Link: https://lore.kernel.org/r/98a351adda1908c306e981b9cc86d3dbc79eb5ec.1626261211.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/industrialio-buffer.c

index 6d4776a..a95cc2d 100644 (file)
@@ -354,13 +354,14 @@ static int iio_scan_mask_set(struct iio_dev *indio_dev,
        const unsigned long *mask;
        unsigned long *trialmask;
 
-       trialmask = bitmap_alloc(indio_dev->masklength, GFP_KERNEL);
-       if (!trialmask)
-               return -ENOMEM;
        if (!indio_dev->masklength) {
                WARN(1, "Trying to set scanmask prior to registering buffer\n");
-               goto err_invalid_mask;
+               return -EINVAL;
        }
+
+       trialmask = bitmap_alloc(indio_dev->masklength, GFP_KERNEL);
+       if (!trialmask)
+               return -ENOMEM;
        bitmap_copy(trialmask, buffer->scan_mask, indio_dev->masklength);
        set_bit(bit, trialmask);