From: Dave Chinner <david@fromorbit.com>
To: Naohiro Aota <naohiro.aota@wdc.com>
Cc: linux-btrfs@vger.kernel.org, johannes.thumshirn@wdc.com,
linux-fsdevel@vger.kernel.org, viro@zeniv.linux.org.uk
Subject: Re: [PATCH v2 1/2] fs: add asserting functions for sb_start_{write,pagefault,intwrite}
Date: Tue, 15 Feb 2022 08:35:31 +1100 [thread overview]
Message-ID: <20220214213531.GA2872883@dread.disaster.area> (raw)
In-Reply-To: <40cbbef14229eaa34df0cdc576f02a1bd4ba6809.1644469146.git.naohiro.aota@wdc.com>
On Thu, Feb 10, 2022 at 02:59:04PM +0900, Naohiro Aota wrote:
> Add an assert function sb_assert_write_started() to check if
> sb_start_write() is properly called. It is used in the next commit.
>
> Also, add the assert functions for sb_start_pagefault() and
> sb_start_intwrite().
>
> Signed-off-by: Naohiro Aota <naohiro.aota@wdc.com>
> ---
> include/linux/fs.h | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index bbf812ce89a8..5d5dc9a276d9 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -1820,6 +1820,11 @@ static inline bool __sb_start_write_trylock(struct super_block *sb, int level)
> #define __sb_writers_release(sb, lev) \
> percpu_rwsem_release(&(sb)->s_writers.rw_sem[(lev)-1], 1, _THIS_IP_)
>
> +static inline void __sb_assert_write_started(struct super_block *sb, int level)
> +{
> + lockdep_assert_held_read(sb->s_writers.rw_sem + level - 1);
> +}
> +
So this isn't an assert, it's a WARN_ON(). Asserts stop execution
(i.e. kill the task) rather than just issue a warning, so let's not
name a function that issues a warning "assert"...
Hence I'd much rather see this implemented as:
static inline bool __sb_write_held(struct super_block *sb, int level)
{
return lockdep_is_held_type(sb->s_writers.rw_sem + level - 1, 1);
}
i.e. named similar to __sb_start_write/__sb_end_write, with similar
wrappers for pagefault/intwrite, and it just returns a bool status
that lets the caller do what it wants with the status (warn, bug,
etc).
Then in the code that needs to check if the right freeze levels are
held simply need to do:
WARN_ON(!sb_write_held(sb));
in which case it's self documenting in the code that cares about
this and it's also obvious to anyone debugging such a message where
it came from and what constraint got violated...
Cheers,
Dave.
--
Dave Chinner
david@fromorbit.com
next prev parent reply other threads:[~2022-02-14 22:04 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-10 5:59 [PATCH v2 0/2] btrfs: zoned: mark relocation as writing Naohiro Aota
2022-02-10 5:59 ` [PATCH v2 1/2] fs: add asserting functions for sb_start_{write,pagefault,intwrite} Naohiro Aota
2022-02-14 21:35 ` Dave Chinner [this message]
2022-02-14 22:49 ` Damien Le Moal
2022-02-15 0:05 ` Dave Chinner
2022-02-15 0:07 ` Damien Le Moal
2022-02-16 3:02 ` Naohiro Aota
2022-02-10 5:59 ` [PATCH v2 2/2] btrfs: zoned: mark relocation as writing Naohiro Aota
2022-02-10 13:03 ` [PATCH v2 0/2] " Johannes Thumshirn
2022-02-14 17:22 ` David Sterba
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220214213531.GA2872883@dread.disaster.area \
--to=david@fromorbit.com \
--cc=johannes.thumshirn@wdc.com \
--cc=linux-btrfs@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=naohiro.aota@wdc.com \
--cc=viro@zeniv.linux.org.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox