aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ubifs
diff options
context:
space:
mode:
authorArtem Bityutskiy <artem.bityutskiy@linux.intel.com>2014-07-16 15:22:29 +0300
committerBen Hutchings <ben@decadent.org.uk>2014-12-14 16:23:41 +0000
commit721292b00ea97481ac23bd116b7b1252e3efa9f7 (patch)
tree7d69754f8ab0c7209c8843d94445bb118a02ab5d /fs/ubifs
parent9cb35c87fc52ddc406e4835e4a56c7e1b20aefff (diff)
downloadkernel_samsung_smdk4412-721292b00ea97481ac23bd116b7b1252e3efa9f7.zip
kernel_samsung_smdk4412-721292b00ea97481ac23bd116b7b1252e3efa9f7.tar.gz
kernel_samsung_smdk4412-721292b00ea97481ac23bd116b7b1252e3efa9f7.tar.bz2
UBIFS: fix free log space calculation
commit ba29e721eb2df6df8f33c1f248388bb037a47914 upstream. Hu (hujianyang <hujianyang@huawei.com>) discovered an issue in the 'empty_log_bytes()' function, which calculates how many bytes are left in the log: " If 'c->lhead_lnum + 1 == c->ltail_lnum' and 'c->lhead_offs == c->leb_size', 'h' would equalent to 't' and 'empty_log_bytes()' would return 'c->log_bytes' instead of 0. " At this point it is not clear what would be the consequences of this, and whether this may lead to any problems, but this patch addresses the issue just in case. Tested-by: hujianyang <hujianyang@huawei.com> Reported-by: hujianyang <hujianyang@huawei.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'fs/ubifs')
-rw-r--r--fs/ubifs/log.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/fs/ubifs/log.c b/fs/ubifs/log.c
index 7ed9a37..843beda 100644
--- a/fs/ubifs/log.c
+++ b/fs/ubifs/log.c
@@ -110,10 +110,14 @@ static inline long long empty_log_bytes(const struct ubifs_info *c)
h = (long long)c->lhead_lnum * c->leb_size + c->lhead_offs;
t = (long long)c->ltail_lnum * c->leb_size;
- if (h >= t)
+ if (h > t)
return c->log_bytes - h + t;
- else
+ else if (h != t)
return t - h;
+ else if (c->lhead_lnum != c->ltail_lnum)
+ return 0;
+ else
+ return c->log_bytes;
}
/**