0
     ˆÁÀƒ¿ÄÃ !    /* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (C) 2003 Sistina Software
 * Copyright (C) 2004 - 2008 Red Hat, Inc. All rights reserved.
 *
 * Device-Mapper low-level I/O.
 *
 * This file is released under the GPL.
 */

#ifndef _LINUX_DM_IO_H
#define _LINUX_DM_IO_H

#ifdef __KERNEL__

#include <linux/types.h>
#include <linux/blk_types.h>

struct dm_io_region {
	struct block_device *bdev;
	sector_t sector;
	sector_t count;		/* If this is zero the region is ignored. */
};

struct page_list {
	struct page_list *next;
	struct page *page;
};

typedef void (*io_notify_fn)(unsigned int long error, void *context);

enum dm_io_mem_type {
	DM_IO_PAGE_LIST,/* Page list */
	DM_IO_BIO,	/* Bio vector */
	DM_IO_VMA,	/* Virtual memory area */
	DM_IO_KMEM,	/* Kernel memory */
};

struct dm_io_memory {
	enum dm_io_mem_type type;

	unsigned int offset;

	union {
		struct page_list *pl;
		struct bio *bio;
		void *vma;
		void *addr;
	} ptr;
};

struct dm_io_notify {
	io_notify_fn fn;	/* Callback for asynchronous requests */
	void *context;		/* Passed to callback */
};

/*
 * IO request structure
 */
struct dm_io_client;
struct dm_io_request {
	blk_opf_t	    bi_opf;	/* Request type and flags */
	struct dm_io_memory mem;	/* Memory to use for io */
	struct dm_io_notify notify;	/* Synchronous if notify.fn is NULL */
	struct dm_io_client *client;	/* Client memory handler */
};

/*
 * For async io calls, users can alternatively use the dm_io() function below
 * and dm_io_client_create() to create private mempools for the client.
 *
 * Create/destroy may block.
 */
struct dm_io_client *dm_io_client_create(void);
void dm_io_client_destroy(struct dm_io_client *client);

/*
 * IO interface using private per-client pools.
 * Each bit in the optional 'sync_error_bits' bitset indicates whether an
 * error occurred doing io to the corresponding region.
 */
int dm_io(struct dm_io_request *io_req, unsigned int num_regions,
	  struct dm_io_region *region, unsigned int long *sync_error_bits,
	  unsigned short ioprio);

#endif	/* __KERNEL__ */
#endif	/* _LINUX_DM_IO_H */
  5   ˆl–Ðz¾” T†»Ò�~àEp©‹FÿÁ„teÏ_�uÐb&=L‰*VBl(éÆÅ ?÷     ELF          >    H      @       ¸
         @ 8  @                                 (0      (0                    @       @       @      au      au                    À       À       À      ¬3      ¬3                    û                  d      h                   ¸û      ¸     ¸                              ¨      ¨      ¨                                   È      È      È      $       $              Såtd   ¨      ¨      ¨                             Påtd    Ï       Ï       Ï      ì      ì             Qåtd                                                  Råtd    û                  `      `                      GNU   À                   GNU ¼rx¤Úrn‰Üø©™^68°Ô    ƒ   +      
   @

$  €  €  € € ¨  
    	@ ŒŒ  …Š€  ˆ  P K h   ÁDÁ €€H 	 
"!    Rþ H0I>�€ 	ÐÄØB&    “	/ +               0   1   3   4   5   7       9   ;   @           B           C       F                   H   I   K   L   M   O   Q       T   V   \   _   b   e   h   i   j   m                           n       o               r           s   u   v   x               {       |       }                      ‚   …   ‡   ˆ   ‰   ‹   �   �           ‘       “       •           ™       š   ›   œ           �               ¢               ¤   ¦   ª   ­   ®   °   ²   ´   ¶           ·   ¸           »       ¼   ½   À   Á   Â   Ã   Ú�ÂÚ�Â46Ê46ÊÉÏ—,{ýF¯¸6œÈ¹6œÈMmVf�=ÚU Ì)‘¡Ì)‘n]ÛÇ+ª (8ð!(8ðˆñH�ˆñH�ê¥ûDÀæ5Áæ5rêˆîsêˆîí²³ð ¥ùð ¥ùÃ¡B}¼vt~½vt~ƒ-”"Xr#Xr·<Õ_íA<÷½Ö=÷½ÖFÊˆîGÊˆî†®T‰´¥ùµ¥ùòÀ+óÀ+ZIÕÑÜ¹D˜ZIÕÑ ‹7¦Ü¹D˜¡‹7¦ôG¤¤ôG¤¤�ÞSíAè„ é„ ž|Z—SíAŸ|Z—SíAV¥ùW¥ùSíASíASíAáe–áe–aá¹a‡+ÄìjVf¼?ÿæ½?ÿæQ/zùèˆîèˆî¦B}ä¯kKå¯kKfêÚTP¥ùQ¥ù£¦ÃËíÌÒèËâÞéËâÞ@±ñV:A±ñž;ÊrZ‰Ÿ;ÊÃPe	ÃPeSWíASWíA
6060z·D˜{·D˜ŒØŒØ¬¿âÞ­¿âÞ¥´¥´*ì5+ì5ðCÕÑNÄâÞNÄâÞñCÕÑKBkæ´\Ã½gÄÖ_Ÿâþp^—`p^—`s¾J·LgX	LgX˜Q±…™Q±…¼ÆPe½ÆPe