aboutsummaryrefslogtreecommitdiffstats
path: root/fs
diff options
context:
space:
mode:
authorArtem Bityutskiy <Artem.Bityutskiy@nokia.com>2008-12-28 02:11:02 -0500
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>2008-12-31 07:13:24 -0500
commit26d05777b0a23062a39e83c369c0a3583918f164 (patch)
tree1e5f86365d63b81c4f0641c63c14e6d9b623c251 /fs
parentcb5c6a2b2be59b480a3746c5113cb3411c053bff (diff)
UBIFS: always commit on unmount
UBIFS commits on unmount to make the next mount faster. Currently, it commits only if there is more than LEB size bytes in the journal. This is not very good, because journal size may be large (512KiB). And there may be few deletions in the journal which do not take much journal space, but which do introduce a lot of TNC changes and make mount slow. Thus, jurt remove this condition and always commit. Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/ubifs/super.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c
index a14703e0a9a..1c1bbe4135c 100644
--- a/fs/ubifs/super.c
+++ b/fs/ubifs/super.c
@@ -1570,20 +1570,24 @@ out:
1570 * @c: UBIFS file-system description object 1570 * @c: UBIFS file-system description object
1571 * 1571 *
1572 * This function is called during un-mounting and re-mounting, and it commits 1572 * This function is called during un-mounting and re-mounting, and it commits
1573 * the journal unless the "fast unmount" mode is enabled. It also avoids 1573 * the journal unless the "fast unmount" mode is enabled.
1574 * committing the journal if it contains too few data.
1575 */ 1574 */
1576static void commit_on_unmount(struct ubifs_info *c) 1575static void commit_on_unmount(struct ubifs_info *c)
1577{ 1576{
1578 if (!c->fast_unmount) { 1577 struct super_block *sb = c->vfs_sb;
1579 long long bud_bytes; 1578 long long bud_bytes;
1580 1579
1581 spin_lock(&c->buds_lock); 1580 /*
1582 bud_bytes = c->bud_bytes; 1581 * This function is called before the background thread is stopped, so
1583 spin_unlock(&c->buds_lock); 1582 * we may race with ongoing commit, which means we have to take
1584 if (bud_bytes > c->leb_size) 1583 * @c->bud_lock to access @c->bud_bytes.
1585 ubifs_run_commit(c); 1584 */
1586 } 1585 spin_lock(&c->buds_lock);
1586 bud_bytes = c->bud_bytes;
1587 spin_unlock(&c->buds_lock);
1588
1589 if (!c->fast_unmount && !(sb->s_flags & MS_RDONLY) && bud_bytes)
1590 ubifs_run_commit(c);
1587} 1591}
1588 1592
1589/** 1593/**
@@ -2009,7 +2013,7 @@ static void ubifs_kill_sb(struct super_block *sb)
2009 * We do 'commit_on_unmount()' here instead of 'ubifs_put_super()' 2013 * We do 'commit_on_unmount()' here instead of 'ubifs_put_super()'
2010 * in order to be outside BKL. 2014 * in order to be outside BKL.
2011 */ 2015 */
2012 if (sb->s_root && !(sb->s_flags & MS_RDONLY)) 2016 if (sb->s_root)
2013 commit_on_unmount(c); 2017 commit_on_unmount(c);
2014 /* The un-mount routine is actually done in put_super() */ 2018 /* The un-mount routine is actually done in put_super() */
2015 generic_shutdown_super(sb); 2019 generic_shutdown_super(sb);