From: Josef Bacik <josef@toxicpanda.com>
To: Anand Jain <anand.jain@oracle.com>
Cc: linux-btrfs@vger.kernel.org
Subject: Re: [PATCH RFC] btrfs-progs: mkfs: optimize file descriptor usage in mkfs.btrfs
Date: Wed, 31 Jan 2024 15:48:00 -0500 [thread overview]
Message-ID: <20240131204800.GB3203388@perftesting> (raw)
In-Reply-To: <06b40e351b544a314178909772281994bb9de259.1706714983.git.anand.jain@oracle.com>
On Wed, Jan 31, 2024 at 11:49:28PM +0800, Anand Jain wrote:
> I've reproduced the missing udev events issue without device partitions
> using the test case as below. The test waits for the creation of 'by-uuid'
> and, waiting indefinitely means successful reproduction. as below:
>
> --------------------------------------------------
> #!/bin/bash
> usage()
> {
> echo
> echo "Usage: ./t1 sdb btrfs"
> exit 1
> }
>
> : ${1?"arg1 <dev> is missing"} || usage
> dev=$1
>
> : ${2?"arg2 <fstype> is missing"} || usage
> fstype=$2
>
> systemd=$(rpm -q --queryformat='%{NAME}-%{VERSION}-%{RELEASE}' systemd)
>
> run_testcase()
> {
> local cnt=$1
> local ret=0
> local sleepcnt=0
>
> local newuuid=""
> local logpid=""
> local log=""
> local logfile="./udev_log_${systemd}_${fstype}.out"
>
> >$logfile
>
> wipefs -a /dev/${dev}* &>/dev/null
> sync
> udevadm settle /dev/$dev
>
> udevadm monitor -k -u -p > $logfile &
> logpid=$!
> >strace.out
> run "strace -f -ttT -o strace.out mkfs.$fstype -q -f /dev/$dev"
>
> newuuid=$(blkid -p /dev/$dev | awk '{print $2}' | sed -e 's/UUID=//' -e 's/\"//g')
>
> kill $logpid
> sync $logfile
>
> ret=-1
> while [ $ret != 0 ]
> do
> run -s -q "ls -lt /dev/disk/by-uuid | grep $newuuid"
> ret=$?
> ((sleepcnt++))
> sleep 1
> done
>
> #for systemd-239-78.0.3.el8
> log=$(cat $logfile|grep ID_FS_TYPE_NEW)
> #for systemd-252-18.0.1.el9.x86_64
> #log=$(grep --text "ID_FS_UUID=${newuuid}" $logfile)
>
> echo $cnt sleepcnt=$sleepcnt newuuid=$newuuid ret=$ret log=$log
> }
>
> echo Test case: t1: version 3.
> echo
>
> run -o cat /etc/system-release
> run -o uname -a
> run -o rpm -q systemd
> if [ $fstype == "btrfs" ]; then
> run -o mkfs.btrfs --version
> elif [ $fstype == "xfs" ]; then
> run -o mkfs.xfs -V
> else
> echo unknown fstype $fstype
> fi
> echo
>
> for ((cnt = 0; cnt < 13; cnt++)); do
> run_testcase $cnt
> done
> -----------------------------------------------------------------
>
>
> It appears that the problem is due to the convoluted nested device open
> and device close in mkfs.btrfs as shown below:
>
> -------------
> prepare_ctx opens all devices <-- fd1
> zero the super-block
> writes temp-sb to the first device.
>
> open_ctree opens the first device again <-- fd2
>
> prepare_ctx writes temp-sb to all the remaining devs <-- fd1
>
> fs_info->finalize_on_close = 1;
> close_ctree_fs_info()<-- writes valid <--- fd2
>
> prepare_ctx is closed <--- fd1.
> -------------
>
> This cleanup patch reuses the main file descriptor (fd1) in open_ctree(),
> and with this change both the test cases (with partition and without
> partition) now runs fine.
>
> I've done an initial tests only, not validated with the multi-device mkfs.
> More cleanup is possible but pending feedback; marking this patch as an RFC.
I'd like to see the cleaned up version of this patch, but I have a few comments.
1) I think re-using the fd is reasonable, tho could this just be reworked to
create the temp-sb and write this to all the devs, close the file
descriptors, and then call open_ctree?
2) I hate adding another thing into a core file that we'll have to figure out
how to undo later as we sync more code from the kernel into btrfs-progs, I'm
not sure if there's a way around this, but thinking harder about adding
something to disk-io.c that is for userspace only would be good.
Thanks,
Josef
next prev parent reply other threads:[~2024-01-31 20:48 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-01-31 15:49 [PATCH RFC] btrfs-progs: mkfs: optimize file descriptor usage in mkfs.btrfs Anand Jain
2024-01-31 20:48 ` Josef Bacik [this message]
2024-02-01 8:49 ` Qu Wenruo
2024-02-01 19:07 ` David Sterba
2024-02-01 20:50 ` Qu Wenruo
2024-02-01 19:18 ` David Sterba
2024-02-02 1:52 ` Anand Jain
2024-02-01 21:59 ` Qu Wenruo
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=20240131204800.GB3203388@perftesting \
--to=josef@toxicpanda.com \
--cc=anand.jain@oracle.com \
--cc=linux-btrfs@vger.kernel.org \
/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