Lines Matching defs:lnum
22 * They are indexed by (@vol_id, @lnum) pairs.
100 * @lnum: logical eraseblock number
107 void ubi_eba_get_ldesc(struct ubi_volume *vol, int lnum,
110 ldesc->lnum = lnum;
111 ldesc->pnum = vol->eba_tbl->entries[lnum].pnum;
204 * @lnum: logical eraseblock number
211 int lnum)
226 if (lnum < le->lnum)
228 else if (lnum > le->lnum)
242 * @lnum: logical eraseblock number
244 * This function adds new entry for logical eraseblock (@vol_id, @lnum) to the
250 int vol_id, int lnum)
261 le->lnum = lnum;
264 le1 = ltree_lookup(ubi, vol_id, lnum);
292 ubi_assert(lnum != le1->lnum);
293 if (lnum < le1->lnum)
314 * @lnum: logical eraseblock number
319 static int leb_read_lock(struct ubi_device *ubi, int vol_id, int lnum)
323 le = ltree_add_entry(ubi, vol_id, lnum);
334 * @lnum: logical eraseblock number
336 static void leb_read_unlock(struct ubi_device *ubi, int vol_id, int lnum)
341 le = ltree_lookup(ubi, vol_id, lnum);
356 * @lnum: logical eraseblock number
361 static int leb_write_lock(struct ubi_device *ubi, int vol_id, int lnum)
365 le = ltree_add_entry(ubi, vol_id, lnum);
376 * @lnum: logical eraseblock number
383 static int leb_write_trylock(struct ubi_device *ubi, int vol_id, int lnum)
387 le = ltree_add_entry(ubi, vol_id, lnum);
410 * @lnum: logical eraseblock number
412 static void leb_write_unlock(struct ubi_device *ubi, int vol_id, int lnum)
417 le = ltree_lookup(ubi, vol_id, lnum);
431 * @lnum: logical eraseblock number
435 bool ubi_eba_is_mapped(struct ubi_volume *vol, int lnum)
437 return vol->eba_tbl->entries[lnum].pnum >= 0;
444 * @lnum: logical eraseblock number
446 * This function un-maps logical eraseblock @lnum and schedules corresponding
451 int lnum)
458 err = leb_write_lock(ubi, vol_id, lnum);
462 pnum = vol->eba_tbl->entries[lnum].pnum;
467 dbg_eba("erase LEB %d:%d, PEB %d", vol_id, lnum, pnum);
470 vol->eba_tbl->entries[lnum].pnum = UBI_LEB_UNMAPPED;
472 err = ubi_wl_put_peb(ubi, vol_id, lnum, pnum, 0);
475 leb_write_unlock(ubi, vol_id, lnum);
484 * @lnum: logical eraseblock number
497 static int check_mapping(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
507 if (!vol->checkmap || test_bit(lnum, vol->checkmap))
532 vol->eba_tbl->entries[lnum].pnum = UBI_LEB_UNMAPPED;
534 ubi_wl_put_peb(ubi, vol->vol_id, lnum, *pnum, torture);
549 found_lnum = be32_to_cpu(vid_hdr->lnum);
551 if (found_lnum != lnum || found_vol_id != vol->vol_id) {
553 *pnum, found_vol_id, found_lnum, vol->vol_id, lnum);
560 set_bit(lnum, vol->checkmap);
569 static int check_mapping(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
580 * @lnum: logical eraseblock number
586 * If the logical eraseblock @lnum is unmapped, @buf is filled with 0xFF
595 int ubi_eba_read_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
603 err = leb_read_lock(ubi, vol_id, lnum);
607 pnum = vol->eba_tbl->entries[lnum].pnum;
609 err = check_mapping(ubi, vol, lnum, &pnum);
621 len, offset, vol_id, lnum);
622 leb_read_unlock(ubi, vol_id, lnum);
629 len, offset, vol_id, lnum, pnum);
658 pnum, vol_id, lnum);
686 ubi_assert(lnum < be32_to_cpu(vid_hdr->used_ebs));
723 leb_read_unlock(ubi, vol_id, lnum);
729 leb_read_unlock(ubi, vol_id, lnum);
737 * @lnum: logical eraseblock number
748 struct ubi_sgl *sgl, int lnum, int offset, int len,
763 ret = ubi_eba_read_leb(ubi, vol, lnum,
792 * @lnum: logical eraseblock number
806 static int try_recover_peb(struct ubi_volume *vol, int pnum, int lnum,
866 vol->eba_tbl->entries[lnum].pnum = new_pnum;
872 ubi_wl_put_peb(ubi, vol_id, lnum, pnum, 1);
879 ubi_wl_put_peb(ubi, vol_id, lnum, new_pnum, 1);
891 * @lnum: logical eraseblock number
902 static int recover_peb(struct ubi_device *ubi, int pnum, int vol_id, int lnum,
916 err = try_recover_peb(vol, pnum, lnum, buf, offset, len, vidb,
932 * @lnum: logical eraseblock number
939 * eraseblock @lnum of volume @vol to a new physical eraseblock. Returns zero
944 static int try_write_vid_and_data(struct ubi_volume *vol, int lnum,
957 opnum = vol->eba_tbl->entries[lnum].pnum;
960 len, offset, vol_id, lnum, pnum);
965 vol_id, lnum, pnum);
974 len, offset, vol_id, lnum, pnum);
979 vol->eba_tbl->entries[lnum].pnum = pnum;
985 err2 = ubi_wl_put_peb(ubi, vol_id, lnum, pnum, 1);
991 err2 = ubi_wl_put_peb(ubi, vol_id, lnum, opnum, 0);
1005 * @lnum: logical eraseblock number
1010 * This function writes data to logical eraseblock @lnum of a dynamic volume
1016 int ubi_eba_write_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
1026 err = leb_write_lock(ubi, vol_id, lnum);
1030 pnum = vol->eba_tbl->entries[lnum].pnum;
1032 err = check_mapping(ubi, vol, lnum, &pnum);
1039 len, offset, vol_id, lnum, pnum);
1045 err = recover_peb(ubi, pnum, vol_id, lnum, buf,
1058 leb_write_unlock(ubi, vol_id, lnum);
1067 vid_hdr->lnum = cpu_to_be32(lnum);
1072 err = try_write_vid_and_data(vol, lnum, vidb, buf, offset, len);
1092 leb_write_unlock(ubi, vol_id, lnum);
1101 * @lnum: logical eraseblock number
1106 * This function writes data to logical eraseblock @lnum of static volume
1120 int lnum, const void *buf, int len, int used_ebs)
1130 if (lnum == used_ebs - 1)
1142 err = leb_write_lock(ubi, vol_id, lnum);
1148 vid_hdr->lnum = cpu_to_be32(lnum);
1158 ubi_assert(vol->eba_tbl->entries[lnum].pnum < 0);
1161 err = try_write_vid_and_data(vol, lnum, vidb, buf, 0, len);
1172 leb_write_unlock(ubi, vol_id, lnum);
1184 * @lnum: logical eraseblock number
1198 int lnum, const void *buf, int len)
1213 err = ubi_eba_unmap_leb(ubi, vol, lnum);
1216 return ubi_eba_write_leb(ubi, vol, lnum, NULL, 0, 0);
1226 err = leb_write_lock(ubi, vol_id, lnum);
1232 vid_hdr->lnum = cpu_to_be32(lnum);
1242 dbg_eba("change LEB %d:%d", vol_id, lnum);
1245 err = try_write_vid_and_data(vol, lnum, vidb, buf, 0, len);
1261 leb_write_unlock(ubi, vol_id, lnum);
1313 int err, vol_id, lnum, data_size, aldata_size, idx;
1321 lnum = be32_to_cpu(vid_hdr->lnum);
1323 dbg_wl("copy LEB %d:%d, PEB %d to PEB %d", vol_id, lnum, from, to);
1363 err = leb_write_trylock(ubi, vol_id, lnum);
1365 dbg_wl("contention on LEB %d:%d, cancel", vol_id, lnum);
1374 if (vol->eba_tbl->entries[lnum].pnum != from) {
1376 vol_id, lnum, from, vol->eba_tbl->entries[lnum].pnum);
1461 ubi_assert(vol->eba_tbl->entries[lnum].pnum == from);
1462 vol->eba_tbl->entries[lnum].pnum = to;
1467 leb_write_unlock(ubi, vol_id, lnum);
1574 scan_eba[i][aeb->lnum] = aeb->pnum;
1581 fm_eba[i][aeb->lnum] = aeb->pnum;
1658 if (aeb->lnum >= vol->reserved_pebs) {
1667 entry = &vol->eba_tbl->entries[aeb->lnum];