UBIFS: do not start the commit if there is nothing to commit
authorArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Sun, 16 Jan 2011 17:22:02 +0000 (19:22 +0200)
committerArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
Tue, 25 Jan 2011 08:21:13 +0000 (10:21 +0200)
commit944fdef52ca9fc0fe077578f51201ef397e30abe
treec24c589edf911fcb66b0b1968fe3b283193787ff
parent18d1d7fbcc260e67d249bf90b454d8cf34288453
UBIFS: do not start the commit if there is nothing to commit

This patch fixes suboptimal UBIFS 'sync_fs()' implementation which causes
flash I/O even if the file-system is synchronized. E.g., a 'printk()'
in the MTD erasure function (e.g., 'nand_erase_nand()') can show that
for every 'sync' shell command UBIFS erases at least one eraseblock.

So '$ while true; do sync; done' will cause huge amount of flash I/O.

The reason for this is that UBIFS commits in 'sync_fs()', and starts the
commit even if there is nothing to commit, e.g., it anyway changes the
log. This patch adds a check in the 'do_commit()' UBIFS functions which
prevents the commit if there is nothing to commit.

Reported-by: Hans J. Koch <hjk@linutronix.de>
Tested-by: John Ogness <john.ogness@linutronix.de>
Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com>
fs/ubifs/commit.c