Lines Matching refs:buf
11 void erofs_unmap_metabuf(struct erofs_buf *buf) in erofs_unmap_metabuf() argument
13 if (!buf->base) in erofs_unmap_metabuf()
15 kunmap_local(buf->base); in erofs_unmap_metabuf()
16 buf->base = NULL; in erofs_unmap_metabuf()
19 void erofs_put_metabuf(struct erofs_buf *buf) in erofs_put_metabuf() argument
21 if (!buf->page) in erofs_put_metabuf()
23 erofs_unmap_metabuf(buf); in erofs_put_metabuf()
24 folio_put(page_folio(buf->page)); in erofs_put_metabuf()
25 buf->page = NULL; in erofs_put_metabuf()
28 void *erofs_bread(struct erofs_buf *buf, erofs_off_t offset, bool need_kmap) in erofs_bread() argument
30 pgoff_t index = (buf->off + offset) >> PAGE_SHIFT; in erofs_bread()
33 if (buf->page) { in erofs_bread()
34 folio = page_folio(buf->page); in erofs_bread()
35 if (folio_file_page(folio, index) != buf->page) in erofs_bread()
36 erofs_unmap_metabuf(buf); in erofs_bread()
39 erofs_put_metabuf(buf); in erofs_bread()
40 folio = read_mapping_folio(buf->mapping, index, buf->file); in erofs_bread()
44 buf->page = folio_file_page(folio, index); in erofs_bread()
47 if (!buf->base) in erofs_bread()
48 buf->base = kmap_local_page(buf->page); in erofs_bread()
49 return buf->base + (offset & ~PAGE_MASK); in erofs_bread()
52 int erofs_init_metabuf(struct erofs_buf *buf, struct super_block *sb, in erofs_init_metabuf() argument
57 buf->file = NULL; in erofs_init_metabuf()
61 buf->mapping = sbi->metabox_inode->i_mapping; in erofs_init_metabuf()
64 buf->off = sbi->dif0.fsoff; in erofs_init_metabuf()
66 buf->file = sbi->dif0.file; /* some fs like FUSE needs it */ in erofs_init_metabuf()
67 buf->mapping = buf->file->f_mapping; in erofs_init_metabuf()
69 buf->mapping = sbi->dif0.fscache->inode->i_mapping; in erofs_init_metabuf()
71 buf->mapping = sb->s_bdev->bd_mapping; in erofs_init_metabuf()
75 void *erofs_read_metabuf(struct erofs_buf *buf, struct super_block *sb, in erofs_read_metabuf() argument
80 err = erofs_init_metabuf(buf, sb, in_metabox); in erofs_read_metabuf()
83 return erofs_bread(buf, offset, true); in erofs_read_metabuf()
88 struct erofs_buf buf = __EROFS_BUF_INITIALIZER; in erofs_map_blocks() local
133 idx = erofs_read_metabuf(&buf, sb, pos, erofs_inode_in_metabox(inode)); in erofs_map_blocks()
159 erofs_put_metabuf(&buf); in erofs_map_blocks()
313 struct erofs_buf buf = __EROFS_BUF_INITIALIZER; in erofs_iomap_begin() local
316 ptr = erofs_read_metabuf(&buf, sb, map.m_pa, in erofs_iomap_begin()
321 iomap->private = buf.base; in erofs_iomap_begin()
334 struct erofs_buf buf = { in erofs_iomap_end() local
340 erofs_put_metabuf(&buf); in erofs_iomap_end()