summaryrefslogtreecommitdiffstats
path: root/fs/ubifs
diff options
context:
space:
mode:
authorArtem Bityutskiy <Artem.Bityutskiy@nokia.com>2008-09-09 12:31:37 +0300
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>2008-09-30 11:12:58 +0300
commit403e12ab30ab160e1015bd998f0abc1865c574e0 (patch)
tree1682251f2a37d3a8df6b17646cba30e44e243d37 /fs/ubifs
parentaf2eb5637b88f7b8edf295ad3880706c5c30c324 (diff)
downloadlinux-403e12ab30ab160e1015bd998f0abc1865c574e0.tar.gz
linux-403e12ab30ab160e1015bd998f0abc1865c574e0.tar.bz2
linux-403e12ab30ab160e1015bd998f0abc1865c574e0.zip
UBIFS: commit on sync_fs
Commit the journal when the FS is sync'ed. This will make statfs provide better free space report. And we anyway advice our users to sync the FS if they want better statfs report. Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
Diffstat (limited to 'fs/ubifs')
-rw-r--r--fs/ubifs/super.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c
index dae1c62156c6..7e1f3efdf632 100644
--- a/fs/ubifs/super.c
+++ b/fs/ubifs/super.c
@@ -418,6 +418,7 @@ static int ubifs_sync_fs(struct super_block *sb, int wait)
{
struct ubifs_info *c = sb->s_fs_info;
int i, ret = 0, err;
+ long long bud_bytes;
if (c->jheads)
for (i = 0; i < c->jhead_cnt; i++) {
@@ -425,6 +426,17 @@ static int ubifs_sync_fs(struct super_block *sb, int wait)
if (err && !ret)
ret = err;
}
+
+ /* Commit the journal unless it has too few data */
+ spin_lock(&c->buds_lock);
+ bud_bytes = c->bud_bytes;
+ spin_unlock(&c->buds_lock);
+ if (bud_bytes > c->leb_size) {
+ err = ubifs_run_commit(c);
+ if (err)
+ return err;
+ }
+
/*
* We ought to call sync for c->ubi but it does not have one. If it had
* it would in turn call mtd->sync, however mtd operations are