diff mbox series

[v2,2/6] btrfs: Remove fs_info from struct async_cow

Message ID 20190220151143.19057-3-nborisov@suse.com (mailing list archive)
State New, archived
Headers show
Series Compressed path cleanups | expand

Commit Message

Nikolay Borisov Feb. 20, 2019, 3:11 p.m. UTC
We always pass an inode alongside async_cow. fs_info can be referenced
from this inode so it makes the explicit fs_info member in
struct async_cow redundant, remove it. No functional changes.

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

Comments

Johannes Thumshirn Feb. 20, 2019, 3:25 p.m. UTC | #1
On 20/02/2019 16:11, Nikolay Borisov wrote:
> We always pass an inode alongside async_cow. fs_info can be referenced
> from this inode so it makes the explicit fs_info member in
> struct async_cow redundant, remove it. No functional changes.

[...]

> @@ -1151,13 +1150,10 @@ static noinline void async_cow_start(struct btrfs_work *work)
>   */
>  static noinline void async_cow_submit(struct btrfs_work *work)
>  {
> -	struct btrfs_fs_info *fs_info;
> -	struct async_cow *async_cow;
> +	struct async_cow *async_cow = container_of(work, struct async_cow, work);
> +	struct btrfs_fs_info *fs_info = btrfs_work_owner(work);
>  	unsigned long nr_pages;

Nit, in your changelog you write that fs_info can be retrieved from the
inode that is passed with 'struct async_cow' but you're getting fs_info
from the btrfs_work structure.
Nikolay Borisov Feb. 20, 2019, 3:29 p.m. UTC | #2
On 20.02.19 г. 17:25 ч., Johannes Thumshirn wrote:
> On 20/02/2019 16:11, Nikolay Borisov wrote:
>> We always pass an inode alongside async_cow. fs_info can be referenced
>> from this inode so it makes the explicit fs_info member in
>> struct async_cow redundant, remove it. No functional changes.
> 
> [...]
> 
>> @@ -1151,13 +1150,10 @@ static noinline void async_cow_start(struct btrfs_work *work)
>>   */
>>  static noinline void async_cow_submit(struct btrfs_work *work)
>>  {
>> -	struct btrfs_fs_info *fs_info;
>> -	struct async_cow *async_cow;
>> +	struct async_cow *async_cow = container_of(work, struct async_cow, work);
>> +	struct btrfs_fs_info *fs_info = btrfs_work_owner(work);
>>  	unsigned long nr_pages;
> 
> Nit, in your changelog you write that fs_info can be retrieved from the
> inode that is passed with 'struct async_cow' but you're getting fs_info
> from the btrfs_work structure.

Ah blimey, indeed, this was because the inode could indeed be null so we
can actually take it from the btrfs_work struct which is always
guaranteed to have it initialized. I'll wait for more review comments to
accumulate before resend

>
diff mbox series

Patch

diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 546000779310..c6d4e0f67d14 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -368,7 +368,6 @@  struct async_extent {
 
 struct async_cow {
 	struct inode *inode;
-	struct btrfs_fs_info *fs_info;
 	struct page *locked_page;
 	u64 start;
 	u64 end;
@@ -1151,13 +1150,10 @@  static noinline void async_cow_start(struct btrfs_work *work)
  */
 static noinline void async_cow_submit(struct btrfs_work *work)
 {
-	struct btrfs_fs_info *fs_info;
-	struct async_cow *async_cow;
+	struct async_cow *async_cow = container_of(work, struct async_cow, work);
+	struct btrfs_fs_info *fs_info = btrfs_work_owner(work);
 	unsigned long nr_pages;
 
-	async_cow = container_of(work, struct async_cow, work);
-
-	fs_info = async_cow->fs_info;
 	nr_pages = (async_cow->end - async_cow->start + PAGE_SIZE) >>
 		PAGE_SHIFT;
 
@@ -1247,7 +1243,6 @@  static int cow_file_range_async(struct inode *inode, struct page *locked_page,
 		async_cow[i].inode = inode;
 		async_cow[i].start = start;
 		async_cow[i].end = cur_end;
-		async_cow[i].fs_info = fs_info;
 		async_cow[i].locked_page = locked_page;
 		async_cow[i].write_flags = write_flags;
 		INIT_LIST_HEAD(&async_cow[i].extents);