diff options
Diffstat (limited to 'cpukit/libfs/src/jffs2/src')
-rw-r--r-- | cpukit/libfs/src/jffs2/src/fs-rtems.c | 12 | ||||
-rw-r--r-- | cpukit/libfs/src/jffs2/src/os-rtems.h | 7 |
2 files changed, 18 insertions, 1 deletions
diff --git a/cpukit/libfs/src/jffs2/src/fs-rtems.c b/cpukit/libfs/src/jffs2/src/fs-rtems.c index 5f57a16bcb..8084776659 100644 --- a/cpukit/libfs/src/jffs2/src/fs-rtems.c +++ b/cpukit/libfs/src/jffs2/src/fs-rtems.c @@ -552,6 +552,15 @@ static void rtems_jffs2_get_info( info->bad_blocks = rtems_jffs2_count_blocks(&c->bad_list); } +static int rtems_jffs2_on_demand_garbage_collection(struct jffs2_sb_info *c) +{ + if (jffs2_thread_should_wake(c)) { + return -jffs2_garbage_collect_pass(c); + } else { + return 0; + } +} + static int rtems_jffs2_ioctl( rtems_libio_t *iop, ioctl_command_t request, @@ -568,6 +577,9 @@ static int rtems_jffs2_ioctl( rtems_jffs2_get_info(&inode->i_sb->jffs2_sb, buffer); eno = 0; break; + case RTEMS_JFFS2_ON_DEMAND_GARBAGE_COLLECTION: + eno = rtems_jffs2_on_demand_garbage_collection(&inode->i_sb->jffs2_sb); + break; case RTEMS_JFFS2_FORCE_GARBAGE_COLLECTION: eno = -jffs2_garbage_collect_pass(&inode->i_sb->jffs2_sb); break; diff --git a/cpukit/libfs/src/jffs2/src/os-rtems.h b/cpukit/libfs/src/jffs2/src/os-rtems.h index 7946f85566..8dbde681d8 100644 --- a/cpukit/libfs/src/jffs2/src/os-rtems.h +++ b/cpukit/libfs/src/jffs2/src/os-rtems.h @@ -120,7 +120,12 @@ static inline bool jffs2_is_readonly(struct jffs2_sb_info *c) static inline void jffs2_garbage_collect_trigger(struct jffs2_sb_info *c) { - /* We don't have a GC thread in RTEMS (yet) */ + const struct super_block *sb = OFNI_BS_2SFFJ(c); + rtems_jffs2_flash_control *fc = sb->s_flash_control; + + if (fc->trigger_garbage_collection != NULL) { + (*fc->trigger_garbage_collection)(fc); + } } /* fs-rtems.c */ |