aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArtem Bityutskiy <artem.bityutskiy@linux.intel.com>2014-07-16 08:22:29 -0400
committerArtem Bityutskiy <artem.bityutskiy@linux.intel.com>2014-09-08 08:55:28 -0400
commitba29e721eb2df6df8f33c1f248388bb037a47914 (patch)
treee10db004cdbc4027d0046838ec9bee534a09f2c1
parent052c28073ff26f771d44ef33952a41d18dadd255 (diff)
UBIFS: fix free log space calculation
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. Cc: stable@vger.kernel.org Tested-by: hujianyang <hujianyang@huawei.com> Reported-by: hujianyang <hujianyang@huawei.com> Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
-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 9bd4aafd5c6f..c14628fbeee2 100644
--- a/fs/ubifs/log.c
+++ b/fs/ubifs/log.c
@@ -106,10 +106,14 @@ static inline long long empty_log_bytes(const struct ubifs_info *c)
106 h = (long long)c->lhead_lnum * c->leb_size + c->lhead_offs; 106 h = (long long)c->lhead_lnum * c->leb_size + c->lhead_offs;
107 t = (long long)c->ltail_lnum * c->leb_size; 107 t = (long long)c->ltail_lnum * c->leb_size;
108 108
109 if (h >= t) 109 if (h > t)
110 return c->log_bytes - h + t; 110 return c->log_bytes - h + t;
111 else 111 else if (h != t)
112 return t - h; 112 return t - h;
113 else if (c->lhead_lnum != c->ltail_lnum)
114 return 0;
115 else
116 return c->log_bytes;
113} 117}
114 118
115/** 119/**