Linux Btrfs filesystem development
 help / color / mirror / Atom feed
* [PATCH 0/3] Cleanups following optional extent_io_ops callbacks removal
@ 2018-11-08  8:18 Nikolay Borisov
  2018-11-08  8:18 ` [PATCH 1/3] btrfs: Move epd::extent_locked check to writepage_delalloc's caller Nikolay Borisov
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Nikolay Borisov @ 2018-11-08  8:18 UTC (permalink / raw)
  To: linux-btrfs; +Cc: Nikolay Borisov

Here are 3 minor patches that further clean up writepage_delalloc. The first
one moves the extent locked check in the caller of writepage_delalloc since
this seems more natural. This paves the way for the second patch which removes
epd as an argument to writepage_delalloc. The final patch was suggested by 
Josef and removes an extent_state argument which has never been used. 

Nikolay Borisov (3):
  btrfs: Move epd::extent_locked check to writepage_delalloc's caller
  btrfs: Remove extent_page_data argument from writepage_delalloc
  btrfs: Remove unused extent_state argument from
    btrfs_writepage_endio_finish_ordered

 fs/btrfs/compression.c |  6 ++++--
 fs/btrfs/ctree.h       |  4 ++--
 fs/btrfs/extent_io.c   | 36 +++++++++++++++++-------------------
 fs/btrfs/inode.c       |  7 +++----
 4 files changed, 26 insertions(+), 27 deletions(-)

-- 
2.17.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH 1/3] btrfs: Move epd::extent_locked check to writepage_delalloc's caller
  2018-11-08  8:18 [PATCH 0/3] Cleanups following optional extent_io_ops callbacks removal Nikolay Borisov
@ 2018-11-08  8:18 ` Nikolay Borisov
  2018-11-08  8:18 ` [PATCH 2/3] btrfs: Remove extent_page_data argument from writepage_delalloc Nikolay Borisov
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 6+ messages in thread
From: Nikolay Borisov @ 2018-11-08  8:18 UTC (permalink / raw)
  To: linux-btrfs; +Cc: Nikolay Borisov

If epd::extent_locked is set then writepage_delalloc terminates. Make
this a bit more apparent in the caller by simply bubbling the check up.
This enables to remove epd as an argument to writepage_delalloc in a
future patch. No functional change.

Signed-off-by: Nikolay Borisov <nborisov@suse.com>
---
 fs/btrfs/extent_io.c | 15 ++++++++-------
 1 file changed, 8 insertions(+), 7 deletions(-)

diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index 46c299560f4f..e1ce07b2d33a 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -3215,8 +3215,6 @@ static noinline_for_stack int writepage_delalloc(struct inode *inode,
 	int ret;
 	int page_started = 0;
 
-	if (epd->extent_locked)
-		return 0;
 
 	while (delalloc_end < page_end) {
 		nr_delalloc = find_lock_delalloc_range(inode, tree,
@@ -3472,11 +3470,14 @@ static int __extent_writepage(struct page *page, struct writeback_control *wbc,
 
 	set_page_extent_mapped(page);
 
-	ret = writepage_delalloc(inode, page, wbc, epd, start, &nr_written);
-	if (ret == 1)
-		goto done_unlocked;
-	if (ret)
-		goto done;
+	if (!epd->extent_locked) {
+		ret = writepage_delalloc(inode, page, wbc, epd, start,
+					 &nr_written);
+		if (ret == 1)
+			goto done_unlocked;
+		if (ret)
+			goto done;
+	}
 
 	ret = __extent_writepage_io(inode, page, wbc, epd,
 				    i_size, nr_written, write_flags, &nr);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 2/3] btrfs: Remove extent_page_data argument from writepage_delalloc
  2018-11-08  8:18 [PATCH 0/3] Cleanups following optional extent_io_ops callbacks removal Nikolay Borisov
  2018-11-08  8:18 ` [PATCH 1/3] btrfs: Move epd::extent_locked check to writepage_delalloc's caller Nikolay Borisov
