Whamcloud - gitweb
tst_libext2fs: Avoid multiple definition of global variables
[tools/e2fsprogs.git] / lib / ext2fs / ext2_io.h
index ccc9c8b..5540900 100644 (file)
@@ -12,6 +12,8 @@
 #ifndef _EXT2FS_EXT2_IO_H
 #define _EXT2FS_EXT2_IO_H
 
+#include <ext2fs/ext2_types.h>
+
 /*
  * ext2_loff_t is defined here since unix_io.c needs it.
  */
@@ -29,6 +31,10 @@ typedef struct struct_io_channel *io_channel;
 typedef struct struct_io_stats *io_stats;
 
 #define CHANNEL_FLAGS_WRITETHROUGH     0x01
+#define CHANNEL_FLAGS_DISCARD_ZEROES   0x02
+#define CHANNEL_FLAGS_BLOCK_DEVICE     0x04
+
+#define io_channel_discard_zeroes_data(i) (i->flags & CHANNEL_FLAGS_DISCARD_ZEROES)
 
 struct struct_io_channel {
        errcode_t       magic;
@@ -54,6 +60,7 @@ struct struct_io_channel {
        long            reserved[14];
        void            *private_data;
        void            *app_data;
+       int             align;
 };
 
 struct struct_io_stats {
@@ -83,12 +90,20 @@ struct struct_io_manager {
                                        int count, void *data);
        errcode_t (*write_blk64)(io_channel channel, unsigned long long block,
                                        int count, const void *data);
-       long    reserved[16];
+       errcode_t (*discard)(io_channel channel, unsigned long long block,
+                            unsigned long long count);
+       errcode_t (*cache_readahead)(io_channel channel,
+                                    unsigned long long block,
+                                    unsigned long long count);
+       errcode_t (*zeroout)(io_channel channel, unsigned long long block,
+                            unsigned long long count);
+       long    reserved[14];
 };
 
 #define IO_FLAG_RW             0x0001
 #define IO_FLAG_EXCLUSIVE      0x0002
 #define IO_FLAG_DIRECT_IO      0x0004
+#define IO_FLAG_FORCE_BOUNCE   0x0008
 
 /*
  * Convenience functions....
@@ -112,9 +127,25 @@ extern errcode_t io_channel_read_blk64(io_channel channel,
 extern errcode_t io_channel_write_blk64(io_channel channel,
                                        unsigned long long block,
                                        int count, const void *data);
+extern errcode_t io_channel_discard(io_channel channel,
+                                   unsigned long long block,
+                                   unsigned long long count);
+extern errcode_t io_channel_zeroout(io_channel channel,
+                                   unsigned long long block,
+                                   unsigned long long count);
+extern errcode_t io_channel_alloc_buf(io_channel channel,
+                                     int count, void *ptr);
+extern errcode_t io_channel_cache_readahead(io_channel io,
+                                           unsigned long long block,
+                                           unsigned long long count);
 
 /* unix_io.c */
 extern io_manager unix_io_manager;
+extern io_manager unixfd_io_manager;
+
+/* sparse_io.c */
+extern io_manager sparse_io_manager;
+extern io_manager sparsefd_io_manager;
 
 /* undo_io.c */
 extern io_manager undo_io_manager;