Lines Matching refs:lba
738 static void *fake_store(unsigned long long lba) in fake_store() argument
740 lba = do_div(lba, sdebug_store_sectors); in fake_store()
742 return fake_storep + lba * sdebug_sector_size; in fake_store()
2459 unsigned long long lba, unsigned int num) in check_device_access_params() argument
2461 if (lba + num > sdebug_capacity) { in check_device_access_params()
2475 static int do_device_access(struct scsi_cmnd *scmd, u32 sg_skip, u64 lba, in do_device_access() argument
2497 block = do_div(lba, sdebug_store_sectors); in do_device_access()
2520 static bool comp_write_worker(u64 lba, u32 num, const u8 *arr) in comp_write_worker() argument
2527 block = do_div(lba, store_blks); in comp_write_worker()
2663 u64 lba; in resp_read_dt0() local
2673 lba = get_unaligned_be64(cmd + 2); in resp_read_dt0()
2679 lba = get_unaligned_be32(cmd + 2); in resp_read_dt0()
2685 lba = (u32)cmd[3] | (u32)cmd[2] << 8 | in resp_read_dt0()
2692 lba = get_unaligned_be32(cmd + 2); in resp_read_dt0()
2698 lba = get_unaligned_be32(cmd + 2); in resp_read_dt0()
2703 lba = get_unaligned_be64(cmd + 12); in resp_read_dt0()
2732 if (unlikely(lba + num > sdebug_capacity)) { in resp_read_dt0()
2744 (lba <= (sdebug_medium_error_start + sdebug_medium_error_count - 1)) && in resp_read_dt0()
2745 ((lba + num) > sdebug_medium_error_start))) { in resp_read_dt0()
2751 ret = (lba < OPT_MEDIUM_ERR_ADDR) in resp_read_dt0()
2752 ? OPT_MEDIUM_ERR_ADDR : (int)lba; in resp_read_dt0()
2763 int prot_ret = prot_verify_read(scp, lba, num, ei_lba); in resp_read_dt0()
2772 ret = do_device_access(scp, 0, lba, num, false); in resp_read_dt0()
2894 static unsigned long lba_to_map_index(sector_t lba) in lba_to_map_index() argument
2897 lba += sdebug_unmap_granularity - sdebug_unmap_alignment; in lba_to_map_index()
2898 sector_div(lba, sdebug_unmap_granularity); in lba_to_map_index()
2899 return lba; in lba_to_map_index()
2904 sector_t lba = index * sdebug_unmap_granularity; in map_index_to_lba() local
2907 lba -= sdebug_unmap_granularity - sdebug_unmap_alignment; in map_index_to_lba()
2908 return lba; in map_index_to_lba()
2911 static unsigned int map_state(sector_t lba, unsigned int *num) in map_state() argument
2918 index = lba_to_map_index(lba); in map_state()
2927 *num = end - lba; in map_state()
2931 static void map_region(sector_t lba, unsigned int len) in map_region() argument
2933 sector_t end = lba + len; in map_region()
2935 while (lba < end) { in map_region()
2936 unsigned long index = lba_to_map_index(lba); in map_region()
2941 lba = map_index_to_lba(index + 1); in map_region()
2945 static void unmap_region(sector_t lba, unsigned int len) in unmap_region() argument
2947 sector_t end = lba + len; in unmap_region()
2949 while (lba < end) { in unmap_region()
2950 unsigned long index = lba_to_map_index(lba); in unmap_region()
2952 if (lba == map_index_to_lba(index) && in unmap_region()
2953 lba + sdebug_unmap_granularity <= end && in unmap_region()
2958 lba * sdebug_sector_size, in unmap_region()
2964 memset(dif_storep + lba, 0xff, in unmap_region()
2969 lba = map_index_to_lba(index + 1); in unmap_region()
2976 u64 lba; in resp_write_dt0() local
2986 lba = get_unaligned_be64(cmd + 2); in resp_write_dt0()
2992 lba = get_unaligned_be32(cmd + 2); in resp_write_dt0()
2998 lba = (u32)cmd[3] | (u32)cmd[2] << 8 | in resp_write_dt0()
3005 lba = get_unaligned_be32(cmd + 2); in resp_write_dt0()
3011 lba = get_unaligned_be32(cmd + 2); in resp_write_dt0()
3016 lba = get_unaligned_be64(cmd + 12); in resp_write_dt0()
3036 if (unlikely(lba + num > sdebug_capacity)) { in resp_write_dt0()
3051 int prot_ret = prot_verify_write(scp, lba, num, ei_lba); in resp_write_dt0()
3060 ret = do_device_access(scp, 0, lba, num, true); in resp_write_dt0()
3062 map_region(lba, num); in resp_write_dt0()
3109 u64 lba; in resp_write_scat() local
3177 lba = get_unaligned_be64(up + 0); in resp_write_scat()
3182 my_name, __func__, k, lba, num, sg_off); in resp_write_scat()
3185 ret = check_device_access_params(scp, lba, num); in resp_write_scat()
3204 int prot_ret = prot_verify_write(scp, lba, num, in resp_write_scat()
3215 ret = do_device_access(scp, sg_off, lba, num, true); in resp_write_scat()
3217 map_region(lba, num); in resp_write_scat()
3261 static int resp_write_same(struct scsi_cmnd *scp, u64 lba, u32 num, in resp_write_same() argument
3269 ret = check_device_access_params(scp, lba, num); in resp_write_same()
3276 unmap_region(lba, num); in resp_write_same()
3280 lba_off = lba * sdebug_sector_size; in resp_write_same()
3300 memcpy(fake_storep + ((lba + i) * sdebug_sector_size), in resp_write_same()
3305 map_region(lba, num); in resp_write_same()
3316 u32 lba; in resp_write_same_10() local
3328 lba = get_unaligned_be32(cmd + 2); in resp_write_same_10()
3334 return resp_write_same(scp, lba, num, ei_lba, unmap, false); in resp_write_same_10()
3341 u64 lba; in resp_write_same_16() local
3356 lba = get_unaligned_be64(cmd + 2); in resp_write_same_16()
3362 return resp_write_same(scp, lba, num, ei_lba, unmap, ndob); in resp_write_same_16()
3420 u64 lba; in resp_comp_write() local
3428 lba = get_unaligned_be64(cmd + 2); in resp_comp_write()
3444 if (lba + num > sdebug_capacity) { in resp_comp_write()
3477 if (!comp_write_worker(lba, num, arr)) { in resp_comp_write()
3483 map_region(lba, num); in resp_comp_write()
3491 __be64 lba; member
3533 unsigned long long lba = get_unaligned_be64(&desc[i].lba); in resp_unmap() local
3536 ret = check_device_access_params(scp, lba, num); in resp_unmap()
3540 unmap_region(lba, num); in resp_unmap()
3558 u64 lba; in resp_get_lba_status() local
3563 lba = get_unaligned_be64(cmd + 2); in resp_get_lba_status()
3569 ret = check_device_access_params(scp, lba, 1); in resp_get_lba_status()
3574 mapped = map_state(lba, &num); in resp_get_lba_status()
3579 if (sdebug_capacity - lba <= 0xffffffff) in resp_get_lba_status()
3580 num = sdebug_capacity - lba; in resp_get_lba_status()
3587 put_unaligned_be64(lba, arr + 8); /* LBA */ in resp_get_lba_status()
3598 u64 lba; in resp_sync_cache() local
3603 lba = get_unaligned_be32(cmd + 2); in resp_sync_cache()
3606 lba = get_unaligned_be64(cmd + 2); in resp_sync_cache()
3609 if (lba + num_blocks > sdebug_capacity) { in resp_sync_cache()
3721 static int resp_xdwriteread(struct scsi_cmnd *scp, unsigned long long lba, in resp_xdwriteread() argument
3761 u64 lba; in resp_xdwriteread_10() local
3778 lba = get_unaligned_be32(cmd + 2); in resp_xdwriteread_10()
3780 return resp_xdwriteread(scp, lba, num, devip); in resp_xdwriteread_10()