fs: fat: check for buffer size before reading blocks

This patch optimizes the commit mentioned below by avoiding running
a set of commands which are useless in the case when
size < mydata->sect_size and sect_count would be 0.

Fixes: 5b3ddb17ba ("fs/fat/fat.c: Do not perform zero block reads if there are no blocks left")

Signed-off-by: Ricardo Salveti <ricardo@foundries.io>
Co-developed-by: Oleksandr Suvorov <oleksandr.suvorov@foundries.io>
Signed-off-by: Oleksandr Suvorov <oleksandr.suvorov@foundries.io>
This commit is contained in:
Ricardo Salveti 2021-09-26 21:36:04 +03:00 committed by Tom Rini
parent 0892a7e5fa
commit 41130eb893

View File

@ -275,22 +275,19 @@ get_cluster(fsdata *mydata, __u32 clustnum, __u8 *buffer, unsigned long size)
buffer += mydata->sect_size;
size -= mydata->sect_size;
}
} else {
__u32 idx;
} else if (size >= mydata->sect_size) {
__u32 bytes_read;
__u32 sect_count = size / mydata->sect_size;
idx = size / mydata->sect_size;
if (idx == 0)
ret = 0;
else
ret = disk_read(startsect, idx, buffer);
if (ret != idx) {
ret = disk_read(startsect, sect_count, buffer);
if (ret != sect_count) {
debug("Error reading data (got %d)\n", ret);
return -1;
}
startsect += idx;
idx *= mydata->sect_size;
buffer += idx;
size -= idx;
bytes_read = sect_count * mydata->sect_size;
startsect += sect_count;
buffer += bytes_read;
size -= bytes_read;
}
if (size) {
ALLOC_CACHE_ALIGN_BUFFER(__u8, tmpbuf, mydata->sect_size);