diff mbox series

[v3,1/3] btrfs: add comments for check_can_nocow() and can_nocow_extent()

Message ID 20200618074950.136553-2-wqu@suse.com (mailing list archive)
State New, archived
Headers show
Series btrfs: allow btrfs_truncate_block() to fallback to nocow for data space reservation | expand

Commit Message

Qu Wenruo June 18, 2020, 7:49 a.m. UTC
These two functions have extra conditions that their callers need to
meet, and some not-that-common parameters used for return value.

So adding some comments may save reviewers some time.

Signed-off-by: Qu Wenruo <wqu@suse.com>
---
 fs/btrfs/file.c  | 19 +++++++++++++++++++
 fs/btrfs/inode.c | 19 +++++++++++++++++--
 2 files changed, 36 insertions(+), 2 deletions(-)

Comments

Johannes Thumshirn June 18, 2020, 11:57 a.m. UTC | #1
On 18/06/2020 09:50, Qu Wenruo wrote:
> These two functions have extra conditions that their callers need to
> meet, and some not-that-common parameters used for return value.
> 
> So adding some comments may save reviewers some time.

These comments have a style/formatting similar to kerneldoc, can you make
them real kerneldoc?

> 
> Signed-off-by: Qu Wenruo <wqu@suse.com>
> ---
>  fs/btrfs/file.c  | 19 +++++++++++++++++++
>  fs/btrfs/inode.c | 19 +++++++++++++++++--
>  2 files changed, 36 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
> index fccf5862cd3e..0e4f57fb2737 100644
> --- a/fs/btrfs/file.c
> +++ b/fs/btrfs/file.c
> @@ -1533,6 +1533,25 @@ lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page **pages,
>  	return ret;
>  }
>  
> +/*
> + * Check if we can do nocow write into the range [@pos, @pos + @write_bytes)
> + *
> + * This function will flush ordered extents in the range to ensure proper
> + * nocow checks for (nowait == false) case.
> + *
> + * Return >0 and update @write_bytes if we can do nocow write into the range.
> + * Return 0 if we can't do nocow write.
> + * Return -EAGAIN if we can't get the needed lock, or for (nowait == true) case,
> + * there are ordered extents need to be flushed.
> + * Return <0 for if other error happened.
> + *
> + * NOTE: For wait (nowait==false) calls, callers need to release the drew write
> + * 	 lock of inode->root->snapshot_lock if return value > 0.
> + *
> + * @pos:	 File offset of the range
> + * @write_bytes: The length of the range to check, also contains the nocow
> + * 		 writable length if we can do nocow write
> + */
>  static noinline int check_can_nocow(struct btrfs_inode *inode, loff_t pos,
>  				    size_t *write_bytes, bool nowait)
>  {
> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> index 86f7aa377da9..48e16eae7278 100644
> --- a/fs/btrfs/inode.c
> +++ b/fs/btrfs/inode.c
> @@ -6922,8 +6922,23 @@ static struct extent_map *btrfs_new_extent_direct(struct inode *inode,
>  }
>  
>  /*
> - * returns 1 when the nocow is safe, < 1 on error, 0 if the
> - * block must be cow'd
> + * Check if we can write into [@offset, @offset + @len) of @inode.
> + *
> + * Return >0 and update @len if we can do nocow write into [@offset, @offset +
> + * @len).
> + * Return 0 if we can't do nocow write.
> + * Return <0 if error happened.
> + *
> + * NOTE: This only checks the file extents, caller is responsible to wait for
> + *	 any ordered extents.
> + *
> + * @offset:	File offset
> + * @len:	The length to write, will be updated to the nocow writable
> + * 		range
> + *
> + * @orig_start:	(Optional) Return the original file offset of the file extent
> + * @orig_len:	(Optional) Return the original on-disk length of the file extent
> + * @ram_bytes:	(Optional) Return the ram_bytes of the file extent
>   */
>  noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len,
>  			      u64 *orig_start, u64 *orig_block_len,
>
Qu Wenruo June 18, 2020, noon UTC | #2
On 2020/6/18 下午7:57, Johannes Thumshirn wrote:
> On 18/06/2020 09:50, Qu Wenruo wrote:
>> These two functions have extra conditions that their callers need to
>> meet, and some not-that-common parameters used for return value.
>>
>> So adding some comments may save reviewers some time.
> 
> These comments have a style/formatting similar to kerneldoc, can you make
> them real kerneldoc?

Mind to give an example? It must be a coincident to match some existing
format.

Thanks,
Qu

> 
>>
>> Signed-off-by: Qu Wenruo <wqu@suse.com>
>> ---
>>  fs/btrfs/file.c  | 19 +++++++++++++++++++
>>  fs/btrfs/inode.c | 19 +++++++++++++++++--
>>  2 files changed, 36 insertions(+), 2 deletions(-)
>>
>> diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
>> index fccf5862cd3e..0e4f57fb2737 100644
>> --- a/fs/btrfs/file.c
>> +++ b/fs/btrfs/file.c
>> @@ -1533,6 +1533,25 @@ lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page **pages,
>>  	return ret;
>>  }
>>  
>> +/*
>> + * Check if we can do nocow write into the range [@pos, @pos + @write_bytes)
>> + *
>> + * This function will flush ordered extents in the range to ensure proper
>> + * nocow checks for (nowait == false) case.
>> + *
>> + * Return >0 and update @write_bytes if we can do nocow write into the range.
>> + * Return 0 if we can't do nocow write.
>> + * Return -EAGAIN if we can't get the needed lock, or for (nowait == true) case,
>> + * there are ordered extents need to be flushed.
>> + * Return <0 for if other error happened.
>> + *
>> + * NOTE: For wait (nowait==false) calls, callers need to release the drew write
>> + * 	 lock of inode->root->snapshot_lock if return value > 0.
>> + *
>> + * @pos:	 File offset of the range
>> + * @write_bytes: The length of the range to check, also contains the nocow
>> + * 		 writable length if we can do nocow write
>> + */
>>  static noinline int check_can_nocow(struct btrfs_inode *inode, loff_t pos,
>>  				    size_t *write_bytes, bool nowait)
>>  {
>> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
>> index 86f7aa377da9..48e16eae7278 100644
>> --- a/fs/btrfs/inode.c
>> +++ b/fs/btrfs/inode.c
>> @@ -6922,8 +6922,23 @@ static struct extent_map *btrfs_new_extent_direct(struct inode *inode,
>>  }
>>  
>>  /*
>> - * returns 1 when the nocow is safe, < 1 on error, 0 if the
>> - * block must be cow'd
>> + * Check if we can write into [@offset, @offset + @len) of @inode.
>> + *
>> + * Return >0 and update @len if we can do nocow write into [@offset, @offset +
>> + * @len).
>> + * Return 0 if we can't do nocow write.
>> + * Return <0 if error happened.
>> + *
>> + * NOTE: This only checks the file extents, caller is responsible to wait for
>> + *	 any ordered extents.
>> + *
>> + * @offset:	File offset
>> + * @len:	The length to write, will be updated to the nocow writable
>> + * 		range
>> + *
>> + * @orig_start:	(Optional) Return the original file offset of the file extent
>> + * @orig_len:	(Optional) Return the original on-disk length of the file extent
>> + * @ram_bytes:	(Optional) Return the ram_bytes of the file extent
>>   */
>>  noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len,
>>  			      u64 *orig_start, u64 *orig_block_len,
>>
>
Johannes Thumshirn June 18, 2020, 12:14 p.m. UTC | #3
On 18/06/2020 14:00, Qu Wenruo wrote:
> 
> 
> On 2020/6/18 下午7:57, Johannes Thumshirn wrote:
>> On 18/06/2020 09:50, Qu Wenruo wrote:
>>> These two functions have extra conditions that their callers need to
>>> meet, and some not-that-common parameters used for return value.
>>>
>>> So adding some comments may save reviewers some time.
>>
>> These comments have a style/formatting similar to kerneldoc, can you make
>> them real kerneldoc?
> 
> Mind to give an example? It must be a coincident to match some existing
> format.
> 

Sure:

/**
 * check_can_nocow() - Check if we can write into [@offset, @offset + @len) of @inode.
 *
 * @offset:	File offset
 * @len:	The length to write, will be updated to the nocow writable
 * 		range
 * @orig_start:	Return the original file offset of the file extent (Optional)
 * @orig_len:	Return the original on-disk length of the file extent (Optional)
 * @ram_bytes:	Return the ram_bytes of the file extent (Optional)
 *
 * Return: >0 and update @len if we can do nocow write into [@offset, @offset + @len),
 * 0 if we can't do nocow write or <0 if error happened.
 *
 * NOTE: This only checks the file extents, caller is responsible to wait for
 *	 any ordered extents.
 *
 */

See also Documentation/doc-guide/kernel-doc.rst for a detailed description

Thanks,
	Johannes
David Sterba June 18, 2020, 3:14 p.m. UTC | #4
On Thu, Jun 18, 2020 at 12:14:00PM +0000, Johannes Thumshirn wrote:
> On 18/06/2020 14:00, Qu Wenruo wrote:
> > 
> > 
> > On 2020/6/18 下午7:57, Johannes Thumshirn wrote:
> >> On 18/06/2020 09:50, Qu Wenruo wrote:
> >>> These two functions have extra conditions that their callers need to
> >>> meet, and some not-that-common parameters used for return value.
> >>>
> >>> So adding some comments may save reviewers some time.
> >>
> >> These comments have a style/formatting similar to kerneldoc, can you make
> >> them real kerneldoc?
> > 
> > Mind to give an example? It must be a coincident to match some existing
> > format.
> > 
> 
> Sure:
> 
> /**
>  * check_can_nocow() - Check if we can write into [@offset, @offset + @len) of @inode.
>  *
>  * @offset:	File offset
>  * @len:	The length to write, will be updated to the nocow writable
>  * 		range
>  * @orig_start:	Return the original file offset of the file extent (Optional)
>  * @orig_len:	Return the original on-disk length of the file extent (Optional)
>  * @ram_bytes:	Return the ram_bytes of the file extent (Optional)
>  *
>  * Return: >0 and update @len if we can do nocow write into [@offset, @offset + @len),
>  * 0 if we can't do nocow write or <0 if error happened.
>  *
>  * NOTE: This only checks the file extents, caller is responsible to wait for
>  *	 any ordered extents.
>  *
>  */
> 
> See also Documentation/doc-guide/kernel-doc.rst for a detailed description

The kernel doc is relatively good, but for our internal helpers I see
much point using it and keep the function comment style more relaxed.

The short summary, argument description, long description and return
values. No strict formatting of the parameters but the "@name: text"
looks ok.
diff mbox series

Patch

diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index fccf5862cd3e..0e4f57fb2737 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -1533,6 +1533,25 @@  lock_and_cleanup_extent_if_need(struct btrfs_inode *inode, struct page **pages,
 	return ret;
 }
 
+/*
+ * Check if we can do nocow write into the range [@pos, @pos + @write_bytes)
+ *
+ * This function will flush ordered extents in the range to ensure proper
+ * nocow checks for (nowait == false) case.
+ *
+ * Return >0 and update @write_bytes if we can do nocow write into the range.
+ * Return 0 if we can't do nocow write.
+ * Return -EAGAIN if we can't get the needed lock, or for (nowait == true) case,
+ * there are ordered extents need to be flushed.
+ * Return <0 for if other error happened.
+ *
+ * NOTE: For wait (nowait==false) calls, callers need to release the drew write
+ * 	 lock of inode->root->snapshot_lock if return value > 0.
+ *
+ * @pos:	 File offset of the range
+ * @write_bytes: The length of the range to check, also contains the nocow
+ * 		 writable length if we can do nocow write
+ */
 static noinline int check_can_nocow(struct btrfs_inode *inode, loff_t pos,
 				    size_t *write_bytes, bool nowait)
 {
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 86f7aa377da9..48e16eae7278 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -6922,8 +6922,23 @@  static struct extent_map *btrfs_new_extent_direct(struct inode *inode,
 }
 
 /*
- * returns 1 when the nocow is safe, < 1 on error, 0 if the
- * block must be cow'd
+ * Check if we can write into [@offset, @offset + @len) of @inode.
+ *
+ * Return >0 and update @len if we can do nocow write into [@offset, @offset +
+ * @len).
+ * Return 0 if we can't do nocow write.
+ * Return <0 if error happened.
+ *
+ * NOTE: This only checks the file extents, caller is responsible to wait for
+ *	 any ordered extents.
+ *
+ * @offset:	File offset
+ * @len:	The length to write, will be updated to the nocow writable
+ * 		range
+ *
+ * @orig_start:	(Optional) Return the original file offset of the file extent
+ * @orig_len:	(Optional) Return the original on-disk length of the file extent
+ * @ram_bytes:	(Optional) Return the ram_bytes of the file extent
  */
 noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len,
 			      u64 *orig_start, u64 *orig_block_len,