Lines Matching refs:map
382 struct ext4_map_blocks *map) in __check_block_validity() argument
389 if (!ext4_inode_block_valid(inode, map->m_pblk, map->m_len)) { in __check_block_validity()
390 ext4_error_inode(inode, func, line, map->m_pblk, in __check_block_validity()
392 "(length %d)", (unsigned long) map->m_lblk, in __check_block_validity()
393 map->m_pblk, map->m_len); in __check_block_validity()
440 #define check_block_validity(inode, map) \ argument
441 __check_block_validity((inode), __func__, __LINE__, (map))
447 struct ext4_map_blocks *map, in ext4_map_blocks_es_recheck() argument
452 map->m_flags = 0; in ext4_map_blocks_es_recheck()
462 retval = ext4_ext_map_blocks(handle, inode, map, 0); in ext4_map_blocks_es_recheck()
464 retval = ext4_ind_map_blocks(handle, inode, map, 0); in ext4_map_blocks_es_recheck()
472 if (es_map->m_lblk != map->m_lblk || in ext4_map_blocks_es_recheck()
473 es_map->m_flags != map->m_flags || in ext4_map_blocks_es_recheck()
474 es_map->m_pblk != map->m_pblk) { in ext4_map_blocks_es_recheck()
479 es_map->m_pblk, es_map->m_flags, map->m_lblk, in ext4_map_blocks_es_recheck()
480 map->m_len, map->m_pblk, map->m_flags, in ext4_map_blocks_es_recheck()
487 struct inode *inode, struct ext4_map_blocks *map, in ext4_map_query_blocks_next_in_leaf() argument
494 status = map->m_flags & EXT4_MAP_UNWRITTEN ? in ext4_map_query_blocks_next_in_leaf()
497 WARN_ON_ONCE(!(map->m_flags & EXT4_MAP_QUERY_LAST_IN_LEAF)); in ext4_map_query_blocks_next_in_leaf()
498 WARN_ON_ONCE(orig_mlen <= map->m_len); in ext4_map_query_blocks_next_in_leaf()
501 map2.m_lblk = map->m_lblk + map->m_len; in ext4_map_query_blocks_next_in_leaf()
502 map2.m_len = orig_mlen - map->m_len; in ext4_map_query_blocks_next_in_leaf()
507 ext4_es_insert_extent(inode, map->m_lblk, map->m_len, in ext4_map_query_blocks_next_in_leaf()
508 map->m_pblk, status, false); in ext4_map_query_blocks_next_in_leaf()
509 return map->m_len; in ext4_map_query_blocks_next_in_leaf()
527 if (map->m_pblk + map->m_len == map2.m_pblk && in ext4_map_query_blocks_next_in_leaf()
529 ext4_es_insert_extent(inode, map->m_lblk, in ext4_map_query_blocks_next_in_leaf()
530 map->m_len + map2.m_len, map->m_pblk, in ext4_map_query_blocks_next_in_leaf()
532 map->m_len += map2.m_len; in ext4_map_query_blocks_next_in_leaf()
534 ext4_es_insert_extent(inode, map->m_lblk, map->m_len, in ext4_map_query_blocks_next_in_leaf()
535 map->m_pblk, status, false); in ext4_map_query_blocks_next_in_leaf()
538 return map->m_len; in ext4_map_query_blocks_next_in_leaf()
542 struct ext4_map_blocks *map, int flags) in ext4_map_query_blocks() argument
546 unsigned int orig_mlen = map->m_len; in ext4_map_query_blocks()
550 retval = ext4_ext_map_blocks(handle, inode, map, flags); in ext4_map_query_blocks()
552 retval = ext4_ind_map_blocks(handle, inode, map, flags); in ext4_map_query_blocks()
557 if (unlikely(retval != map->m_len)) { in ext4_map_query_blocks()
561 inode->i_ino, retval, map->m_len); in ext4_map_query_blocks()
570 if (!(map->m_flags & EXT4_MAP_QUERY_LAST_IN_LEAF) || in ext4_map_query_blocks()
571 map->m_len == orig_mlen) { in ext4_map_query_blocks()
572 status = map->m_flags & EXT4_MAP_UNWRITTEN ? in ext4_map_query_blocks()
574 ext4_es_insert_extent(inode, map->m_lblk, map->m_len, in ext4_map_query_blocks()
575 map->m_pblk, status, false); in ext4_map_query_blocks()
579 return ext4_map_query_blocks_next_in_leaf(handle, inode, map, in ext4_map_query_blocks()
584 struct ext4_map_blocks *map, int flags) in ext4_map_create_blocks() argument
595 if (map->m_flags & EXT4_MAP_DELAYED) in ext4_map_create_blocks()
602 map->m_flags &= ~EXT4_MAP_FLAGS; in ext4_map_create_blocks()
609 retval = ext4_ext_map_blocks(handle, inode, map, flags); in ext4_map_create_blocks()
611 retval = ext4_ind_map_blocks(handle, inode, map, flags); in ext4_map_create_blocks()
618 if (retval > 0 && map->m_flags & EXT4_MAP_NEW) in ext4_map_create_blocks()
624 if (unlikely(retval != map->m_len)) { in ext4_map_create_blocks()
628 inode->i_ino, retval, map->m_len); in ext4_map_create_blocks()
640 map->m_flags & EXT4_MAP_MAPPED && map->m_flags & EXT4_MAP_NEW) { in ext4_map_create_blocks()
641 err = ext4_issue_zeroout(inode, map->m_lblk, map->m_pblk, in ext4_map_create_blocks()
642 map->m_len); in ext4_map_create_blocks()
652 ext4_es_lookup_extent(inode, map->m_lblk, NULL, &es)) { in ext4_map_create_blocks()
657 status = map->m_flags & EXT4_MAP_UNWRITTEN ? in ext4_map_create_blocks()
659 ext4_es_insert_extent(inode, map->m_lblk, map->m_len, map->m_pblk, in ext4_map_create_blocks()
689 struct ext4_map_blocks *map, int flags) in ext4_map_blocks() argument
694 unsigned int orig_mlen = map->m_len; in ext4_map_blocks()
698 memcpy(&orig_map, map, sizeof(*map)); in ext4_map_blocks()
701 map->m_flags = 0; in ext4_map_blocks()
703 flags, map->m_len, (unsigned long) map->m_lblk); in ext4_map_blocks()
708 if (unlikely(map->m_len > INT_MAX)) in ext4_map_blocks()
709 map->m_len = INT_MAX; in ext4_map_blocks()
712 if (unlikely(map->m_lblk >= EXT_MAX_BLOCKS)) in ext4_map_blocks()
726 if (ext4_es_lookup_extent(inode, map->m_lblk, NULL, &es)) { in ext4_map_blocks()
728 map->m_pblk = ext4_es_pblock(&es) + in ext4_map_blocks()
729 map->m_lblk - es.es_lblk; in ext4_map_blocks()
730 map->m_flags |= ext4_es_is_written(&es) ? in ext4_map_blocks()
732 retval = es.es_len - (map->m_lblk - es.es_lblk); in ext4_map_blocks()
733 if (retval > map->m_len) in ext4_map_blocks()
734 retval = map->m_len; in ext4_map_blocks()
735 map->m_len = retval; in ext4_map_blocks()
737 map->m_pblk = 0; in ext4_map_blocks()
738 map->m_flags |= ext4_es_is_delayed(&es) ? in ext4_map_blocks()
740 retval = es.es_len - (map->m_lblk - es.es_lblk); in ext4_map_blocks()
741 if (retval > map->m_len) in ext4_map_blocks()
742 retval = map->m_len; in ext4_map_blocks()
743 map->m_len = retval; in ext4_map_blocks()
752 ext4_map_blocks_es_recheck(handle, inode, map, in ext4_map_blocks()
756 orig_mlen == map->m_len) in ext4_map_blocks()
759 map->m_len = orig_mlen; in ext4_map_blocks()
773 retval = ext4_map_query_blocks(handle, inode, map, flags); in ext4_map_blocks()
777 if (retval > 0 && map->m_flags & EXT4_MAP_MAPPED) { in ext4_map_blocks()
778 ret = check_block_validity(inode, map); in ext4_map_blocks()
793 if (retval > 0 && map->m_flags & EXT4_MAP_MAPPED) in ext4_map_blocks()
811 retval = ext4_map_create_blocks(handle, inode, map, flags); in ext4_map_blocks()
813 if (retval > 0 && map->m_flags & EXT4_MAP_MAPPED) { in ext4_map_blocks()
814 ret = check_block_validity(inode, map); in ext4_map_blocks()
823 if (map->m_flags & EXT4_MAP_NEW && in ext4_map_blocks()
824 !(map->m_flags & EXT4_MAP_UNWRITTEN) && in ext4_map_blocks()
829 (loff_t)map->m_lblk << inode->i_blkbits; in ext4_map_blocks()
830 loff_t length = (loff_t)map->m_len << inode->i_blkbits; in ext4_map_blocks()
842 if (retval > 0 && (map->m_flags & EXT4_MAP_UNWRITTEN || in ext4_map_blocks()
843 map->m_flags & EXT4_MAP_MAPPED)) in ext4_map_blocks()
844 ext4_fc_track_range(handle, inode, map->m_lblk, in ext4_map_blocks()
845 map->m_lblk + map->m_len - 1); in ext4_map_blocks()
901 struct ext4_map_blocks map; in _ext4_get_block() local
907 map.m_lblk = iblock; in _ext4_get_block()
908 map.m_len = bh->b_size >> inode->i_blkbits; in _ext4_get_block()
910 ret = ext4_map_blocks(ext4_journal_current_handle(), inode, &map, in _ext4_get_block()
913 map_bh(bh, inode->i_sb, map.m_pblk); in _ext4_get_block()
914 ext4_update_bh_state(bh, map.m_flags); in _ext4_get_block()
915 bh->b_size = inode->i_sb->s_blocksize * map.m_len; in _ext4_get_block()
919 bh->b_size = inode->i_sb->s_blocksize * map.m_len; in _ext4_get_block()
966 struct ext4_map_blocks map; in ext4_getblk() local
976 map.m_lblk = block; in ext4_getblk()
977 map.m_len = 1; in ext4_getblk()
978 err = ext4_map_blocks(handle, inode, &map, map_flags); in ext4_getblk()
986 return sb_find_get_block(inode->i_sb, map.m_pblk); in ext4_getblk()
993 bh = getblk_unmovable(inode->i_sb->s_bdev, map.m_pblk, in ext4_getblk()
998 if (map.m_flags & EXT4_MAP_NEW) { in ext4_getblk()
1700 struct ext4_map_blocks map; member
1894 static int ext4_da_map_blocks(struct inode *inode, struct ext4_map_blocks *map) in ext4_da_map_blocks() argument
1901 memcpy(&orig_map, map, sizeof(*map)); in ext4_da_map_blocks()
1904 map->m_flags = 0; in ext4_da_map_blocks()
1905 ext_debug(inode, "max_blocks %u, logical block %lu\n", map->m_len, in ext4_da_map_blocks()
1906 (unsigned long) map->m_lblk); in ext4_da_map_blocks()
1911 if (ext4_es_lookup_extent(inode, map->m_lblk, NULL, &es)) { in ext4_da_map_blocks()
1912 map->m_len = min_t(unsigned int, map->m_len, in ext4_da_map_blocks()
1913 es.es_len - (map->m_lblk - es.es_lblk)); in ext4_da_map_blocks()
1924 map->m_flags |= EXT4_MAP_DELAYED; in ext4_da_map_blocks()
1928 map->m_pblk = ext4_es_pblock(&es) + map->m_lblk - es.es_lblk; in ext4_da_map_blocks()
1930 map->m_flags |= EXT4_MAP_MAPPED; in ext4_da_map_blocks()
1932 map->m_flags |= EXT4_MAP_UNWRITTEN; in ext4_da_map_blocks()
1937 ext4_map_blocks_es_recheck(NULL, inode, map, &orig_map, 0); in ext4_da_map_blocks()
1950 retval = ext4_map_query_blocks(NULL, inode, map, 0); in ext4_da_map_blocks()
1964 if (ext4_es_lookup_extent(inode, map->m_lblk, NULL, &es)) { in ext4_da_map_blocks()
1965 map->m_len = min_t(unsigned int, map->m_len, in ext4_da_map_blocks()
1966 es.es_len - (map->m_lblk - es.es_lblk)); in ext4_da_map_blocks()
1973 retval = ext4_map_query_blocks(NULL, inode, map, 0); in ext4_da_map_blocks()
1980 map->m_flags |= EXT4_MAP_DELAYED; in ext4_da_map_blocks()
1981 retval = ext4_insert_delayed_blocks(inode, map->m_lblk, map->m_len); in ext4_da_map_blocks()
2002 struct ext4_map_blocks map; in ext4_da_get_block_prep() local
2012 map.m_lblk = iblock; in ext4_da_get_block_prep()
2013 map.m_len = 1; in ext4_da_get_block_prep()
2020 ret = ext4_da_map_blocks(inode, &map); in ext4_da_get_block_prep()
2024 if (map.m_flags & EXT4_MAP_DELAYED) { in ext4_da_get_block_prep()
2031 map_bh(bh, inode->i_sb, map.m_pblk); in ext4_da_get_block_prep()
2032 ext4_update_bh_state(bh, map.m_flags); in ext4_da_get_block_prep()
2111 struct ext4_map_blocks *map = &mpd->map; in mpage_add_bh_to_extent() local
2117 if (map->m_len == 0) in mpage_add_bh_to_extent()
2123 if (map->m_len == 0) { in mpage_add_bh_to_extent()
2127 map->m_lblk = lblk; in mpage_add_bh_to_extent()
2128 map->m_len = 1; in mpage_add_bh_to_extent()
2129 map->m_flags = bh->b_state & BH_FLAGS; in mpage_add_bh_to_extent()
2134 if (map->m_len >= MAX_WRITEPAGES_EXTENT_LEN) in mpage_add_bh_to_extent()
2138 if (lblk == map->m_lblk + map->m_len && in mpage_add_bh_to_extent()
2139 (bh->b_state & BH_FLAGS) == map->m_flags) { in mpage_add_bh_to_extent()
2140 map->m_len++; in mpage_add_bh_to_extent()
2180 if (mpd->map.m_len) in mpage_process_page_bufs()
2190 if (mpd->map.m_len == 0) { in mpage_process_page_bufs()
2234 if (lblk < mpd->map.m_lblk) in mpage_process_folio()
2236 if (lblk >= mpd->map.m_lblk + mpd->map.m_len) { in mpage_process_folio()
2241 mpd->map.m_len = 0; in mpage_process_folio()
2242 mpd->map.m_flags = 0; in mpage_process_folio()
2248 if (!err && mpd->map.m_len && mpd->map.m_lblk > lblk) { in mpage_process_folio()
2254 io_end_vec->offset = (loff_t)mpd->map.m_lblk << blkbits; in mpage_process_folio()
2301 start = mpd->map.m_lblk >> bpp_bits; in mpage_map_and_submit_buffers()
2302 end = (mpd->map.m_lblk + mpd->map.m_len - 1) >> bpp_bits; in mpage_map_and_submit_buffers()
2303 pblock = mpd->map.m_pblk; in mpage_map_and_submit_buffers()
2332 mpd->map.m_len = 0; in mpage_map_and_submit_buffers()
2333 mpd->map.m_flags = 0; in mpage_map_and_submit_buffers()
2343 struct ext4_map_blocks *map = &mpd->map; in mpage_map_one_extent() local
2352 trace_ext4_da_write_pages_extent(inode, map); in mpage_map_one_extent()
2374 err = ext4_map_blocks(handle, inode, map, get_blocks_flags); in mpage_map_one_extent()
2377 if (dioread_nolock && (map->m_flags & EXT4_MAP_UNWRITTEN)) { in mpage_map_one_extent()
2386 BUG_ON(map->m_len == 0); in mpage_map_one_extent()
2409 pos = ((loff_t)mpd->map.m_lblk) << inode->i_blkbits; in mpage_submit_partial_folio()
2456 struct ext4_map_blocks *map = &mpd->map; in mpage_map_and_submit_extent() local
2466 io_end_vec->offset = ((loff_t)map->m_lblk) << inode->i_blkbits; in mpage_map_and_submit_extent()
2498 (unsigned long long)map->m_lblk, in mpage_map_and_submit_extent()
2499 (unsigned)map->m_len, -err); in mpage_map_and_submit_extent()
2517 } while (map->m_len); in mpage_map_and_submit_extent()
2627 mpd->map.m_len = 0; in mpage_prepare_extent_to_map()
2655 mpd->map.m_len >> (PAGE_SHIFT - blkbits)) in mpage_prepare_extent_to_map()
2659 if (mpd->map.m_len > 0 && in mpage_prepare_extent_to_map()
2705 if (mpd->map.m_len == 0) in mpage_prepare_extent_to_map()
2930 if (!ret && mpd->map.m_len) in ext4_do_writepages()
3480 struct ext4_map_blocks *map, loff_t offset, in ext4_set_iomap() argument
3495 if (map->m_flags & EXT4_MAP_NEW) in ext4_set_iomap()
3506 iomap->offset = (u64) map->m_lblk << blkbits; in ext4_set_iomap()
3507 iomap->length = (u64) map->m_len << blkbits; in ext4_set_iomap()
3509 if ((map->m_flags & EXT4_MAP_MAPPED) && in ext4_set_iomap()
3522 if (map->m_flags & EXT4_MAP_UNWRITTEN) { in ext4_set_iomap()
3524 iomap->addr = (u64) map->m_pblk << blkbits; in ext4_set_iomap()
3527 } else if (map->m_flags & EXT4_MAP_MAPPED) { in ext4_set_iomap()
3529 iomap->addr = (u64) map->m_pblk << blkbits; in ext4_set_iomap()
3532 } else if (map->m_flags & EXT4_MAP_DELAYED) { in ext4_set_iomap()
3542 struct inode *inode, struct ext4_map_blocks *map) in ext4_map_blocks_atomic_write_slow() argument
3544 ext4_lblk_t m_lblk = map->m_lblk; in ext4_map_blocks_atomic_write_slow()
3545 unsigned int m_len = map->m_len; in ext4_map_blocks_atomic_write_slow()
3563 ret = ext4_map_blocks(handle, inode, map, m_flags); in ext4_map_blocks_atomic_write_slow()
3581 if ((check_next_pblk && next_pblk != map->m_pblk) || in ext4_map_blocks_atomic_write_slow()
3586 next_pblk, map->m_pblk, ret); in ext4_map_blocks_atomic_write_slow()
3590 next_pblk = map->m_pblk + map->m_len; in ext4_map_blocks_atomic_write_slow()
3593 mapped_len += map->m_len; in ext4_map_blocks_atomic_write_slow()
3594 map->m_lblk += map->m_len; in ext4_map_blocks_atomic_write_slow()
3595 map->m_len = m_len - mapped_len; in ext4_map_blocks_atomic_write_slow()
3604 map->m_lblk = m_lblk; in ext4_map_blocks_atomic_write_slow()
3605 map->m_len = m_len; in ext4_map_blocks_atomic_write_slow()
3606 map->m_flags = 0; in ext4_map_blocks_atomic_write_slow()
3608 ret = ext4_map_blocks(handle, inode, map, in ext4_map_blocks_atomic_write_slow()
3620 map->m_lblk = m_lblk; in ext4_map_blocks_atomic_write_slow()
3621 map->m_len = m_len; in ext4_map_blocks_atomic_write_slow()
3622 map->m_flags = 0; in ext4_map_blocks_atomic_write_slow()
3646 struct ext4_map_blocks *map, int m_flags, in ext4_map_blocks_atomic_write() argument
3649 ext4_lblk_t m_lblk = map->m_lblk; in ext4_map_blocks_atomic_write()
3650 unsigned int m_len = map->m_len; in ext4_map_blocks_atomic_write()
3655 ret = ext4_map_blocks(handle, inode, map, m_flags); in ext4_map_blocks_atomic_write()
3663 map->m_lblk = m_lblk; in ext4_map_blocks_atomic_write()
3664 map->m_len = m_len; in ext4_map_blocks_atomic_write()
3665 map->m_flags = 0; in ext4_map_blocks_atomic_write()
3672 return ext4_map_blocks_atomic_write_slow(handle, inode, map); in ext4_map_blocks_atomic_write()
3677 static int ext4_iomap_alloc(struct inode *inode, struct ext4_map_blocks *map, in ext4_iomap_alloc() argument
3689 if (map->m_len > DIO_MAX_BLOCKS) in ext4_iomap_alloc()
3690 map->m_len = DIO_MAX_BLOCKS; in ext4_iomap_alloc()
3699 unsigned int orig_mlen = map->m_len; in ext4_iomap_alloc()
3701 ret = ext4_map_blocks(NULL, inode, map, 0); in ext4_iomap_alloc()
3704 if (map->m_len < orig_mlen) { in ext4_iomap_alloc()
3705 map->m_len = orig_mlen; in ext4_iomap_alloc()
3707 map->m_len); in ext4_iomap_alloc()
3710 map->m_len); in ext4_iomap_alloc()
3713 dio_credits = ext4_chunk_trans_blocks(inode, map->m_len); in ext4_iomap_alloc()
3740 else if (((loff_t)map->m_lblk << blkbits) >= i_size_read(inode)) in ext4_iomap_alloc()
3746 ret = ext4_map_blocks_atomic_write(handle, inode, map, m_flags, in ext4_iomap_alloc()
3749 ret = ext4_map_blocks(handle, inode, map, m_flags); in ext4_iomap_alloc()
3787 struct ext4_map_blocks map; in ext4_iomap_begin() local
3800 map.m_lblk = offset >> blkbits; in ext4_iomap_begin()
3801 map.m_len = min_t(loff_t, (offset + length - 1) >> blkbits, in ext4_iomap_begin()
3802 EXT4_MAX_LOGICAL_BLOCK) - map.m_lblk + 1; in ext4_iomap_begin()
3803 orig_mlen = map.m_len; in ext4_iomap_begin()
3813 ret = ext4_map_blocks(NULL, inode, &map, 0); in ext4_iomap_begin()
3818 if (map.m_flags & EXT4_MAP_MAPPED) { in ext4_iomap_begin()
3823 map.m_len = orig_mlen; in ext4_iomap_begin()
3825 ret = ext4_iomap_alloc(inode, &map, flags); in ext4_iomap_begin()
3831 ret = ext4_map_blocks(NULL, inode, &map, 0); in ext4_iomap_begin()
3842 map.m_len = fscrypt_limit_io_blocks(inode, map.m_lblk, map.m_len); in ext4_iomap_begin()
3849 if (map.m_len < (length >> blkbits)) { in ext4_iomap_begin()
3854 ext4_set_iomap(inode, iomap, &map, offset, length, flags); in ext4_iomap_begin()
3923 struct ext4_map_blocks map; in ext4_iomap_begin_report() local
3941 map.m_lblk = offset >> blkbits; in ext4_iomap_begin_report()
3942 map.m_len = min_t(loff_t, (offset + length - 1) >> blkbits, in ext4_iomap_begin_report()
3943 EXT4_MAX_LOGICAL_BLOCK) - map.m_lblk + 1; in ext4_iomap_begin_report()
3955 map.m_flags = 0; in ext4_iomap_begin_report()
3960 ret = ext4_map_blocks(NULL, inode, &map, 0); in ext4_iomap_begin_report()
3964 ext4_set_iomap(inode, iomap, &map, offset, length, flags); in ext4_iomap_begin_report()