btrfs: document existence of extent_io ops callbacks
authorDavid Sterba <dsterba@suse.com>
Fri, 17 Feb 2017 14:27:44 +0000 (15:27 +0100)
committerDavid Sterba <dsterba@suse.com>
Tue, 28 Feb 2017 13:29:24 +0000 (14:29 +0100)
Some of the callbacks defined in btree_extent_io_ops and
btrfs_extent_io_ops do always exist so we don't need to check the
existence before each call. This patch just reorders the definition and
documents which are mandatory/optional.

Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/disk-io.c
fs/btrfs/extent_io.h
fs/btrfs/inode.c

index 67d663a..60d4f1b 100644 (file)
@@ -4653,9 +4653,12 @@ static int btrfs_cleanup_transaction(struct btrfs_fs_info *fs_info)
 }
 
 static const struct extent_io_ops btree_extent_io_ops = {
-       .readpage_end_io_hook = btree_readpage_end_io_hook,
-       .readpage_io_failed_hook = btree_io_failed_hook,
+       /* mandatory callbacks */
        .submit_bio_hook = btree_submit_bio_hook,
+       .readpage_end_io_hook = btree_readpage_end_io_hook,
        /* note we're sharing with inode.c for the merge bio hook */
        .merge_bio_hook = btrfs_merge_bio_hook,
+
+       /* optional callbacks */
+       .readpage_io_failed_hook = btree_io_failed_hook,
 };
index 78bb4d7..1f8478d 100644 (file)
@@ -92,18 +92,27 @@ typedef     int (extent_submit_bio_hook_t)(struct inode *inode, struct bio *bio,
                                       int mirror_num, unsigned long bio_flags,
                                       u64 bio_offset);
 struct extent_io_ops {
-       int (*fill_delalloc)(struct inode *inode, struct page *locked_page,
-                            u64 start, u64 end, int *page_started,
-                            unsigned long *nr_written);
-       int (*writepage_start_hook)(struct page *page, u64 start, u64 end);
+       /*
+        * The following callbacks must be allways defined, the function
+        * pointer will be called unconditionally.
+        */
        extent_submit_bio_hook_t *submit_bio_hook;
+       int (*readpage_end_io_hook)(struct btrfs_io_bio *io_bio, u64 phy_offset,
+                                   struct page *page, u64 start, u64 end,
+                                   int mirror);
        int (*merge_bio_hook)(struct page *page, unsigned long offset,
                              size_t size, struct bio *bio,
                              unsigned long bio_flags);
+
+       /*
+        * Optional hooks, called if the pointer is not NULL
+        */
+       int (*fill_delalloc)(struct inode *inode, struct page *locked_page,
+                            u64 start, u64 end, int *page_started,
+                            unsigned long *nr_written);
        int (*readpage_io_failed_hook)(struct page *page, int failed_mirror);
-       int (*readpage_end_io_hook)(struct btrfs_io_bio *io_bio, u64 phy_offset,
-                                   struct page *page, u64 start, u64 end,
-                                   int mirror);
+
+       int (*writepage_start_hook)(struct page *page, u64 start, u64 end);
        void (*writepage_end_io_hook)(struct page *page, u64 start, u64 end,
                                      struct extent_state *state, int uptodate);
        void (*set_bit_hook)(struct inode *inode, struct extent_state *state,
index b904c74..3b327c8 100644 (file)
@@ -10547,10 +10547,13 @@ static const struct file_operations btrfs_dir_file_operations = {
 };
 
 static const struct extent_io_ops btrfs_extent_io_ops = {
-       .fill_delalloc = run_delalloc_range,
+       /* mandatory callbacks */
        .submit_bio_hook = btrfs_submit_bio_hook,
-       .merge_bio_hook = btrfs_merge_bio_hook,
        .readpage_end_io_hook = btrfs_readpage_end_io_hook,
+       .merge_bio_hook = btrfs_merge_bio_hook,
+
+       /* optional callbacks */
+       .fill_delalloc = run_delalloc_range,
        .writepage_end_io_hook = btrfs_writepage_end_io_hook,
        .writepage_start_hook = btrfs_writepage_start_hook,
        .set_bit_hook = btrfs_set_bit_hook,