Skip to content

Commit f80b5e8

Browse files
fs/littlefs Reduced-internal-fragmentaion
Two changes are done for this to sync the behaviour between Dhara and littleFS 1) We change littlefs_blocksize from fs->geo.erasesize (128 KB) to fs->geo.blocksize(2 KB). 2) As we are reserving some sectors (pages) for dhara inside files os/fs/driver/mtd/dhara/journal.c and os/fs/driver/mtd/dhara/map.c so we are going to give total pages - reserved pages as available blocks to Littlefs. Signed-off-by: Aditya Singh <aditya.s4@samsung.com> Signed-off-by: Aashish Lakhwara <aashish.l@samsung.com>
1 parent 361c20f commit f80b5e8

File tree

3 files changed

+24
-5
lines changed

3 files changed

+24
-5
lines changed

os/fs/driver/mtd/dhara.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,16 @@ static const struct block_operations g_dhara_bops = {
129129
* Private Functions
130130
****************************************************************************/
131131

132+
int sectors_reduced(FAR struct inode *inode)
133+
{
134+
FAR dhara_dev_t *dev;
135+
dev = inode->i_private;
136+
137+
struct dhara_map *m = &dev->map;
138+
int x = dhara_map_capacity(m);
139+
return x;
140+
}
141+
132142
static int dhara_convert_result(dhara_error_t err)
133143
{
134144
switch (err) {

os/fs/driver/mtd/dhara/map.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ dhara_sector_t dhara_map_capacity(const struct dhara_map *m)
119119
{
120120
const dhara_sector_t cap = dhara_journal_capacity(&m->journal);
121121
const dhara_sector_t reserve = cap / (m->gc_ratio + 1);
122-
const dhara_sector_t safety_margin = DHARA_MAX_RETRIES << m->journal.nand->log2_ppb;
122+
const dhara_sector_t safety_margin = DHARA_MAX_RETRIES;
123123

124124
if (reserve + safety_margin >= cap) {
125125
return 0;

os/fs/littlefs/lfs_vfs.c

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,16 @@ const struct mountpt_operations littlefs_operations = {
156156
/****************************************************************************
157157
* Private Functions
158158
****************************************************************************/
159+
extern int sectors_reduced(FAR struct inode *driver);
160+
int littlefs_blocks_reduced(FAR struct inode *driver)
161+
{
162+
int available_sectors;
163+
164+
available_sectors = sectors_reduced(driver);
165+
lldbg("available_sectors %lld \n", (long long)available_sectors);
166+
return available_sectors;
167+
}
168+
159169

160170
/****************************************************************************
161171
* Name: littlefs_semtake
@@ -454,7 +464,6 @@ static int littlefs_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
454464
else
455465
ret = -ENOTTY;
456466
}
457-
}
458467
return ret;
459468
}
460469

@@ -957,7 +966,7 @@ static int littlefs_bind(FAR struct inode *driver, FAR const void *data, FAR voi
957966
}
958967

959968
/* Initialize lfs_config structure */
960-
969+
int blocks_available = littlefs_blocks_reduced(driver);
961970
fs->cfg.context = fs;
962971
fs->cfg.read = littlefs_read_block;
963972
fs->cfg.prog = littlefs_write_block;
@@ -969,8 +978,8 @@ static int littlefs_bind(FAR struct inode *driver, FAR const void *data, FAR voi
969978
#endif
970979
fs->cfg.read_size = fs->geo.blocksize;
971980
fs->cfg.prog_size = fs->geo.blocksize;
972-
fs->cfg.block_size = fs->geo.erasesize;
973-
fs->cfg.block_count = fs->geo.neraseblocks;
981+
fs->cfg.block_size = fs->geo.blocksize;
982+
fs->cfg.block_count = blocks_available-1;
974983
fs->cfg.block_cycles = 500;
975984
fs->cfg.cache_size = fs->geo.blocksize;
976985
fs->cfg.lookahead_size = lfs_min(lfs_alignup(fs->cfg.block_count, 64) / 8, fs->cfg.read_size);

0 commit comments

Comments
 (0)