Commit 76eafe47 authored by Brijesh Singh's avatar Brijesh Singh Committed by Artem Bityutskiy

UBI: bugfix in sqnum calculation

Hi,I came across problem of having two leb with same sequence no.This
happens when we continuously write one block again and again and reboot
machine before background thread erases those blocks.
The problem here was,when we find two blocks with same sequence no,we take
the higher one,but we were not updating max seq no,so next block may have
the same seqnum.
This patch solves this problem.
Signed-off-by: default avatarBrijesh Singh <brijesh.s.singh@gmail.com>
Signed-off-by: default avatarArtem Bityutskiy <Artem.Bityutskiy@nokia.com>
parent 2f176f79
...@@ -437,6 +437,9 @@ int ubi_scan_add_used(const struct ubi_device *ubi, struct ubi_scan_info *si, ...@@ -437,6 +437,9 @@ int ubi_scan_add_used(const struct ubi_device *ubi, struct ubi_scan_info *si,
if (IS_ERR(sv) < 0) if (IS_ERR(sv) < 0)
return PTR_ERR(sv); return PTR_ERR(sv);
if (si->max_sqnum < sqnum)
si->max_sqnum = sqnum;
/* /*
* Walk the RB-tree of logical eraseblocks of volume @vol_id to look * Walk the RB-tree of logical eraseblocks of volume @vol_id to look
* if this is the first instance of this logical eraseblock or not. * if this is the first instance of this logical eraseblock or not.
...@@ -563,9 +566,6 @@ int ubi_scan_add_used(const struct ubi_device *ubi, struct ubi_scan_info *si, ...@@ -563,9 +566,6 @@ int ubi_scan_add_used(const struct ubi_device *ubi, struct ubi_scan_info *si,
sv->last_data_size = be32_to_cpu(vid_hdr->data_size); sv->last_data_size = be32_to_cpu(vid_hdr->data_size);
} }
if (si->max_sqnum < sqnum)
si->max_sqnum = sqnum;
sv->leb_count += 1; sv->leb_count += 1;
rb_link_node(&seb->u.rb, parent, p); rb_link_node(&seb->u.rb, parent, p);
rb_insert_color(&seb->u.rb, &sv->root); rb_insert_color(&seb->u.rb, &sv->root);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment