From: Dongwoo Date: Fri, 26 Oct 2018 01:41:41 +0000 (+0900) Subject: LOCAL / usb: gadget: f_fs: Limit data buffer size to a single page X-Git-Tag: submit/tizen/20190129.052023~20 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=badec43b11fb3adb4ea25745c568f2e828ff8669;p=profile%2Fcommon%2Fplatform%2Fkernel%2Flinux-artik7.git LOCAL / usb: gadget: f_fs: Limit data buffer size to a single page Large size request from sdbd usually causes memory allocation failure in case of memory shortage. The failure is not handled by sdbd properly and thus it makes sdbd a hung state. To prevent this situation, this patch limits data buffer size to a single page so as to guarantee memory allocation success. * This is WORKAROUND solution for just use case of sdbd, it should be reverted when the advanced dma solution is applied to f_fs * Change-Id: Ib917c3aef2b00a3e00a3d87ca6d6940307038aa1 Signed-off-by: Dongwoo --- diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c index 4800bb22cdd6..009a776c372a 100644 --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c @@ -736,6 +736,14 @@ static ssize_t ffs_epfile_io(struct file *file, struct ffs_io_data *io_data) return -ESHUTDOWN; } data_len = iov_iter_count(&io_data->data); + + /* + * WORKAROUND: + * To prevent memory allocation failure of big size request, + * limits data buffer size to a single page. + */ + data_len = (data_len > PAGE_SIZE) ? PAGE_SIZE : data_len; + /* * Controller may require buffer size to be aligned to * maxpacketsize of an out endpoint.