summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--fs/fat/fat_write.c19
1 files changed, 7 insertions, 12 deletions
diff --git a/fs/fat/fat_write.c b/fs/fat/fat_write.c
index c9ecee588ae..53f3a5838f5 100644
--- a/fs/fat/fat_write.c
+++ b/fs/fat/fat_write.c
@@ -824,15 +824,7 @@ static int new_dir_table(fat_itr *itr)
int dir_oldclust = itr->clust;
unsigned int bytesperclust = mydata->clust_size * mydata->sect_size;
- if (mydata->fatsize == 32) {
- dir_newclust = find_empty_cluster(mydata);
- } else {
- dir_newclust = itr->clust + 1;
- if (dir_newclust > 1) {
- printf("error: fail to get empty clust for directory entry\n");
- return -1;
- }
- }
+ dir_newclust = find_empty_cluster(mydata);
/*
* Flush before updating FAT to ensure valid directory structure
@@ -844,10 +836,13 @@ static int new_dir_table(fat_itr *itr)
if (flush_dir(itr))
return -EIO;
- if (mydata->fatsize == 32) {
- set_fatent_value(mydata, dir_oldclust, dir_newclust);
+ set_fatent_value(mydata, dir_oldclust, dir_newclust);
+ if (mydata->fatsize == 32)
set_fatent_value(mydata, dir_newclust, 0xffffff8);
- }
+ else if (mydata->fatsize == 16)
+ set_fatent_value(mydata, dir_newclust, 0xfff8);
+ else if (mydata->fatsize == 12)
+ set_fatent_value(mydata, dir_newclust, 0xff8);
if (flush_dirty_fat_buffer(mydata) < 0)
return -EIO;