| /linux/fs/iomap/ |
| H A D | swapfile.c | 12 struct iomap iomap; /* accumulated iomap */ member 29 struct iomap *iomap = &isi->iomap; in iomap_swapfile_add_extent() local 45 first_ppage = ALIGN(iomap->addr, PAGE_SIZE) >> PAGE_SHIFT; in iomap_swapfile_add_extent() 46 next_ppage = ALIGN_DOWN(iomap->addr + iomap->length, PAGE_SIZE) >> in iomap_swapfile_add_extent() 61 if (iomap->offset == 0) in iomap_swapfile_add_extent() 95 struct iomap *iomap, struct iomap_swapfile_info *isi) in iomap_swapfile_iter() argument 97 switch (iomap->type) { in iomap_swapfile_iter() 110 if (iomap->flags & IOMAP_F_DIRTY) in iomap_swapfile_iter() 112 if (iomap->flags & IOMAP_F_SHARED) in iomap_swapfile_iter() 116 if (iomap->bdev != isi->sis->bdev) in iomap_swapfile_iter() [all …]
|
| H A D | fiemap.c | 10 const struct iomap *iomap, u32 flags) in iomap_to_fiemap() argument 12 switch (iomap->type) { in iomap_to_fiemap() 29 if (iomap->flags & IOMAP_F_MERGED) in iomap_to_fiemap() 31 if (iomap->flags & IOMAP_F_SHARED) in iomap_to_fiemap() 34 return fiemap_fill_next_extent(fi, iomap->offset, in iomap_to_fiemap() 35 iomap->addr != IOMAP_NULL_ADDR ? iomap->addr : 0, in iomap_to_fiemap() 36 iomap->length, flags); in iomap_to_fiemap() 40 struct fiemap_extent_info *fi, struct iomap *prev) in iomap_fiemap_iter() 44 if (iter->iomap.type == IOMAP_HOLE) in iomap_fiemap_iter() 48 *prev = iter->iomap; in iomap_fiemap_iter() [all …]
|
| H A D | iter.c | 18 memset(&iter->iomap, 0, sizeof(iter->iomap)); in iomap_iter_reset_iomap() 34 WARN_ON_ONCE(iter->iomap.offset > iter->pos); in iomap_iter_done() 35 WARN_ON_ONCE(iter->iomap.length == 0); in iomap_iter_done() 36 WARN_ON_ONCE(iter->iomap.offset + iter->iomap.length <= iter->pos); in iomap_iter_done() 37 WARN_ON_ONCE(iter->iomap.flags & IOMAP_F_STALE); in iomap_iter_done() 41 trace_iomap_iter_dstmap(iter->inode, &iter->iomap); in iomap_iter_done() 63 bool stale = iter->iomap.flags & IOMAP_F_STALE; in iomap_iter() 70 if (!iter->iomap.length) in iomap_iter() 84 advanced, iter->flags, &iter->iomap); in iomap_iter() 111 &iter->iomap, &iter->srcmap); in iomap_iter()
|
| H A D | trace.h | 18 #define TRACE_SYSTEM iomap 131 TP_PROTO(struct inode *inode, struct iomap *iomap), 132 TP_ARGS(inode, iomap), 146 __entry->addr = iomap->addr; 147 __entry->offset = iomap->offset; 148 __entry->length = iomap->length; 149 __entry->type = iomap->type; 150 __entry->flags = iomap->flags; 151 __entry->bdev = iomap->bdev ? iomap->bdev->bd_dev : 0; 169 TP_PROTO(struct inode *inode, struct iomap *iomap), \ [all …]
|
| H A D | bio.c | 33 const struct iomap *iomap = &iter->iomap; in iomap_bio_read_folio_range() local 40 sector = iomap_sector(iomap, pos); in iomap_bio_read_folio_range() 52 bio = bio_alloc(iomap->bdev, bio_max_segs(nr_vecs), REQ_OP_READ, in iomap_bio_read_folio_range() 60 bio = bio_alloc(iomap->bdev, 1, REQ_OP_READ, orig_gfp); in iomap_bio_read_folio_range() 80 const struct iomap *srcmap = iomap_iter_srcmap(iter); in iomap_bio_read_folio_range_sync()
|
| H A D | direct-io.c | 55 return bio_alloc_bioset(iter->iomap.bdev, nr_vecs, opf, in iomap_dio_alloc_bio() 57 return bio_alloc(iter->iomap.bdev, nr_vecs, opf, GFP_KERNEL); in iomap_dio_alloc_bio() 76 WARN_ON_ONCE(iter->iomap.flags & IOMAP_F_ANON_WRITE); in iomap_dio_submit_bio() 289 bio->bi_iter.bi_sector = iomap_sector(&iter->iomap, pos); in iomap_dio_zero() 306 const struct iomap *iomap = &iter->iomap; in iomap_dio_bio_iter() local 326 alignment = bdev_logical_block_size(iomap->bdev); in iomap_dio_bio_iter() 334 switch (iomap->type) { in iomap_dio_bio_iter() 351 if (iomap->flags & IOMAP_F_ATOMIC_BIO) { in iomap_dio_bio_iter() 362 if (iomap->flags & IOMAP_F_SHARED) { in iomap_dio_bio_iter() 371 if (iomap->flags & IOMAP_F_NEW) { in iomap_dio_bio_iter() [all …]
|
| H A D | buffered-io.c | 345 const struct iomap *srcmap = iomap_iter_srcmap(iter); in iomap_block_needs_zeroing() 364 const struct iomap *iomap = iomap_iter_srcmap(iter); in iomap_read_inline_data() local 365 size_t size = i_size_read(iter->inode) - iomap->offset; in iomap_read_inline_data() 366 size_t offset = offset_in_folio(folio, iomap->offset); in iomap_read_inline_data() 368 if (WARN_ON_ONCE(!iomap->inline_data)) in iomap_read_inline_data() 374 if (WARN_ON_ONCE(size > iomap->length)) in iomap_read_inline_data() 379 folio_fill_tail(folio, offset, iomap->inline_data, size); in iomap_read_inline_data() 501 const struct iomap *iomap = &iter->iomap; in iomap_read_folio_iter() local 509 if (iomap->type == IOMAP_INLINE) { in iomap_read_folio_iter() 848 iter->iomap.flags |= IOMAP_F_STALE; in __iomap_get_folio() [all …]
|
| H A D | ioend.c | 86 if (WARN_ON_ONCE(wpc->iomap.flags & IOMAP_F_ANON_WRITE)) in iomap_ioend_writeback_submit() 105 bio = bio_alloc_bioset(wpc->iomap.bdev, BIO_MAX_VECS, in iomap_alloc_ioend() 108 bio->bi_iter.bi_sector = iomap_sector(&wpc->iomap, pos); in iomap_alloc_ioend() 127 if (!(wpc->iomap.flags & IOMAP_F_ANON_WRITE) && in iomap_can_add_to_ioend() 128 iomap_sector(&wpc->iomap, pos) != bio_end_sector(&ioend->io_bio)) in iomap_can_add_to_ioend() 158 wpc->iomap.offset + wpc->iomap.length - pos); in iomap_add_to_ioend() 161 trace_iomap_add_to_ioend(wpc->inode, pos, dirty_len, &wpc->iomap); in iomap_add_to_ioend() 165 switch (wpc->iomap.type) { in iomap_add_to_ioend() 175 if (wpc->iomap.type == IOMAP_UNWRITTEN) in iomap_add_to_ioend() 177 if (wpc->iomap.flags & IOMAP_F_SHARED) in iomap_add_to_ioend() [all …]
|
| H A D | Makefile | 9 obj-$(CONFIG_FS_IOMAP) += iomap.o 11 iomap-y += trace.o \ 14 iomap-$(CONFIG_BLOCK) += direct-io.o \ 19 iomap-$(CONFIG_SWAP) += swapfile.o
|
| /linux/include/linux/ |
| H A D | io-mapping.h | 42 io_mapping_init_wc(struct io_mapping *iomap, in io_mapping_init_wc() argument 51 iomap->base = base; in io_mapping_init_wc() 52 iomap->size = size; in io_mapping_init_wc() 53 iomap->prot = prot; in io_mapping_init_wc() 54 return iomap; in io_mapping_init_wc() 131 io_mapping_init_wc(struct io_mapping *iomap, in io_mapping_init_wc() argument 135 iomap->iomem = ioremap_wc(base, size); in io_mapping_init_wc() 136 if (!iomap->iomem) in io_mapping_init_wc() 139 iomap->base = base; in io_mapping_init_wc() 140 iomap->size = size; in io_mapping_init_wc() [all …]
|
| H A D | iomap.h | 106 struct iomap { struct 119 static inline sector_t iomap_sector(const struct iomap *iomap, loff_t pos) in iomap_sector() argument 121 if (iomap->flags & IOMAP_F_ANON_WRITE) in iomap_sector() 123 return (iomap->addr + pos - iomap->offset) >> SECTOR_SHIFT; in iomap_sector() 129 static inline void *iomap_inline_data(const struct iomap *iomap, loff_t pos) in iomap_inline_data() argument 131 return iomap->inline_data + pos - iomap->offset; in iomap_inline_data() 139 static inline bool iomap_inline_data_valid(const struct iomap *iomap) in iomap_inline_data_valid() argument 141 return iomap->length <= PAGE_SIZE - offset_in_page(iomap->inline_data); in iomap_inline_data_valid() 170 bool (*iomap_valid)(struct inode *inode, const struct iomap *iomap); 209 unsigned flags, struct iomap *iomap, [all …]
|
| /linux/drivers/ata/ |
| H A D | pata_cs5520.c | 121 void __iomem *iomap[5]; in cs5520_init_one() local 160 iomap[0] = devm_ioport_map(&pdev->dev, cmd_port[0], 8); in cs5520_init_one() 161 iomap[1] = devm_ioport_map(&pdev->dev, ctl_port[0], 1); in cs5520_init_one() 162 iomap[2] = devm_ioport_map(&pdev->dev, cmd_port[1], 8); in cs5520_init_one() 163 iomap[3] = devm_ioport_map(&pdev->dev, ctl_port[1], 1); in cs5520_init_one() 164 iomap[4] = pcim_iomap(pdev, 2, 0); in cs5520_init_one() 166 if (!iomap[0] || !iomap[1] || !iomap[2] || !iomap[3] || !iomap[4]) in cs5520_init_one() 170 ioaddr->cmd_addr = iomap[0]; in cs5520_init_one() 171 ioaddr->ctl_addr = iomap[1]; in cs5520_init_one() 172 ioaddr->altstatus_addr = iomap[1]; in cs5520_init_one() [all …]
|
| H A D | sata_uli.c | 135 void __iomem * const *iomap; in uli_init_one() local 166 iomap = host->iomap; in uli_init_one() 177 ioaddr->cmd_addr = iomap[0] + 8; in uli_init_one() 180 ((unsigned long)iomap[1] | ATA_PCI_CTL_OFS) + 4; in uli_init_one() 181 ioaddr->bmdma_addr = iomap[4] + 16; in uli_init_one() 192 ioaddr->cmd_addr = iomap[2] + 8; in uli_init_one() 195 ((unsigned long)iomap[3] | ATA_PCI_CTL_OFS) + 4; in uli_init_one() 196 ioaddr->bmdma_addr = iomap[4] + 24; in uli_init_one()
|
| /linux/fs/xfs/ |
| H A D | xfs_iomap.c | 78 const struct iomap *iomap) in xfs_iomap_valid() argument 82 if (iomap->type == IOMAP_HOLE) in xfs_iomap_valid() 85 if (iomap->validity_cookie != in xfs_iomap_valid() 86 xfs_iomap_inode_sequence(ip, iomap->flags)) { in xfs_iomap_valid() 87 trace_xfs_iomap_invalid(ip, iomap); in xfs_iomap_valid() 102 struct iomap *iomap, in xfs_bmbt_to_iomap() argument 117 iomap->addr = IOMAP_NULL_ADDR; in xfs_bmbt_to_iomap() 118 iomap->type = IOMAP_HOLE; in xfs_bmbt_to_iomap() 121 iomap->addr = IOMAP_NULL_ADDR; in xfs_bmbt_to_iomap() 122 iomap->type = IOMAP_DELALLOC; in xfs_bmbt_to_iomap() [all …]
|
| H A D | xfs_aops.c | 287 if (offset < wpc->iomap.offset || in xfs_imap_valid() 288 offset >= wpc->iomap.offset + wpc->iomap.length) in xfs_imap_valid() 295 if (wpc->iomap.flags & IOMAP_F_SHARED) in xfs_imap_valid() 306 trace_xfs_wb_data_iomap_invalid(ip, &wpc->iomap, in xfs_imap_valid() 312 trace_xfs_wb_cow_iomap_invalid(ip, &wpc->iomap, in xfs_imap_valid() 430 xfs_bmbt_to_iomap(ip, &wpc->iomap, &imap, 0, 0, XFS_WPC(wpc)->data_seq); in xfs_map_blocks() 446 &wpc->iomap, seq); in xfs_map_blocks() 469 if (cow_offset < wpc->iomap.offset + wpc->iomap.length) in xfs_map_blocks() 470 wpc->iomap.length = cow_offset - wpc->iomap.offset; in xfs_map_blocks() 473 ASSERT(wpc->iomap.offset <= offset); in xfs_map_blocks() [all …]
|
| /linux/fs/gfs2/ |
| H A D | bmap.c | 585 struct metapath *mp, struct iomap *iomap) in gfs2_hole_size() argument 600 iomap->length = hole_size << inode->i_blkbits; in gfs2_hole_size() 661 static int __gfs2_iomap_alloc(struct inode *inode, struct iomap *iomap, in __gfs2_iomap_alloc() argument 669 size_t dblks = iomap->length >> inode->i_blkbits; in __gfs2_iomap_alloc() 765 iomap->addr = bn << inode->i_blkbits; in __gfs2_iomap_alloc() 766 iomap->flags |= IOMAP_F_MERGED | IOMAP_F_NEW; in __gfs2_iomap_alloc() 771 } while (iomap->addr == IOMAP_NULL_ADDR); in __gfs2_iomap_alloc() 773 iomap->type = IOMAP_MAPPED; in __gfs2_iomap_alloc() 774 iomap->length = (u64)dblks << inode->i_blkbits; in __gfs2_iomap_alloc() 841 unsigned flags, struct iomap *iomap, in __gfs2_iomap_get() argument [all …]
|
| /linux/fs/zonefs/ |
| H A D | file.c | 29 struct iomap *iomap, struct iomap *srcmap) in zonefs_read_iomap_begin() argument 41 iomap->bdev = inode->i_sb->s_bdev; in zonefs_read_iomap_begin() 42 iomap->offset = ALIGN_DOWN(offset, sb->s_blocksize); in zonefs_read_iomap_begin() 44 if (iomap->offset >= isize) { in zonefs_read_iomap_begin() 45 iomap->type = IOMAP_HOLE; in zonefs_read_iomap_begin() 46 iomap->addr = IOMAP_NULL_ADDR; in zonefs_read_iomap_begin() 47 iomap->length = length; in zonefs_read_iomap_begin() 49 iomap->type = IOMAP_MAPPED; in zonefs_read_iomap_begin() 50 iomap->addr = (z->z_sector << SECTOR_SHIFT) + iomap->offset; in zonefs_read_iomap_begin() 51 iomap->length = isize - iomap->offset; in zonefs_read_iomap_begin() [all …]
|
| H A D | trace.h | 76 TP_PROTO(struct inode *inode, struct iomap *iomap), 77 TP_ARGS(inode, iomap), 88 __entry->addr = iomap->addr; 89 __entry->offset = iomap->offset; 90 __entry->length = iomap->length;
|
| /linux/fs/ |
| H A D | dax.c | 998 static pgoff_t dax_iomap_pgoff(const struct iomap *iomap, loff_t pos) in dax_iomap_pgoff() argument 1000 return PHYS_PFN(iomap->addr + (pos & PAGE_MASK) - iomap->offset); in dax_iomap_pgoff() 1005 pgoff_t pgoff = dax_iomap_pgoff(&iter->iomap, iter->pos); in copy_cow_page_dax() 1011 rc = dax_direct_access(iter->iomap.dax_dev, pgoff, 1, DAX_ACCESS, in copy_cow_page_dax() 1032 (iter->iomap.flags & IOMAP_F_DIRTY); in dax_fault_is_synchronous() 1050 bool shared = iter->iomap.flags & IOMAP_F_SHARED; in dax_insert_entry() 1240 static int dax_iomap_direct_access(const struct iomap *iomap, loff_t pos, in dax_iomap_direct_access() argument 1243 pgoff_t pgoff = dax_iomap_pgoff(iomap, pos); in dax_iomap_direct_access() 1248 length = dax_direct_access(iomap->dax_dev, pgoff, PHYS_PFN(size), in dax_iomap_direct_access() 1292 const struct iomap *srcmap, void *daddr) in dax_iomap_copy_around() [all …]
|
| /linux/Documentation/filesystems/iomap/ |
| H A D | porting.rst | 20 There are several reasons to convert a filesystem to iomap: 31 2. Large folios are only supported via iomap; there are no plans to 35 supported via iomap. 38 iomap handles common pagecache related operations itself, such as 42 filesystem using iomap. 47 First, add ``#include <linux/iomap.h>`` from your source code and add 54 ``->iomap_end`` if necessary) to allow iomap to obtain a read-only 67 Hide behind a debugging knob the ability to switch on the iomap mapping 70 mapping information from the ``iomap`` structure, but the new functions 71 can be tested without needing to implement any iomap APIs. [all …]
|
| H A D | design.rst | 20 iomap is a filesystem library for handling common file operations. 63 the basis of that unit, the iomap model asks the filesystem for the 73 At a high level, an iomap operation `looks like this 91 Each iomap operation will be covered in more detail below. 94 <https://kernelnewbies.org/KernelProjects/iomap>`_. 97 design and capabilities of iomap, followed by a more detailed catalog 98 of the interfaces presented by iomap. 99 If you change iomap, please update this design document. 136 * **iomap internal operation lock**: This is a general term for 137 synchronization primitives that iomap functions take while holding a [all …]
|
| /linux/fs/erofs/ |
| H A D | data.c | 270 unsigned int flags, struct iomap *iomap, struct iomap *srcmap) in erofs_iomap_begin() argument 283 iomap->offset = map.m_la; in erofs_iomap_begin() 284 iomap->length = map.m_llen; in erofs_iomap_begin() 285 iomap->flags = 0; in erofs_iomap_begin() 286 iomap->private = NULL; in erofs_iomap_begin() 287 iomap->addr = IOMAP_NULL_ADDR; in erofs_iomap_begin() 289 iomap->type = IOMAP_HOLE; in erofs_iomap_begin() 303 iomap->dax_dev = mdev.m_dif->dax_dev; in erofs_iomap_begin() 305 iomap->bdev = mdev.m_bdev; in erofs_iomap_begin() 306 iomap->addr = mdev.m_dif->fsoff + mdev.m_pa; in erofs_iomap_begin() [all …]
|
| /linux/drivers/pwm/ |
| H A D | pwm_th1520.rs | 239 let iomap = iomem_accessor.deref(); in read_waveform() localVariable 241 let ctrl = iomap.try_read32(th1520_pwm_ctrl(hwpwm))?; in read_waveform() 242 let period_cycles = iomap.try_read32(th1520_pwm_per(hwpwm))?; in read_waveform() 243 let duty_cycles = iomap.try_read32(th1520_pwm_fp(hwpwm))?; in read_waveform() 274 let iomap = iomem_accessor.deref(); in write_waveform() localVariable 275 let duty_cycles = iomap.try_read32(th1520_pwm_fp(hwpwm))?; in write_waveform() 281 iomap.try_write32(wfhw.ctrl_val, th1520_pwm_ctrl(hwpwm))?; in write_waveform() 282 iomap.try_write32(0, th1520_pwm_fp(hwpwm))?; in write_waveform() 283 iomap.try_write32( in write_waveform() 291 iomap.try_write32(wfhw.ctrl_val, th1520_pwm_ctrl(hwpwm))?; in write_waveform() [all …]
|
| /linux/fs/hpfs/ |
| H A D | file.c | 123 unsigned flags, struct iomap *iomap, struct iomap *srcmap) in hpfs_iomap_begin() argument 133 iomap->bdev = inode->i_sb->s_bdev; in hpfs_iomap_begin() 134 iomap->offset = offset; in hpfs_iomap_begin() 145 iomap->type = IOMAP_MAPPED; in hpfs_iomap_begin() 146 iomap->flags = IOMAP_F_MERGED; in hpfs_iomap_begin() 147 iomap->addr = (u64)s << blkbits; in hpfs_iomap_begin() 148 iomap->length = (u64)n_secs << blkbits; in hpfs_iomap_begin() 150 iomap->type = IOMAP_HOLE; in hpfs_iomap_begin() 151 iomap->addr = IOMAP_NULL_ADDR; in hpfs_iomap_begin() 152 iomap->length = 1 << blkbits; in hpfs_iomap_begin()
|
| /linux/fs/nfsd/ |
| H A D | blocklayout.c | 31 struct iomap iomap; in nfsd4_block_map_extent() local 35 error = sb->s_export_op->map_blocks(inode, offset, length, &iomap, in nfsd4_block_map_extent() 43 switch (iomap.type) { in nfsd4_block_map_extent() 49 bex->soff = iomap.addr; in nfsd4_block_map_extent() 62 bex->soff = iomap.addr; in nfsd4_block_map_extent() 74 WARN(1, "pnfsd: filesystem returned %d extent\n", iomap.type); in nfsd4_block_map_extent() 82 bex->foff = iomap.offset; in nfsd4_block_map_extent() 83 bex->len = iomap.length; in nfsd4_block_map_extent() 180 struct iomap *iomaps, int nr_iomaps) in nfsd4_block_commit_blocks() 240 struct iomap *iomaps; in nfsd4_block_proc_layoutcommit() [all …]
|