On Wed, Jun 27, 2018 at 04:38:24PM +0300, Nikolay Borisov wrote:
> EXTENT_BUFFER_DUMMY is an awful name for this flag. Buffers which have
> this flag set are not in any way dummy. Rather, they are private in
> the sense that are not linked to the global buffer tree. This flag has
> subtle implications to the way free_extent_buffer work for example, as
> well as controls whether page->mapping->private_lock is held during
> extent_buffer release. Pages for a private buffer cannot be under io,
> nor can they be written by a 3rd party so taking the lock is
> unnecessary.
> 
> Signed-off-by: Nikolay Borisov <nbori...@suse.com>
> ---
>  fs/btrfs/disk-io.c   |  2 +-
>  fs/btrfs/extent_io.c | 10 +++++-----
>  fs/btrfs/extent_io.h |  2 +-
>  3 files changed, 7 insertions(+), 7 deletions(-)
> 
> diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
> index 8a469f70d5ee..1c655be92690 100644
> --- a/fs/btrfs/disk-io.c
> +++ b/fs/btrfs/disk-io.c
> @@ -4093,7 +4093,7 @@ void btrfs_mark_buffer_dirty(struct extent_buffer *buf)
>        * enabled.  Normal people shouldn't be marking dummy buffers as dirty
>        * outside of the sanity tests.
>        */
> -     if (unlikely(test_bit(EXTENT_BUFFER_DUMMY, &buf->bflags)))
> +     if (unlikely(test_bit(EXTENT_BUFFER_PRIVATE, &buf->bflags)))

This is going to be confusing. There's page Private bit,
PAGE_SET_PRIVATE2 and EXTENT_PAGE_PRIVATE, that are somehow logically
connected.

I'd suggest EXTENT_BUFFER_CLONED or _UNMAPPED as it's created by
btrfs_clone_extent_buffer or used in the disconnected way (ie. without
the mapping).

>               return;
>  #endif
>       root = BTRFS_I(buf->pages[0]->mapping->host)->root;
> diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
> index 6ac15804bab1..6611207e8e1f 100644
> --- a/fs/btrfs/extent_io.c
> +++ b/fs/btrfs/extent_io.c
> @@ -4642,7 +4642,7 @@ int extent_buffer_under_io(struct extent_buffer *eb)
>  static void btrfs_release_extent_buffer_page(struct extent_buffer *eb)
>  {
>       int i;
> -     int mapped = !test_bit(EXTENT_BUFFER_DUMMY, &eb->bflags);
> +     int mapped = !test_bit(EXTENT_BUFFER_PRIVATE, &eb->bflags);
>  
>       BUG_ON(extent_buffer_under_io(eb));
>  
> @@ -4755,7 +4755,7 @@ struct extent_buffer *btrfs_clone_extent_buffer(struct 
> extent_buffer *src)
>       }
>  
>       set_bit(EXTENT_BUFFER_UPTODATE, &new->bflags);
> -     set_bit(EXTENT_BUFFER_DUMMY, &new->bflags);
> +     set_bit(EXTENT_BUFFER_PRIVATE, &new->bflags);
>  
>       return new;
>  }
> @@ -4780,7 +4780,7 @@ struct extent_buffer 
> *__alloc_dummy_extent_buffer(struct btrfs_fs_info *fs_info,

Would be good to sync the new name with the helpers:
__alloc_dummy_extent_buffer and alloc_dummy_extent_buffer then.

>       }
>       set_extent_buffer_uptodate(eb);
>       btrfs_set_header_nritems(eb, 0);
> -     set_bit(EXTENT_BUFFER_DUMMY, &eb->bflags);
> +     set_bit(EXTENT_BUFFER_PRIVATE, &eb->bflags);
>  
>       return eb;
>  err:
> @@ -5086,7 +5086,7 @@ static int release_extent_buffer(struct extent_buffer 
> *eb)
>               /* Should be safe to release our pages at this point */
>               btrfs_release_extent_buffer_page(eb);
>  #ifdef CONFIG_BTRFS_FS_RUN_SANITY_TESTS
> -             if (unlikely(test_bit(EXTENT_BUFFER_DUMMY, &eb->bflags))) {
> +             if (unlikely(test_bit(EXTENT_BUFFER_PRIVATE, &eb->bflags))) {
>                       __free_extent_buffer(eb);
>                       return 1;
>               }
> @@ -5117,7 +5117,7 @@ void free_extent_buffer(struct extent_buffer *eb)
>  
>       spin_lock(&eb->refs_lock);
>       if (atomic_read(&eb->refs) == 2 &&
> -         test_bit(EXTENT_BUFFER_DUMMY, &eb->bflags))
> +         test_bit(EXTENT_BUFFER_PRIVATE, &eb->bflags))
>               atomic_dec(&eb->refs);
>  
>       if (atomic_read(&eb->refs) == 2 &&
> diff --git a/fs/btrfs/extent_io.h b/fs/btrfs/extent_io.h
> index 0bfd4aeb822d..bfccaec2c89a 100644
> --- a/fs/btrfs/extent_io.h
> +++ b/fs/btrfs/extent_io.h
> @@ -46,7 +46,7 @@
>  #define EXTENT_BUFFER_STALE 6
>  #define EXTENT_BUFFER_WRITEBACK 7
>  #define EXTENT_BUFFER_READ_ERR 8        /* read IO error */
> -#define EXTENT_BUFFER_DUMMY 9
> +#define EXTENT_BUFFER_PRIVATE 9
>  #define EXTENT_BUFFER_IN_TREE 10
>  #define EXTENT_BUFFER_WRITE_ERR 11    /* write IO error */
>  
> -- 
> 2.7.4
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to