@ 2018-11-08  8:18 ` Nikolay Borisov
  2018-11-08  8:18 ` [PATCH 3/3] btrfs: Remove unused extent_state argument from btrfs_writepage_endio_finish_ordered Nikolay Borisov
  2018-11-12 18:58 ` [PATCH 0/3] Cleanups following optional extent_io_ops callbacks removal David Sterba
  3 siblings, 0 replies; 6+ messages in thread
From: Nikolay Borisov @ 2018-11-08  8:18 UTC (permalink / raw)
  To: linux-btrfs; +Cc: Nikolay Borisov

The only remaining use of the 'epd' argument in writepage_delalloc is
to reference the extent_io_tree which was set in extent_writepages. Since
it is guaranteed that page->mapping of any page passed to
writepage_delalloc (and __extent_writepage as the sole caller) to be
equal to that passed in extent_writepages we can directly get the
io_tree via the already passed inode (which is also taken from
page->mapping->host). No functional changes.

Signed-off-by: Nikolay Borisov <nborisov@suse.com>
---
 fs/btrfs/extent_io.c | 13 ++++++-------
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index e1ce07b2d33a..cca9d3cbe74a 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -3202,12 +3202,12 @@ static void update_nr_written(struct writeback_control *wbc,
  * This returns < 0 if there were errors (page still locked)
  */
 static noinline_for_stack int writepage_delalloc(struct inode *inode,
-			      struct page *page, struct writeback_control *wbc,
-			      struct extent_page_data *epd,
-			      u64 delalloc_start,
-			      unsigned long *nr_written)
+						 struct page *page,
+						 struct writeback_control *wbc,
+						 u64 delalloc_start,
+						 unsigned long *nr_written)
 {
-	struct extent_io_tree *tree = epd->tree;
+	struct extent_io_tree *tree = &BTRFS_I(inode)->io_tree;
 	u64 page_end = delalloc_start + PAGE_SIZE - 1;
 	u64 nr_delalloc;
 	u64 delalloc_to_write = 0;
@@ -3471,8 +3471,7 @@ static int __extent_writepage(struct page *page, struct writeback_control *wbc,
 	set_page_extent_mapped(page);
 
 	if (!epd->extent_locked) {
-		ret = writepage_delalloc(inode, page, wbc, epd, start,
-					 &nr_written);
+		ret = writepage_delalloc(inode, page, wbc, start, &nr_written);
 		if (ret == 1)
 			goto done_unlocked;
 		if (ret)
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH 3/3] btrfs: Remove unused extent_state argument from btrfs_writepage_endio_finish_ordered
  2018-11-08  8:18 [PATCH 0/3] Cleanups following optional extent_io_ops callbacks removal Nikolay Borisov
  2018-11-08  8:18 ` [PATCH 1/3] btrfs: Move epd::extent_locked check to writepage_delalloc's caller Nikolay Borisov
  2018-11-08  8:18 ` [PATCH 2/3] btrfs: Remove extent_page_data argument from writepage_delalloc Nikolay Borisov
@ 2018-11-08  8:18 ` Nikolay Borisov
  2018-11-12 19:02   ` David Sterba
  2018-11-12 18:58 ` [PATCH 0/3] Cleanups following optional extent_io_ops callbacks removal David Sterba
  3 siblings, 1 reply; 6+ messages in thread
From: Nikolay Borisov @ 2018-11-08  8:18 UTC (permalink / raw)
  To: linux-btrfs; +Cc: Nikolay Borisov

This parameter was never used, yet was part of the interface of the
function ever since its introduction as extent_io_ops::writepage_end_io_hook
in e6dcd2dc9c48 ("Btrfs: New data=ordered implementation"). Now that
NULL is passed everywhere as a value for this parameter let's remove it
for good. No functional changes.

Signed-off-by: Nikolay Borisov <nborisov@suse.com>
---
 fs/btrfs/compression.c |  6 ++++--
 fs/btrfs/ctree.h       |  4 ++--
 fs/btrfs/extent_io.c   | 12 +++++-------
 fs/btrfs/inode.c       |  7 +++----
 4 files changed, 14 insertions(+), 15 deletions(-)

diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c
index bde8d0487bbb..717d9300dd18 100644
--- a/fs/btrfs/compression.c
+++ b/fs/btrfs/compression.c
@@ -251,8 +251,10 @@ static void end_compressed_bio_write(struct bio *bio)
 	tree = &BTRFS_I(inode)->io_tree;
 	cb->compressed_pages[0]->mapping = cb->inode->i_mapping;
 	btrfs_writepage_endio_finish_ordered(cb->compressed_pages[0],
-			cb->start, cb->start + cb->len - 1, NULL,
-			bio->bi_status ? BLK_STS_OK : BLK_STS_NOTSUPP);
+					     cb->start,
+					     cb->start + cb->len - 1,
+					     bio->bi_status ?
+					     BLK_STS_OK : BLK_STS_NOTSUPP);
 	cb->compressed_pages[0]->mapping = NULL;
 
 	end_compressed_writeback(inode, cb);
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h
index 8b41ec42f405..c48fcaf4004d 100644
--- a/fs/btrfs/ctree.h
+++ b/fs/btrfs/ctree.h
@@ -3179,7 +3179,7 @@ int btrfs_create_subvol_root(struct btrfs_trans_handle *trans,
 			     struct btrfs_root *new_root,
 			     struct btrfs_root *parent_root,
 			     u64 new_dirid);
