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()
997 u16 pba, u32 lba, struct scatterlist *sg, int offset) in msb_write_block() argument
1011 if (pba >= msb->block_count || lba >= msb->logical_block_count) { in msb_write_block()
1017 if (msb_get_zone_from_lba(lba) != msb_get_zone_from_pba(pba)) { in msb_write_block()
1039 msb->regs.extra_data.logical_address = cpu_to_be16(lba); in msb_write_block()
1111 static int msb_update_block(struct msb_data *msb, u16 lba, in msb_update_block() argument
1117 pba = msb->lba_to_pba_table[lba]; in msb_update_block()
1118 dbg_verbose("start of a block update at lba %d, pba %d", lba, pba); in msb_update_block()
1128 msb_get_zone_from_lba(lba)); in msb_update_block()
1137 error = msb_write_block(msb, new_pba, lba, sg, offset); in msb_update_block()
1148 msb->lba_to_pba_table[lba] = new_pba; in msb_update_block()
1367 u16 pba, lba, other_block; in msb_ftl_scan() local
1409 lba = be16_to_cpu(extra.logical_address); in msb_ftl_scan()
1439 if (lba == MS_BLOCK_INVALID) { in msb_ftl_scan()
1447 if (msb_get_zone_from_lba(lba) != msb_get_zone_from_pba(pba)) { in msb_ftl_scan()
1449 pba, lba); in msb_ftl_scan()
1455 if (msb->lba_to_pba_table[lba] == MS_BLOCK_INVALID) { in msb_ftl_scan()
1456 dbg_verbose("pba %05d -> [lba %05d]", pba, lba); in msb_ftl_scan()
1457 msb->lba_to_pba_table[lba] = pba; in msb_ftl_scan()
1461 other_block = msb->lba_to_pba_table[lba]; in msb_ftl_scan()
1470 msb->lba_to_pba_table[lba] = pba; in msb_ftl_scan()
1485 msb->lba_to_pba_table[lba] = pba; in msb_ftl_scan()
1531 u16 pba, lba; in msb_cache_flush() local
1539 lba = msb->cache_block_lba; in msb_cache_flush()
1540 pba = msb->lba_to_pba_table[lba]; in msb_cache_flush()
1556 page, lba); in msb_cache_flush()
1599 static int msb_cache_write(struct msb_data *msb, int lba, in msb_cache_write() argument
1609 lba != msb->cache_block_lba) in msb_cache_write()
1615 lba != msb->cache_block_lba) { in msb_cache_write()
1623 msb->cache_block_lba = lba; in msb_cache_write()
1628 dbg_verbose("Write of LBA %d page %d to cache ", lba, page); in msb_cache_write()
1640 static int msb_cache_read(struct msb_data *msb, int lba, in msb_cache_read() argument
1643 int pba = msb->lba_to_pba_table[lba]; in msb_cache_read()
1647 if (lba == msb->cache_block_lba && in msb_cache_read()
1651 lba, pba, page); in msb_cache_read()
1661 lba, pba, page); in msb_cache_read()
1667 msb_cache_write(msb, lba, page, true, sg, offset); in msb_cache_read()
1802 static int msb_do_write_request(struct msb_data *msb, int lba, in msb_do_write_request() argument
1812 if (msb->cache_block_lba == lba) in msb_do_write_request()
1815 dbg_verbose("Writing whole lba %d", lba); in msb_do_write_request()
1816 error = msb_update_block(msb, lba, sg, offset); in msb_do_write_request()
1822 lba++; in msb_do_write_request()
1826 error = msb_cache_write(msb, lba, page, false, sg, offset); in msb_do_write_request()
1836 lba++; in msb_do_write_request()
1842 static int msb_do_read_request(struct msb_data *msb, int lba, in msb_do_read_request() argument
1851 error = msb_cache_read(msb, lba, page, sg, offset); in msb_do_read_request()
1861 lba++; in msb_do_read_request()
1871 sector_t lba; in msb_io_work() local
1900 lba = blk_rq_pos(req); in msb_io_work()
1902 sector_div(lba, msb->page_size / 512); in msb_io_work()
1903 page = sector_div(lba, msb->pages_in_block); in msb_io_work()
1906 error = msb_do_read_request(msb, lba, page, sg, in msb_io_work()
1909 error = msb_do_write_request(msb, lba, page, sg, in msb_io_work()