[U-Boot] [PATCH] FAT: split block device interactions from filesystem logic
Benoît Thébaudeau
benoit.thebaudeau at advansee.com
Sun Sep 23 19:46:15 CEST 2012
Hi Pavel,
On Sunday, September 23, 2012 5:28:31 PM, Pavel Herrmann wrote:
> add some CCs
>
> On Wednesday 19 September 2012 16:34:02 Pavel Herrmann wrote:
> > Put block device interaction code into separate file from
> > filesystem logic.
> > This makes it easier to change block device API, and is similar to
> > what
> > other filesystems do.
> > Cleanup some logic inconsistencies as well.
Sounds good. See my comments below.
This might need some light rework to make it applicable after
http://patchwork.ozlabs.org/patch/184793/, which should be applied soon.
> > Signed-off-by: Pavel Herrmann <morpheus.ibis at gmail.com>
> > ---
> > fs/fat/Makefile | 4 +-
> > fs/fat/dev.c | 191
> > +++++++++++++++++++++++++++++++++++++++++++++++++++++ fs/fat/fat.c
> > |
> > 175 ++++++------------------------------------------
> > fs/fat/fat_write.c |
> > 21 +++---
> > include/fat.h | 7 ++
> > 5 files changed, 228 insertions(+), 170 deletions(-)
> > create mode 100644 fs/fat/dev.c
> >
> > diff --git a/fs/fat/Makefile b/fs/fat/Makefile
> > index 9635d36..5d10b24 100644
> > --- a/fs/fat/Makefile
> > +++ b/fs/fat/Makefile
> > @@ -24,8 +24,8 @@ include $(TOPDIR)/config.mk
> > LIB = $(obj)libfat.o
> >
> > AOBJS =
> > -COBJS-$(CONFIG_CMD_FAT) := fat.o
> > -COBJS-$(CONFIG_FAT_WRITE):= fat_write.o
> > +COBJS-$(CONFIG_CMD_FAT) := fat.o dev.o
> > +COBJS-$(CONFIG_FAT_WRITE) := fat_write.o dev.o
> >
> > ifndef CONFIG_SPL_BUILD
> > COBJS-$(CONFIG_CMD_FAT) += file.o
> > diff --git a/fs/fat/dev.c b/fs/fat/dev.c
> > new file mode 100644
> > index 0000000..d5ff0c5
> > --- /dev/null
> > +++ b/fs/fat/dev.c
> > @@ -0,0 +1,191 @@
> > +/*
> > + * (C) Copyright 2012
> > + * Pavel Herrmann <morpheus.ibis at gmail.com>
Since 99% of the code here comes from fat.c and fat_write.c, the copyright
information from these files should probably be added here too.
> > + *
> > + * See file CREDITS for list of people who contributed to this
> > + * project.
> > + *
> > + * This program is free software; you can redistribute it and/or
> > + * modify it under the terms of the GNU General Public License as
> > + * published by the Free Software Foundation; either version 2 of
> > + * the License, or (at your option) any later version.
> > + *
> > + * This program is distributed in the hope that it will be useful,
> > + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> > + * GNU General Public License for more details.
> > + *
> > + * You should have received a copy of the GNU General Public
> > License
> > + * along with this program; if not, write to the Free Software
> > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> > + * MA 02111-1307 USA
> > + */
> > +
> > +#include <common.h>
> > +#include <fat.h>
> > +#include <part.h>
> > +#include <errno.h>
> > +
> > +#define DOS_BOOT_MAGIC_OFFSET 0x1fe
> > +#define DOS_FS_TYPE_OFFSET 0x36
> > +#define DOS_FS32_TYPE_OFFSET 0x52
> > +
> > +static block_dev_desc_t *cur_dev;
> > +static unsigned int cur_part_nr;
> > +static disk_partition_t cur_part_info;
> > +
> > +int fat_disk_read(__u32 block, __u32 nr_blocks, void *buf)
> > +{
> > + if (!cur_dev || !cur_dev->block_read)
> > + return -1;
> > +
> > + return cur_dev->block_read(cur_dev->dev,
> > + cur_part_info.start + block, nr_blocks, buf);
> > +}
> > +
> > +int fat_disk_write(__u32 block, __u32 nr_blocks, void *buf)
> > +{
> > + if (!cur_dev || !cur_dev->block_read)
> > + return -1;
> > +
> > + return cur_dev->block_read(cur_dev->dev,
> > + cur_part_info.start + block, nr_blocks, buf);
> > +}
block_write...
Please, split this patch into:
- moved code + renaming,
- behavior changes (one patch per behavior change).
That will make things clearer and easier to review.
> > +
> > +int fat_get_blksz(void)
cur_dev->blksz is ulong, so long might be better here, even if it does not seem
strictly necessary.
> > +{
> > + if (cur_dev == NULL)
> > + return -EINVAL;
> > + return cur_dev->blksz;
Or cur_part_info.blksize? Your calls to this function replace both usages, so
please make sure that this won't cause any trouble.
> > +}
> > +
> > +int fat_get_partsize(void)
long?
> > +{
> > + if (cur_dev == NULL)
> > + return -EINVAL;
This test looks unrelated to the line below and changes the behavior where this
function is called. Please clarify.
> > + return cur_part_info.size;
> > +}
> > +
> > +int fat_register_device(block_dev_desc_t *dev_desc, int part_no)
> > +{
> > + ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
> > +
> > + /* First close any currently found FAT filesystem */
> > + cur_dev = NULL;
> > +
> > +#if (defined(CONFIG_CMD_IDE) || \
> > + defined(CONFIG_CMD_SATA) || \
> > + defined(CONFIG_CMD_SCSI) || \
> > + defined(CONFIG_CMD_USB) || \
> > + defined(CONFIG_MMC) || \
> > + defined(CONFIG_SYSTEMACE))
> > +
> > + /* Read the partition table, if present */
> > + if (!get_partition_info(dev_desc, part_no, &cur_part_info)) {
> > + cur_dev = dev_desc;
> > + cur_part_nr = part_no;
> > + }
> > +#endif
> > +
> > + /* Otherwise it might be a superfloppy (whole-disk FAT
> > filesystem) */
> > + if (!cur_dev) {
> > + if (part_no != 1) {
> > + printf("** Partition %d not valid on device %d **\n",
> > + part_no, dev_desc->dev);
> > + return -1;
> > + }
> > +
> > + cur_dev = dev_desc;
> > + cur_part_nr = 1;
> > + cur_part_info.start = 0;
> > + cur_part_info.size = dev_desc->lba;
> > + cur_part_info.blksz = dev_desc->blksz;
> > + memset(cur_part_info.name, 0, sizeof(cur_part_info.name));
> > + memset(cur_part_info.type, 0, sizeof(cur_part_info.type));
> > + }
> > +
> > + /* Make sure it has a valid FAT header */
> > + if (fat_disk_read(0, 1, buffer) != 1) {
> > + cur_dev = NULL;
> > + return -1;
> > + }
> > +
> > + /* Check if it's actually a DOS volume */
> > + if (memcmp(buffer + DOS_BOOT_MAGIC_OFFSET, "\x55\xAA", 2)) {
> > + cur_dev = NULL;
> > + return -1;
> > + }
> > +
> > + /* Check for FAT12/FAT16/FAT32 filesystem */
> > + if (!memcmp(buffer + DOS_FS_TYPE_OFFSET, "FAT", 3))
> > + return 0;
> > + if (!memcmp(buffer + DOS_FS32_TYPE_OFFSET, "FAT32", 5))
> > + return 0;
> > +
> > + cur_dev = NULL;
> > + return -1;
> > +}
> > +
> > +int file_fat_detectfs(void)
> > +{
> > + boot_sector bs;
> > + volume_info volinfo;
> > + int fatsize;
> > + char vol_label[12];
> > +
> > + if (cur_dev == NULL) {
> > + printf("No current device\n");
> > + return 1;
> > + }
> > +
> > +#if defined(CONFIG_CMD_IDE) || \
> > + defined(CONFIG_CMD_SATA) || \
> > + defined(CONFIG_CMD_SCSI) || \
> > + defined(CONFIG_CMD_USB) || \
> > + defined(CONFIG_MMC)
> > + printf("Interface: ");
> > + switch (cur_dev->if_type) {
> > + case IF_TYPE_IDE:
> > + printf("IDE");
> > + break;
> > + case IF_TYPE_SATA:
> > + printf("SATA");
> > + break;
> > + case IF_TYPE_SCSI:
> > + printf("SCSI");
> > + break;
> > + case IF_TYPE_ATAPI:
> > + printf("ATAPI");
> > + break;
> > + case IF_TYPE_USB:
> > + printf("USB");
> > + break;
> > + case IF_TYPE_DOC:
> > + printf("DOC");
> > + break;
> > + case IF_TYPE_MMC:
> > + printf("MMC");
> > + break;
> > + default:
> > + printf("Unknown");
> > + }
> > +
> > + printf("\n Device %d: ", cur_dev->dev);
> > + dev_print(cur_dev);
> > +#endif
> > +
> > + if (fat_read_bootsectandvi(&bs, &volinfo, &fatsize)) {
> > + printf("\nNo valid FAT fs found\n");
> > + return 1;
> > + }
> > +
> > + memcpy(vol_label, volinfo.volume_label, 11);
> > + vol_label[11] = '\0';
> > + volinfo.fs_type[5] = '\0';
> > +
> > + printf("Partition %d: Filesystem: %s \"%s\"\n", cur_part_nr,
> > + volinfo.fs_type, vol_label);
> > +
> > + return 0;
> > +}
> > +
> > diff --git a/fs/fat/fat.c b/fs/fat/fat.c
> > index 19f6a8c..a13c62b 100644
> > --- a/fs/fat/fat.c
> > +++ b/fs/fat/fat.c
> > @@ -45,84 +45,6 @@ static void downcase(char *str)
> > }
> > }
> >
> > -static block_dev_desc_t *cur_dev;
> > -static unsigned int cur_part_nr;
> > -static disk_partition_t cur_part_info;
> > -
> > -#define DOS_BOOT_MAGIC_OFFSET 0x1fe
> > -#define DOS_FS_TYPE_OFFSET 0x36
> > -#define DOS_FS32_TYPE_OFFSET 0x52
> > -
> > -static int disk_read(__u32 block, __u32 nr_blocks, void *buf)
> > -{
> > - if (!cur_dev || !cur_dev->block_read)
> > - return -1;
> > -
> > - return cur_dev->block_read(cur_dev->dev,
> > - cur_part_info.start + block, nr_blocks, buf);
> > -}
> > -
> > -int fat_register_device(block_dev_desc_t * dev_desc, int part_no)
> > -{
> > - ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
> > -
> > - /* First close any currently found FAT filesystem */
> > - cur_dev = NULL;
> > -
> > -#if (defined(CONFIG_CMD_IDE) || \
> > - defined(CONFIG_CMD_SATA) || \
> > - defined(CONFIG_CMD_SCSI) || \
> > - defined(CONFIG_CMD_USB) || \
> > - defined(CONFIG_MMC) || \
> > - defined(CONFIG_SYSTEMACE) )
> > -
> > - /* Read the partition table, if present */
> > - if (!get_partition_info(dev_desc, part_no, &cur_part_info)) {
> > - cur_dev = dev_desc;
> > - cur_part_nr = part_no;
> > - }
> > -#endif
> > -
> > - /* Otherwise it might be a superfloppy (whole-disk FAT
> > filesystem) */
> > - if (!cur_dev) {
> > - if (part_no != 1) {
> > - printf("** Partition %d not valid on device %d **\n",
> > - part_no, dev_desc->dev);
> > - return -1;
> > - }
> > -
> > - cur_dev = dev_desc;
> > - cur_part_nr = 1;
> > - cur_part_info.start = 0;
> > - cur_part_info.size = dev_desc->lba;
> > - cur_part_info.blksz = dev_desc->blksz;
> > - memset(cur_part_info.name, 0, sizeof(cur_part_info.name));
> > - memset(cur_part_info.type, 0, sizeof(cur_part_info.type));
> > - }
> > -
> > - /* Make sure it has a valid FAT header */
> > - if (disk_read(0, 1, buffer) != 1) {
> > - cur_dev = NULL;
> > - return -1;
> > - }
> > -
> > - /* Check if it's actually a DOS volume */
> > - if (memcmp(buffer + DOS_BOOT_MAGIC_OFFSET, "\x55\xAA", 2)) {
> > - cur_dev = NULL;
> > - return -1;
> > - }
> > -
> > - /* Check for FAT12/FAT16/FAT32 filesystem */
> > - if (!memcmp(buffer + DOS_FS_TYPE_OFFSET, "FAT", 3))
> > - return 0;
> > - if (!memcmp(buffer + DOS_FS32_TYPE_OFFSET, "FAT32", 5))
> > - return 0;
> > -
> > - cur_dev = NULL;
> > - return -1;
> > -}
> > -
> > -
> > /*
> > * Get the first occurence of a directory delimiter ('/' or '\')
> > in a
> > string. * Return index into string if found, -1 otherwise.
> > @@ -212,7 +134,7 @@ static __u32 get_fatent(fsdata *mydata, __u32
> > entry)
> >
> > startblock += mydata->fat_sect; /* Offset from start of disk */
> >
> > - if (disk_read(startblock, getsize, bufptr) < 0) {
> > + if (fat_disk_read(startblock, getsize, bufptr) < 0) {
> > debug("Error reading FAT blocks\n");
> > return ret;
> > }
> > @@ -290,7 +212,7 @@ get_cluster(fsdata *mydata, __u32 clustnum,
> > __u8
> > *buffer, unsigned long size) printf("FAT: Misaligned buffer address
> > (%p)\n", buffer);
> >
> > while (size >= mydata->sect_size) {
> > - ret = disk_read(startsect++, 1, tmpbuf);
> > + ret = fat_disk_read(startsect++, 1, tmpbuf);
> > if (ret != 1) {
> > debug("Error reading data (got %d)\n", ret);
> > return -1;
> > @@ -302,7 +224,7 @@ get_cluster(fsdata *mydata, __u32 clustnum,
> > __u8
> > *buffer, unsigned long size) }
> > } else {
> > idx = size / mydata->sect_size;
> > - ret = disk_read(startsect, idx, buffer);
> > + ret = fat_disk_read(startsect, idx, buffer);
> > if (ret != idx) {
> > debug("Error reading data (got %d)\n", ret);
> > return -1;
> > @@ -315,7 +237,7 @@ get_cluster(fsdata *mydata, __u32 clustnum,
> > __u8
> > *buffer, unsigned long size) if (size) {
> > ALLOC_CACHE_ALIGN_BUFFER(__u8, tmpbuf, mydata->sect_size);
> >
> > - ret = disk_read(startsect, 1, tmpbuf);
> > + ret = fat_disk_read(startsect, 1, tmpbuf);
> > if (ret != 1) {
> > debug("Error reading data (got %d)\n", ret);
> > return -1;
> > @@ -702,25 +624,28 @@ static dir_entry *get_dentfromdir(fsdata
> > *mydata, int
> > startsect, /*
> > * Read boot sector and volume info from a FAT filesystem
> > */
> > -static int
> > -read_bootsectandvi(boot_sector *bs, volume_info *volinfo, int
> > *fatsize)
> > +int
> > +fat_read_bootsectandvi(boot_sector *bs, volume_info *volinfo, int
> > *fatsize)
> > {
> > __u8 *block;
> > volume_info *vistart;
> > int ret = 0;
> > + int blksz;
> >
> > - if (cur_dev == NULL) {
> > + blksz = fat_get_blksz();
> > + if (blksz <= 0) {
> > + /*this means the device is NULL, or otherwise unavailable*/
> > debug("Error: no device selected\n");
> > return -1;
> > }
> >
> > - block = memalign(ARCH_DMA_MINALIGN, cur_dev->blksz);
> > + block = memalign(ARCH_DMA_MINALIGN, blksz);
> > if (block == NULL) {
> > debug("Error: allocating block\n");
> > return -1;
> > }
> >
> > - if (disk_read(0, 1, block) < 0) {
> > + if (fat_disk_read(0, 1, block) < 0) {
> > debug("Error: reading block\n");
> > goto fail;
> > }
> > @@ -792,11 +717,14 @@ do_fat_read(const char *filename, void
> > *buffer,
> > unsigned long maxsize, int dols) __u32 root_cluster = 0;
> > int rootdir_size = 0;
> > int j;
> > + int blksz;
> >
> > - if (read_bootsectandvi(&bs, &volinfo, &mydata->fatsize)) {
> > + if (fat_read_bootsectandvi(&bs, &volinfo, &mydata->fatsize)) {
> > debug("Error: reading boot sector\n");
> > return -1;
> > }
> > + /*this will always succeed, because it did in above call*/
> > + blksz = fat_get_blksz();
> >
> > if (mydata->fatsize == 32) {
> > root_cluster = bs.root_cluster;
> > @@ -812,9 +740,9 @@ do_fat_read(const char *filename, void *buffer,
> > unsigned
> > long maxsize, int dols)
> >
> > mydata->sect_size = (bs.sector_size[1] << 8) + bs.sector_size[0];
> > mydata->clust_size = bs.cluster_size;
> > - if (mydata->sect_size != cur_part_info.blksz) {
> > - printf("Error: FAT sector size mismatch (fs=%hu, dev=%lu)\n",
> > - mydata->sect_size, cur_part_info.blksz);
> > + if (mydata->sect_size != blksz) {
cur_part_info vs. cur_dev OK?
> > + printf("Error: FAT sector size mismatch (fs=%hu, dev=%d)\n",
> > + mydata->sect_size, blksz);
> > return -1;
> > }
> >
> > @@ -884,7 +812,7 @@ do_fat_read(const char *filename, void *buffer,
> > unsigned
> > long maxsize, int dols) debug("FAT read sect=%d, clust_size=%d,
> > DIRENTSPERBLOCK=%zd\n", cursect, mydata->clust_size,
> > DIRENTSPERBLOCK);
> >
> > - if (disk_read(cursect,
> > + if (fat_disk_read(cursect,
> > (mydata->fatsize == 32) ?
> > (mydata->clust_size) :
> > PREFETCH_BLOCKS,
> > @@ -1124,69 +1052,6 @@ exit:
> > return ret;
> > }
> >
> > -int file_fat_detectfs(void)
> > -{
> > - boot_sector bs;
> > - volume_info volinfo;
> > - int fatsize;
> > - char vol_label[12];
> > -
> > - if (cur_dev == NULL) {
> > - printf("No current device\n");
> > - return 1;
> > - }
> > -
> > -#if defined(CONFIG_CMD_IDE) || \
> > - defined(CONFIG_CMD_SATA) || \
> > - defined(CONFIG_CMD_SCSI) || \
> > - defined(CONFIG_CMD_USB) || \
> > - defined(CONFIG_MMC)
> > - printf("Interface: ");
> > - switch (cur_dev->if_type) {
> > - case IF_TYPE_IDE:
> > - printf("IDE");
> > - break;
> > - case IF_TYPE_SATA:
> > - printf("SATA");
> > - break;
> > - case IF_TYPE_SCSI:
> > - printf("SCSI");
> > - break;
> > - case IF_TYPE_ATAPI:
> > - printf("ATAPI");
> > - break;
> > - case IF_TYPE_USB:
> > - printf("USB");
> > - break;
> > - case IF_TYPE_DOC:
> > - printf("DOC");
> > - break;
> > - case IF_TYPE_MMC:
> > - printf("MMC");
> > - break;
> > - default:
> > - printf("Unknown");
> > - }
> > -
> > - printf("\n Device %d: ", cur_dev->dev);
> > - dev_print(cur_dev);
> > -#endif
> > -
> > - if (read_bootsectandvi(&bs, &volinfo, &fatsize)) {
> > - printf("\nNo valid FAT fs found\n");
> > - return 1;
> > - }
> > -
> > - memcpy(vol_label, volinfo.volume_label, 11);
> > - vol_label[11] = '\0';
> > - volinfo.fs_type[5] = '\0';
> > -
> > - printf("Partition %d: Filesystem: %s \"%s\"\n", cur_part_nr,
> > - volinfo.fs_type, vol_label);
> > -
> > - return 0;
> > -}
> > -
> > int file_fat_ls(const char *dir)
> > {
> > return do_fat_read(dir, NULL, 0, LS_YES);
> > diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c
> > index a6181e7..2e5bda9 100644
> > --- a/fs/fat/fat_write.c
> > +++ b/fs/fat/fat_write.c
Please get rid of the '#include "fat.c"'. This is the perfect opportunity to do
so.
> > @@ -43,17 +43,12 @@ static void uppercase(char *str, int len)
> > static int total_sector;
> > static int disk_write(__u32 block, __u32 nr_blocks, void *buf)
> > {
> > - if (!cur_dev || !cur_dev->block_write)
> > - return -1;
> > -
> > - if (cur_part_info.start + block + nr_blocks >
> > - cur_part_info.start + total_sector) {
> > + if (block + nr_blocks > total_sector) {
> > printf("error: overflow occurs\n");
> > return -1;
> > }
> >
> > - return cur_dev->block_write(cur_dev->dev,
> > - cur_part_info.start + block, nr_blocks, buf);
> > + return fat_disk_write(block, nr_blocks, buf);
> > }
Why don't you move that to dev.c as well?
> >
> > /*
> > @@ -196,7 +191,7 @@ static __u32 get_fatent_value(fsdata *mydata,
> > __u32
> > entry) return -1;
> > }
> >
> > - if (disk_read(startblock, getsize, bufptr) < 0) {
> > + if (fat_disk_read(startblock, getsize, bufptr) < 0) {
> > debug("Error reading FAT blocks\n");
> > return ret;
> > }
> > @@ -509,7 +504,7 @@ static int set_fatent_value(fsdata *mydata,
> > __u32 entry,
> > __u32 entry_value) return -1;
> > }
> >
> > - if (disk_read(startblock, getsize, bufptr) < 0) {
> > + if (fat_disk_read(startblock, getsize, bufptr) < 0) {
> > debug("Error reading FAT blocks\n");
> > return -1;
> > }
> > @@ -793,7 +788,7 @@ static int check_overflow(fsdata *mydata, __u32
> > clustnum, unsigned long size) if (size % mydata->sect_size)
> > sect_num++;
> >
> > - if (startsect + sect_num > cur_part_info.start + total_sector)
> > + if (startsect + sect_num > total_sector)
Are you certain? It depends on if mydata->data_begin and mydata->rootdir_sect
are disk- or partition-relative (I did not check).
Anyway, this is a change of behavior, so that should go into a separate patch.
> > return -1;
> >
> > return 0;
> > @@ -932,14 +927,14 @@ static int do_fat_write(const char *filename,
> > void
> > *buffer,
> >
> > dir_curclust = 0;
> >
> > - if (read_bootsectandvi(&bs, &volinfo, &mydata->fatsize)) {
> > + if (fat_read_bootsectandvi(&bs, &volinfo, &mydata->fatsize)) {
> > debug("error: reading boot sector\n");
> > return -1;
> > }
> >
> > total_sector = bs.total_sect;
> > if (total_sector == 0)
> > - total_sector = cur_part_info.size;
> > + total_sector = fat_get_partsize();
cur_dev was not tested here in the original code.
> >
> > if (mydata->fatsize == 32)
> > mydata->fatlength = bs.fat32_length;
> > @@ -977,7 +972,7 @@ static int do_fat_write(const char *filename,
> > void
> > *buffer, return -1;
> > }
> >
> > - if (disk_read(cursect,
> > + if (fat_disk_read(cursect,
> > (mydata->fatsize == 32) ?
> > (mydata->clust_size) :
> > PREFETCH_BLOCKS, do_fat_read_block) < 0) {
> > diff --git a/include/fat.h b/include/fat.h
> > index f1b4a0d..98f77a5 100644
> > --- a/include/fat.h
> > +++ b/include/fat.h
> > @@ -213,4 +213,11 @@ const char *file_getfsname(int idx);
> > int fat_register_device(block_dev_desc_t *dev_desc, int part_no);
> >
> > int file_fat_write(const char *filename, void *buffer, unsigned
> > long
> > maxsize); +
> > +/*internal functions for fs/blockdev API abstraction*/
> > +int fat_disk_read(__u32 block, __u32 nr_blocks, void *buf);
> > +int fat_disk_write(__u32 block, __u32 nr_blocks, void *buf);
> > +int fat_read_bootsectandvi(boot_sector *bs, volume_info *vi, int
> > *fatsize);
> > +int fat_get_blksz(void);
> > +int fat_get_partsize(void);
> > #endif /* _FAT_H_ */
Since these are FAT-private functions, shouldn't their declarations go to some
private header file in the fs/fat/ folder?
Best regards,
Benoît
More information about the U-Boot
mailing list