-void btrfs_set_delalloc_extent(struct inode *inode, struct extent_state *state,
+ void btrfs_set_delalloc_extent(struct inode *inode, struct extent_state *state,
 			       unsigned *bits);
 void btrfs_clear_delalloc_extent(struct inode *inode,
 				 struct extent_state *state, unsigned *bits);
@@ -3231,7 +3231,7 @@ int btrfs_run_delalloc_range(void *private_data, struct page *locked_page,
 		struct writeback_control *wbc);
 int btrfs_writepage_cow_fixup(struct page *page, u64 start, u64 end);
 void btrfs_writepage_endio_finish_ordered(struct page *page, u64 start,
-		u64 end, struct extent_state *state, int uptodate);
+					  u64 end, int uptodate);
 extern const struct dentry_operations btrfs_dentry_operations;
 
 /* ioctl.c */
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index cca9d3cbe74a..f3bf7f9c13c0 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -2408,7 +2408,7 @@ void end_extent_writepage(struct page *page, int err, u64 start, u64 end)
 
 	tree = &BTRFS_I(page->mapping->host)->io_tree;
 
-	btrfs_writepage_endio_finish_ordered(page, start, end, NULL, uptodate);
+	btrfs_writepage_endio_finish_ordered(page, start, end, uptodate);
 
 	if (!uptodate) {
 		ClearPageUptodate(page);
@@ -3329,8 +3329,7 @@ static noinline_for_stack int __extent_writepage_io(struct inode *inode,
 
 	end = page_end;
 	if (i_size <= start) {
-		btrfs_writepage_endio_finish_ordered(page, start, page_end,
-						     NULL, 1);
+		btrfs_writepage_endio_finish_ordered(page, start, page_end, 1);
 		goto done;
 	}
 
@@ -3342,7 +3341,7 @@ static noinline_for_stack int __extent_writepage_io(struct inode *inode,
 
 		if (cur >= i_size) {
 			btrfs_writepage_endio_finish_ordered(page, cur,
-							     page_end, NULL, 1);
+							     page_end, 1);
 			break;
 		}
 		em = btrfs_get_extent(BTRFS_I(inode), page, pg_offset, cur,
@@ -3379,7 +3378,7 @@ static noinline_for_stack int __extent_writepage_io(struct inode *inode,
 			if (!compressed)
 				btrfs_writepage_endio_finish_ordered(page, cur,
 							    cur + iosize - 1,
-							    NULL, 1);
+							    1);
 			else if (compressed) {
 				/* we don't want to end_page_writeback on
 				 * a compressed extent.  this happens
@@ -4066,8 +4065,7 @@ int extent_write_locked_range(struct inode *inode, u64 start, u64 end,
 			ret = __extent_writepage(page, &wbc_writepages, &epd);
 		else {
 			btrfs_writepage_endio_finish_ordered(page, start,
-						    start + PAGE_SIZE - 1,
-						    NULL, 1);
+						    start + PAGE_SIZE - 1, 1);
 			unlock_page(page);
 		}
 		put_page(page);
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index a097f5fde31d..c3f540933238 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -852,8 +852,7 @@ static noinline void submit_compressed_extents(struct inode *inode,
 			const u64 end = start + async_extent->ram_size - 1;
 
 			p->mapping = inode->i_mapping;
-			btrfs_writepage_endio_finish_ordered(p, start, end,
-							     NULL, 0);
+			btrfs_writepage_endio_finish_ordered(p, start, end, 0);
 
 			p->mapping = NULL;
 			extent_clear_unlock_delalloc(inode, start, end, end,
@@ -3152,8 +3151,8 @@ static void finish_ordered_fn(struct btrfs_work *work)
 	btrfs_finish_ordered_io(ordered_extent);
 }
 
-void btrfs_writepage_endio_finish_ordered(struct page *page, u64 start, u64 end,
-				struct extent_state *state, int uptodate)
+void btrfs_writepage_endio_finish_ordered(struct page *page, u64 start,
+					  u64 end, int uptodate)
 {
 	struct inode *inode = page->mapping->host;
 	struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH 0/3] Cleanups following optional extent_io_ops callbacks removal
  2018-11-08  8:18 [PATCH 0/3] Cleanups following optional extent_io_ops callbacks removal Nikolay Borisov
                   ` (2 preceding siblings ...)
  2018-11-08  8:18 ` [PATCH 3/3] btrfs: Remove unused extent_state argument from btrfs_writepage_endio_finish_ordered Nikolay Borisov
@ 2018-11-12 18:58 ` David Sterba
  3 siblings, 0 replies; 6+ messages in thread
From: David Sterba @ 2018-11-12 18:58 UTC (permalink / raw)
  To: Nikolay Borisov; +Cc: linux-btrfs

On Thu, Nov 08, 2018 at 10:18:05AM +0200, Nikolay Borisov wrote:
> Here are 3 minor patches that further clean up writepage_delalloc. The first
> one moves the extent locked check in the caller of writepage_delalloc since
> this seems more natural. This paves the way for the second patch which removes
> epd as an argument to writepage_delalloc. The final patch was suggested by 
> Josef and removes an extent_state argument which has never been used. 
> 
> Nikolay Borisov (3):
>   btrfs: Move epd::extent_locked check to writepage_delalloc's caller
>   btrfs: Remove extent_page_data argument from writepage_delalloc
>   btrfs: Remove unused extent_state argument from
>     btrfs_writepage_endio_finish_ordered

Added to misc-next, thanks.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH 3/3] btrfs: Remove unused extent_state argument from btrfs_writepage_endio_finish_ordered
  2018-11-08  8:18 ` [PATCH 3/3] btrfs: Remove unused extent_state argument from btrfs_writepage_endio_finish_ordered Nikolay Borisov
@ 2018-11-12 19:02   ` David Sterba
  0 siblings, 0 replies; 6+ messages in thread
From: David Sterba @ 2018-11-12 19:02 UTC (permalink / raw)
  To: Nikolay Borisov; +Cc: linux-btrfs

On Thu, Nov 08, 2018 at 10:18:08AM +0200, Nikolay Borisov wrote:
> This parameter was never used, yet was part of the interface of the
> function ever since its introduction as extent_io_ops::writepage_end_io_hook
> in e6dcd2dc9c48 ("Btrfs: New data=ordered implementation"). Now that
> NULL is passed everywhere as a value for this parameter let's remove it
> for good. No functional changes.
> 
> Signed-off-by: Nikolay Borisov <nborisov@suse.com>
> ---
>  fs/btrfs/compression.c |  6 ++++--
>  fs/btrfs/ctree.h       |  4 ++--
>  fs/btrfs/extent_io.c   | 12 +++++-------
>  fs/btrfs/inode.c       |  7 +++----
>  4 files changed, 14 insertions(+), 15 deletions(-)
> 
> diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c
> index bde8d0487bbb..717d9300dd18 100644
> --- a/fs/btrfs/compression.c
> +++ b/fs/btrfs/compression.c
> @@ -251,8 +251,10 @@ static void end_compressed_bio_write(struct bio *bio)
>  	tree = &BTRFS_I(inode)->io_tree;
>  	cb->compressed_pages[0]->mapping = cb->inode->i_mapping;
>  	btrfs_writepage_endio_finish_ordered(cb->compressed_pages[0],
> -			cb->start, cb->start + cb->len - 1, NULL,
> -			bio->bi_status ? BLK_STS_OK : BLK_STS_NOTSUPP);
> +					     cb->start,
> +					     cb->start + cb->len - 1,
> +					     bio->bi_status ?
> +					     BLK_STS_OK : BLK_STS_NOTSUPP);

Please not how the ternary operator had to be split to two lines just to
satisfy the 'arguments align under opening brace' formatting, that I
don't like but tolerate in many cases unless it looks too ugly or breaks
expression unnecessarily.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2018-11-12 19:03 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-11-08  8:18 [PATCH 0/3] Cleanups following optional extent_io_ops callbacks removal Nikolay Borisov
2018-11-08  8:18 ` [PATCH 1/3] btrfs: Move epd::extent_locked check to writepage_delalloc's caller Nikolay Borisov
2018-11-08  8:18 ` [PATCH 2/3] btrfs: Remove extent_page_data argument from writepage_delalloc Nikolay Borisov
2018-11-08  8:18 ` [PATCH 3/3] btrfs: Remove unused extent_state argument from btrfs_writepage_endio_finish_ordered Nikolay Borisov
2018-11-12 19:02   ` David Sterba
2018-11-12 18:58 ` [PATCH 0/3] Cleanups following optional extent_io_ops callbacks removal David Sterba

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox