Message ID | 20190524051039.32460-4-takahiro.akashi@linaro.org |
---|---|
State | Accepted, archived |
Delegated to: | Tom Rini |
Headers | show |
Series | fs: fat: fixes for write under root directory | expand |
On Fri, May 24, 2019 at 02:10:37PM +0900, AKASHI Takahiro wrote: > Contrary to fat12/16, fat32 can have root directory at any location > and its size can be expanded. > Without this patch, root directory won't grow properly and so we will > eventually fail to add files under root directory. Please note that this > can happen even if you delete many files as deleted directory entries > are not reclaimed but just marked as "deleted" under the current > implementation. > > Signed-off-by: AKASHI Takahiro <takahiro.akashi@linaro.org> > Tested-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Applied to u-boot/master, thanks!
diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c index da1753d545ac..3bb9eac097eb 100644 --- a/fs/fat/fat_write.c +++ b/fs/fat/fat_write.c @@ -247,8 +247,11 @@ fill_dir_slot(fat_itr *itr, const char *l_name) if (itr->remaining == 0) flush_dir(itr); + /* allocate a cluster for more entries */ if (!fat_itr_next(itr)) - if (!itr->dent && !itr->is_root && new_dir_table(itr)) + if (!itr->dent && + (!itr->is_root || itr->fsdata->fatsize == 32) && + new_dir_table(itr)) return -1; } @@ -980,7 +983,10 @@ static dir_entry *find_directory_entry(fat_itr *itr, char *filename) return itr->dent; } - if (!itr->dent && !itr->is_root && new_dir_table(itr)) + /* allocate a cluster for more entries */ + if (!itr->dent && + (!itr->is_root || itr->fsdata->fatsize == 32) && + new_dir_table(itr)) /* indicate that allocating dent failed */ itr->dent = NULL;