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;
205 * @lnum: logical eraseblock number
212 int lnum)
227 if (lnum < le->lnum)
229 else if (lnum > le->lnum)
243 * @lnum: logical eraseblock number
245 * This function adds new entry for logical eraseblock (@vol_id, @lnum) to the
251 int vol_id, int lnum)
262 le->lnum = lnum;
265 le1 = ltree_lookup(ubi, vol_id, lnum);
293 ubi_assert(lnum != le1->lnum);
294 if (lnum < le1->lnum)
315 * @lnum: logical eraseblock number
320 static int leb_read_lock(struct ubi_device *ubi, int vol_id, int lnum)
324 le = ltree_add_entry(ubi, vol_id, lnum);
335 * @lnum: logical eraseblock number
337 static void leb_read_unlock(struct ubi_device *ubi, int vol_id, int lnum)
342 le = ltree_lookup(ubi, vol_id, lnum);
357 * @lnum: logical eraseblock number
362 static int leb_write_lock(struct ubi_device *ubi, int vol_id, int lnum)
366 le = ltree_add_entry(ubi, vol_id, lnum);
377 * @lnum: logical eraseblock number
384 static int leb_write_trylock(struct ubi_device *ubi, int vol_id, int lnum)
388 le = ltree_add_entry(ubi, vol_id, lnum);
411 * @lnum: logical eraseblock number
413 static void leb_write_unlock(struct ubi_device *ubi, int vol_id, int lnum)
418 le = ltree_lookup(ubi, vol_id, lnum);
432 * @lnum: logical eraseblock number
436 bool ubi_eba_is_mapped(struct ubi_volume *vol, int lnum)
438 return vol->eba_tbl->entries[lnum].pnum >= 0;
445 * @lnum: logical eraseblock number
447 * This function un-maps logical eraseblock @lnum and schedules corresponding
452 int lnum)
459 err = leb_write_lock(ubi, vol_id, lnum);
463 pnum = vol->eba_tbl->entries[lnum].pnum;
468 dbg_eba("erase LEB %d:%d, PEB %d", vol_id, lnum, pnum);
471 vol->eba_tbl->entries[lnum].pnum = UBI_LEB_UNMAPPED;
473 err = ubi_wl_put_peb(ubi, vol_id, lnum, pnum, 0);
476 leb_write_unlock(ubi, vol_id, lnum);
485 * @lnum: logical eraseblock number
498 static int check_mapping(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
508 if (!vol->checkmap || test_bit(lnum, vol->checkmap))
533 vol->eba_tbl->entries[lnum].pnum = UBI_LEB_UNMAPPED;
535 ubi_wl_put_peb(ubi, vol->vol_id, lnum, *pnum, torture);
550 found_lnum = be32_to_cpu(vid_hdr->lnum);
552 if (found_lnum != lnum || found_vol_id != vol->vol_id) {
554 *pnum, found_vol_id, found_lnum, vol->vol_id, lnum);
561 set_bit(lnum, vol->checkmap);
570 static int check_mapping(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
581 * @lnum: logical eraseblock number
587 * If the logical eraseblock @lnum is unmapped, @buf is filled with 0xFF
596 int ubi_eba_read_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
604 err = leb_read_lock(ubi, vol_id, lnum);
608 pnum = vol->eba_tbl->entries[lnum].pnum;
610 err = check_mapping(ubi, vol, lnum, &pnum);
622 len, offset, vol_id, lnum);
623 leb_read_unlock(ubi, vol_id, lnum);
630 len, offset, vol_id, lnum, pnum);
659 pnum, vol_id, lnum);
687 ubi_assert(lnum < be32_to_cpu(vid_hdr->used_ebs));
724 leb_read_unlock(ubi, vol_id, lnum);
730 leb_read_unlock(ubi, vol_id, lnum);
738 * @lnum: logical eraseblock number
749 struct ubi_sgl *sgl, int lnum, int offset, int len,
764 ret = ubi_eba_read_leb(ubi, vol, lnum,
793 * @lnum: logical eraseblock number
807 static int try_recover_peb(struct ubi_volume *vol, int pnum, int lnum,
867 vol->eba_tbl->entries[lnum].pnum = new_pnum;
873 ubi_wl_put_peb(ubi, vol_id, lnum, pnum, 1);
880 ubi_wl_put_peb(ubi, vol_id, lnum, new_pnum, 1);
892 * @lnum: logical eraseblock number
903 static int recover_peb(struct ubi_device *ubi, int pnum, int vol_id, int lnum,
917 err = try_recover_peb(vol, pnum, lnum, buf, offset, len, vidb,
933 * @lnum: logical eraseblock number
940 * eraseblock @lnum of volume @vol to a new physical eraseblock. Returns zero
945 static int try_write_vid_and_data(struct ubi_volume *vol, int lnum,
958 opnum = vol->eba_tbl->entries[lnum].pnum;
961 len, offset, vol_id, lnum, pnum);
966 vol_id, lnum, pnum);
975 len, offset, vol_id, lnum, pnum);
980 vol->eba_tbl->entries[lnum].pnum = pnum;
986 err2 = ubi_wl_put_peb(ubi, vol_id, lnum, pnum, 1);
992 err2 = ubi_wl_put_peb(ubi, vol_id, lnum, opnum, 0);
1006 * @lnum: logical eraseblock number
1011 * This function writes data to logical eraseblock @lnum of a dynamic volume
1017 int ubi_eba_write_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
1027 err = leb_write_lock(ubi, vol_id, lnum);
1031 pnum = vol->eba_tbl->entries[lnum].pnum;
1033 err = check_mapping(ubi, vol, lnum, &pnum);
1040 len, offset, vol_id, lnum, pnum);
1046 err = recover_peb(ubi, pnum, vol_id, lnum, buf,
1059 leb_write_unlock(ubi, vol_id, lnum);
1068 vid_hdr->lnum = cpu_to_be32(lnum);
1073 err = try_write_vid_and_data(vol, lnum, vidb, buf, offset, len);
1093 leb_write_unlock(ubi, vol_id, lnum);
1102 * @lnum: logical eraseblock number
1107 * This function writes data to logical eraseblock @lnum of static volume
1121 int lnum, const void *buf, int len, int used_ebs)
1131 if (lnum == used_ebs - 1)
1143 err = leb_write_lock(ubi, vol_id, lnum);
1149 vid_hdr->lnum = cpu_to_be32(lnum);
1159 ubi_assert(vol->eba_tbl->entries[lnum].pnum < 0);
1162 err = try_write_vid_and_data(vol, lnum, vidb, buf, 0, len);
1173 leb_write_unlock(ubi, vol_id, lnum);
1185 * @lnum: logical eraseblock number
1199 int lnum, const void *buf, int len)
1214 err = ubi_eba_unmap_leb(ubi, vol, lnum);
1217 return ubi_eba_write_leb(ubi, vol, lnum, NULL, 0, 0);
1227 err = leb_write_lock(ubi, vol_id, lnum);
1233 vid_hdr->lnum = cpu_to_be32(lnum);
1243 dbg_eba("change LEB %d:%d", vol_id, lnum);
1246 err = try_write_vid_and_data(vol, lnum, vidb, buf, 0, len);
1262 leb_write_unlock(ubi, vol_id, lnum);
1314 int err, vol_id, lnum, data_size, aldata_size, idx;
1322 lnum = be32_to_cpu(vid_hdr->lnum);
1324 dbg_wl("copy LEB %d:%d, PEB %d to PEB %d", vol_id, lnum, from, to);
1364 err = leb_write_trylock(ubi, vol_id, lnum);
1366 dbg_wl("contention on LEB %d:%d, cancel", vol_id, lnum);
1375 if (vol->eba_tbl->entries[lnum].pnum != from) {
1377 vol_id, lnum, from, vol->eba_tbl->entries[lnum].pnum);
1462 ubi_assert(vol->eba_tbl->entries[lnum].pnum == from);
1463 vol->eba_tbl->entries[lnum].pnum = to;
1468 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];