Lines Matching refs:lba
137 static int msb_get_zone_from_lba(int lba) in msb_get_zone_from_lba() argument
139 if (lba < 494) in msb_get_zone_from_lba()
141 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
1015 if (pba >= msb->block_count || lba >= msb->logical_block_count) { in msb_write_block()
1021 if (msb_get_zone_from_lba(lba) != msb_get_zone_from_pba(pba)) { in msb_write_block()
1043 msb->regs.extra_data.logical_address = cpu_to_be16(lba); in msb_write_block()
1115 static int msb_update_block(struct msb_data *msb, u16 lba, in msb_update_block() argument
1121 pba = msb->lba_to_pba_table[lba]; in msb_update_block()
1122 dbg_verbose("start of a block update at lba %d, pba %d", lba, pba); in msb_update_block()
1132 msb_get_zone_from_lba(lba)); in msb_update_block()
1141 error = msb_write_block(msb, new_pba, lba, sg, offset); in msb_update_block()
1152 msb->lba_to_pba_table[lba] = new_pba; in msb_update_block()
1369 u16 pba, lba, other_block; in msb_ftl_scan() local
1411 lba = be16_to_cpu(extra.logical_address); in msb_ftl_scan()
1441 if (lba == MS_BLOCK_INVALID) { in msb_ftl_scan()
1449 if (msb_get_zone_from_lba(lba) != msb_get_zone_from_pba(pba)) { in msb_ftl_scan()
1451 pba, lba); in msb_ftl_scan()
1457 if (msb->lba_to_pba_table[lba] == MS_BLOCK_INVALID) { in msb_ftl_scan()
1458 dbg_verbose("pba %05d -> [lba %05d]", pba, lba); in msb_ftl_scan()
1459 msb->lba_to_pba_table[lba] = pba; in msb_ftl_scan()
1463 other_block = msb->lba_to_pba_table[lba]; in msb_ftl_scan()
1472 msb->lba_to_pba_table[lba] = pba; in msb_ftl_scan()
1487 msb->lba_to_pba_table[lba] = pba; in msb_ftl_scan()
1534 u16 pba, lba; in msb_cache_flush() local
1542 lba = msb->cache_block_lba; in msb_cache_flush()
1543 pba = msb->lba_to_pba_table[lba]; in msb_cache_flush()
1559 page, lba); in msb_cache_flush()
1602 static int msb_cache_write(struct msb_data *msb, int lba, in msb_cache_write() argument
1612 lba != msb->cache_block_lba) in msb_cache_write()
1618 lba != msb->cache_block_lba) { in msb_cache_write()
1626 msb->cache_block_lba = lba; in msb_cache_write()
1631 dbg_verbose("Write of LBA %d page %d to cache ", lba, page); in msb_cache_write()
1643 static int msb_cache_read(struct msb_data *msb, int lba, in msb_cache_read() argument
1646 int pba = msb->lba_to_pba_table[lba]; in msb_cache_read()
1650 if (lba == msb->cache_block_lba && in msb_cache_read()
1654 lba, pba, page); in msb_cache_read()
1664 lba, pba, page); in msb_cache_read()
1670 msb_cache_write(msb, lba, page, true, sg, offset); in msb_cache_read()
1805 static int msb_do_write_request(struct msb_data *msb, int lba, in msb_do_write_request() argument
1815 if (msb->cache_block_lba == lba) in msb_do_write_request()
1818 dbg_verbose("Writing whole lba %d", lba); in msb_do_write_request()
1819 error = msb_update_block(msb, lba, sg, offset); in msb_do_write_request()
1825 lba++; in msb_do_write_request()
1829 error = msb_cache_write(msb, lba, page, false, sg, offset); in msb_do_write_request()
1839 lba++; in msb_do_write_request()
1845 static int msb_do_read_request(struct msb_data *msb, int lba, in msb_do_read_request() argument
1854 error = msb_cache_read(msb, lba, page, sg, offset); in msb_do_read_request()
1864 lba++; in msb_do_read_request()
1874 sector_t lba; in msb_io_work() local
1909 lba = blk_rq_pos(msb->req); in msb_io_work()
1911 sector_div(lba, msb->page_size / 512); in msb_io_work()
1912 page = do_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()