Lines Matching refs:lba
133 static int msb_get_zone_from_lba(int lba) in msb_get_zone_from_lba() argument
135 if (lba < 494) in msb_get_zone_from_lba()
137 return ((lba - 494) / 496) + 1; in msb_get_zone_from_lba()
1001 u16 pba, u32 lba, struct scatterlist *sg, int offset) in msb_write_block() argument
1016 if (pba >= msb->block_count || lba >= msb->logical_block_count) { in msb_write_block()
1022 if (msb_get_zone_from_lba(lba) != msb_get_zone_from_pba(pba)) { in msb_write_block()
1044 msb->regs.extra_data.logical_address = cpu_to_be16(lba); in msb_write_block()
1117 static int msb_update_block(struct msb_data *msb, u16 lba, in msb_update_block() argument
1123 pba = msb->lba_to_pba_table[lba]; in msb_update_block()
1124 dbg_verbose("start of a block update at lba %d, pba %d", lba, pba); in msb_update_block()
1134 msb_get_zone_from_lba(lba)); in msb_update_block()
1143 error = msb_write_block(msb, new_pba, lba, sg, offset); in msb_update_block()
1154 msb->lba_to_pba_table[lba] = new_pba; in msb_update_block()
1373 u16 pba, lba, other_block; in msb_ftl_scan() local
1415 lba = be16_to_cpu(extra.logical_address); in msb_ftl_scan()
1445 if (lba == MS_BLOCK_INVALID) { in msb_ftl_scan()
1453 if (msb_get_zone_from_lba(lba) != msb_get_zone_from_pba(pba)) { in msb_ftl_scan()
1455 pba, lba); in msb_ftl_scan()
1461 if (msb->lba_to_pba_table[lba] == MS_BLOCK_INVALID) { in msb_ftl_scan()
1462 dbg_verbose("pba %05d -> [lba %05d]", pba, lba); in msb_ftl_scan()
1463 msb->lba_to_pba_table[lba] = pba; in msb_ftl_scan()
1467 other_block = msb->lba_to_pba_table[lba]; in msb_ftl_scan()
1476 msb->lba_to_pba_table[lba] = pba; in msb_ftl_scan()
1491 msb->lba_to_pba_table[lba] = pba; in msb_ftl_scan()
1538 u16 pba, lba; in msb_cache_flush() local
1546 lba = msb->cache_block_lba; in msb_cache_flush()
1547 pba = msb->lba_to_pba_table[lba]; in msb_cache_flush()
1563 page, lba); in msb_cache_flush()
1606 static int msb_cache_write(struct msb_data *msb, int lba, in msb_cache_write() argument
1616 lba != msb->cache_block_lba) in msb_cache_write()
1622 lba != msb->cache_block_lba) { in msb_cache_write()
1630 msb->cache_block_lba = lba; in msb_cache_write()
1635 dbg_verbose("Write of LBA %d page %d to cache ", lba, page); in msb_cache_write()
1647 static int msb_cache_read(struct msb_data *msb, int lba, in msb_cache_read() argument
1650 int pba = msb->lba_to_pba_table[lba]; in msb_cache_read()
1654 if (lba == msb->cache_block_lba && in msb_cache_read()
1658 lba, pba, page); in msb_cache_read()
1668 lba, pba, page); in msb_cache_read()
1674 msb_cache_write(msb, lba, page, true, sg, offset); in msb_cache_read()
1811 static int msb_do_write_request(struct msb_data *msb, int lba, in msb_do_write_request() argument
1821 if (msb->cache_block_lba == lba) in msb_do_write_request()
1824 dbg_verbose("Writing whole lba %d", lba); in msb_do_write_request()
1825 error = msb_update_block(msb, lba, sg, offset); in msb_do_write_request()
1831 lba++; in msb_do_write_request()
1835 error = msb_cache_write(msb, lba, page, false, sg, offset); in msb_do_write_request()
1845 lba++; in msb_do_write_request()
1851 static int msb_do_read_request(struct msb_data *msb, int lba, in msb_do_read_request() argument
1860 error = msb_cache_read(msb, lba, page, sg, offset); in msb_do_read_request()
1870 lba++; in msb_do_read_request()
1880 sector_t lba; in msb_io_work() local
1909 lba = blk_rq_pos(req); in msb_io_work()
1911 sector_div(lba, msb->page_size / 512); in msb_io_work()
1912 page = sector_div(lba, msb->pages_in_block); in msb_io_work()
1915 error = msb_do_read_request(msb, lba, page, sg, in msb_io_work()
1918 error = msb_do_write_request(msb, lba, page, sg, in msb_io_work()