Message ID | 20190220151143.19057-3-nborisov@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Compressed path cleanups | expand |
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.
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 --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);
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(-)