mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Baokun Li <libaokun1@huawei.com>
To: Ojaswin Mujoo <ojaswin@linux.ibm.com>
Cc: <linux-ext4@vger.kernel.org>, Jan Kara <jack@suse.com>,
	Ritesh Harjani <ritesh.list@gmail.com>,
	<linux-kernel@vger.kernel.org>, <linux-fsdevel@vger.kernel.org>,
	Jan Kara <jack@suse.cz>, Yang Erkun <yangerkun@huawei.com>
Subject: Re: [PATCH v2 2/2] ext4: protect ext4_release_dquot against freezing
Date: Tue, 3 Dec 2024 16:29:31 +0800	[thread overview]
Message-ID: <8885691f-b977-409f-90f8-b24c41a49de0@huawei.com> (raw)
In-Reply-To: <Z0a1x7yksOE4Jsha@li-bb2b2a4c-3307-11b2-a85c-8fa5c3a69313.ibm.com>

On 2024/11/27 14:01, Ojaswin Mujoo wrote:
> On Tue, Nov 26, 2024 at 10:49:14PM +0800, Baokun Li wrote:
>> On 2024/11/21 20:38, Ojaswin Mujoo wrote:
>>> Protect ext4_release_dquot against freezing so that we
>>> don't try to start a transaction when FS is frozen, leading
>>> to warnings.
>>>
>>> Further, avoid taking the freeze protection if a transaction
>>> is already running so that we don't need end up in a deadlock
>>> as described in
>>>
>>>     46e294efc355 ext4: fix deadlock with fs freezing and EA inodes
>>>
>>> Suggested-by: Jan Kara <jack@suse.cz>
>>> Signed-off-by: Ojaswin Mujoo <ojaswin@linux.ibm.com>
>>> ---
>>>    fs/ext4/super.c | 17 +++++++++++++++++
>>>    1 file changed, 17 insertions(+)
>>>
>>> diff --git a/fs/ext4/super.c b/fs/ext4/super.c
>>> index 16a4ce704460..f7437a592359 100644
>>> --- a/fs/ext4/super.c
>>> +++ b/fs/ext4/super.c
>>> @@ -6887,12 +6887,25 @@ static int ext4_release_dquot(struct dquot *dquot)
>>>    {
>>>    	int ret, err;
>>>    	handle_t *handle;
>>> +	bool freeze_protected = false;
>>> +
>>> +	/*
>>> +	 * Trying to sb_start_intwrite() in a running transaction
>>> +	 * can result in a deadlock. Further, running transactions
>>> +	 * are already protected from freezing.
>>> +	 */
>>> +	if (!ext4_journal_current_handle()) {
>>> +		sb_start_intwrite(dquot->dq_sb);
>>> +		freeze_protected = true;
>>> +	}
>>>    	handle = ext4_journal_start(dquot_to_inode(dquot), EXT4_HT_QUOTA,
>>>    				    EXT4_QUOTA_DEL_BLOCKS(dquot->dq_sb));
>>>    	if (IS_ERR(handle)) {
>>>    		/* Release dquot anyway to avoid endless cycle in dqput() */
>>>    		dquot_release(dquot);
>>> +		if (freeze_protected)
>>> +			sb_end_intwrite(dquot->dq_sb);
>>>    		return PTR_ERR(handle);
>>>    	}
>>>    	ret = dquot_release(dquot);
>>> @@ -6903,6 +6916,10 @@ static int ext4_release_dquot(struct dquot *dquot)
>> The `git am` command looks for the following context code from line 6903
>> to apply the changes. But there are many functions in fs/ext4/super.c that
>> have similar code, such as ext4_write_dquot() and ext4_acquire_dquot().
> Oh that's strange, shouldn't it match the complete line like:
A rough look at the `git am` source code looks like it only focuses on
line numbers between two ‘@@’.

am_run
  run_apply
   apply_all_patches
    apply_patch
     parse_chunk
      find_header
       parse_fragment_header
     check_patch_list
      check_patch
       apply_data
        load_preimage
        apply_fragments
         apply_one_fragment
          find_pos
           match_fragment
>>> @@ -6903,6 +6916,10 @@ static int ext4_release_dquot(struct dquot *dquot)
> That should only have one occurence around line 6903? Or does it try to
> fuzzy match which ends up matching ext4_write_dquot etc?
In find_pos(), start from line 6903, compare the hash value of each line
of code line by line in forward direction, if it can't match, then match
the hash value of each line of code line by line in reverse direction from
line 6903. Fuzzy matching is used if some whitespace characters should be
ignored.


Regards,
Baokun


  reply	other threads:[~2024-12-03  8:29 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-21 12:38 [PATCH v2 0/2] Fix generic/390 failure due to quota release after freeze Ojaswin Mujoo
2024-11-21 12:38 ` [PATCH v2 1/2] quota: flush quota_release_work upon quota writeback Ojaswin Mujoo
2024-11-26  8:47   ` Jan Kara
2024-11-26 14:28   ` Baokun Li
2024-11-29  8:00   ` Disha Goel
2024-11-21 12:38 ` [PATCH v2 2/2] ext4: protect ext4_release_dquot against freezing Ojaswin Mujoo
2024-11-22  5:25   ` kernel test robot
2024-11-22  6:07   ` kernel test robot
2024-11-26  9:04   ` Jan Kara
2024-11-26 12:41     ` Ojaswin Mujoo
2024-11-26 14:49   ` Baokun Li
2024-11-27  6:01     ` Ojaswin Mujoo
2024-12-03  8:29       ` Baokun Li [this message]
2024-12-16  9:11         ` Ojaswin Mujoo
2024-11-28  4:58   ` Ritesh Harjani
2024-11-28 12:01     ` Jan Kara
2025-03-06  6:30   ` Ojaswin Mujoo
2025-03-06 15:59     ` Theodore Ts'o
2024-11-21 12:48 ` [PATCH v2 0/2] Fix generic/390 failure due to quota release after freeze Ojaswin Mujoo

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=8885691f-b977-409f-90f8-b24c41a49de0@huawei.com \
    --to=libaokun1@huawei.com \
    --cc=jack@suse.com \
    --cc=jack@suse.cz \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ojaswin@linux.ibm.com \
    --cc=ritesh.list@gmail.com \
    --cc=yangerkun@huawei.com \
    /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

all inboxes | Powered by JetHome®