From: Cyril Bur Date: Fri, 3 Nov 2017 02:41:40 +0000 (+1100) Subject: mtd: powernv_flash: Don't return -ERESTARTSYS on interrupted token acquisition X-Git-Tag: v5.15~9875^2~78 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=efe6941450b80927d3a5721594b7f103cb0c7428;p=platform%2Fkernel%2Flinux-starfive.git mtd: powernv_flash: Don't return -ERESTARTSYS on interrupted token acquisition Because the MTD core might split up a read() or write() from userspace into several calls to the driver, we may fail to get a token but already have done some work, best to return -EINTR back to userspace and have them decide what to do. Signed-off-by: Cyril Bur Acked-by: Boris Brezillon Signed-off-by: Michael Ellerman --- diff --git a/drivers/mtd/devices/powernv_flash.c b/drivers/mtd/devices/powernv_flash.c index 4dd3b5d..3343d4f 100644 --- a/drivers/mtd/devices/powernv_flash.c +++ b/drivers/mtd/devices/powernv_flash.c @@ -47,6 +47,11 @@ enum flash_op { FLASH_OP_ERASE, }; +/* + * Don't return -ERESTARTSYS if we can't get a token, the MTD core + * might have split up the call from userspace and called into the + * driver more than once, we'll already have done some amount of work. + */ static int powernv_flash_async_op(struct mtd_info *mtd, enum flash_op op, loff_t offset, size_t len, size_t *retlen, u_char *buf) { @@ -63,6 +68,8 @@ static int powernv_flash_async_op(struct mtd_info *mtd, enum flash_op op, if (token < 0) { if (token != -ERESTARTSYS) dev_err(dev, "Failed to get an async token\n"); + else + token = -EINTR; return token; }