Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

UBI: Wire-up ->fm_sem

Fastmap uses ->fm_sem to stop EBA changes while writing
a new fastmap.

Signed-off-by: Richard Weinberger <richard@nod.at>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>

authored by

Richard Weinberger and committed by
Artem Bityutskiy
8974b15c 77e6c2f0

+12
+12
drivers/mtd/ubi/eba.c
··· 340 340 341 341 dbg_eba("erase LEB %d:%d, PEB %d", vol_id, lnum, pnum); 342 342 343 + down_read(&ubi->fm_sem); 343 344 vol->eba_tbl[lnum] = UBI_LEB_UNMAPPED; 345 + up_read(&ubi->fm_sem); 344 346 err = ubi_wl_put_peb(ubi, vol_id, lnum, pnum, 0); 345 347 346 348 out_unlock: ··· 550 548 mutex_unlock(&ubi->buf_mutex); 551 549 ubi_free_vid_hdr(ubi, vid_hdr); 552 550 551 + down_read(&ubi->fm_sem); 553 552 vol->eba_tbl[lnum] = new_pnum; 553 + up_read(&ubi->fm_sem); 554 554 ubi_wl_put_peb(ubi, vol_id, lnum, pnum, 1); 555 555 556 556 ubi_msg("data was successfully recovered"); ··· 669 665 } 670 666 } 671 667 668 + down_read(&ubi->fm_sem); 672 669 vol->eba_tbl[lnum] = pnum; 670 + up_read(&ubi->fm_sem); 673 671 674 672 leb_write_unlock(ubi, vol_id, lnum); 675 673 ubi_free_vid_hdr(ubi, vid_hdr); ··· 789 783 } 790 784 791 785 ubi_assert(vol->eba_tbl[lnum] < 0); 786 + down_read(&ubi->fm_sem); 792 787 vol->eba_tbl[lnum] = pnum; 788 + up_read(&ubi->fm_sem); 793 789 794 790 leb_write_unlock(ubi, vol_id, lnum); 795 791 ubi_free_vid_hdr(ubi, vid_hdr); ··· 912 904 goto out_leb_unlock; 913 905 } 914 906 907 + down_read(&ubi->fm_sem); 915 908 vol->eba_tbl[lnum] = pnum; 909 + up_read(&ubi->fm_sem); 916 910 917 911 out_leb_unlock: 918 912 leb_write_unlock(ubi, vol_id, lnum); ··· 1161 1151 } 1162 1152 1163 1153 ubi_assert(vol->eba_tbl[lnum] == from); 1154 + down_read(&ubi->fm_sem); 1164 1155 vol->eba_tbl[lnum] = to; 1156 + up_read(&ubi->fm_sem); 1165 1157 1166 1158 out_unlock_buf: 1167 1159 mutex_unlock(&ubi->buf_mutex);