All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pankaj Raghav <pankaj.raghav@linux.dev>
To: John Garry <john.garry@linux.dev>,
	"Darrick J . Wong" <djwong@kernel.org>
Cc: Pankaj Raghav <p.raghav@samsung.com>,
	cem@kernel.org, linux-xfs@vger.kernel.org,
	John Garry <john.g.garry@oracle.com>,
	gost.dev@samsung.com
Subject: Re: [PATCH] xfs: don't limit software atomic writes by the group alignment
Date: Wed, 30 Sep 2026 14:27:03 +0200	[thread overview]
Message-ID: <e96b6411-3392-480e-8cef-bdc94b8041e7@linux.dev> (raw)
In-Reply-To: <29380cd8-19f5-4ae7-bdb7-b7908decb474@linux.dev>



On 9/30/2026 10:42 AM, John Garry wrote:
> On 9/30/26 06:10, Pankaj Raghav (Samsung) wrote:
>>>> Just to give more context:
>>>>
>>>> Trace of calc_atomic_write_unit_max:
>>>>
>>>>    mount-696   [010]   449.230543: xfs_calc_atomic_write_unit_max: dev
>>>> 259:0 ag max_write 262144 max_ioend 512 max_gsize 134217728 awu_max 512
>>>>
>>>> 2097152 comes from awumax being 512 fsblocks.
>>>>
>>>> root@debian:~# xfs_info /dev/nvme0n1
>>>> meta-data=/dev/nvme0n1           isize=512    agcount=8,
>>>> agsize=268435455 blks
>>>
>>> Well max power-of-2 factor of this is going to be 1.
>>>
>>
>> Exactly. I get that we should restrict max_opt to be 1 because the AG's
>> will not be aligned and the best we can do is one fsblock for HW based
>> atomics. Why should we restrict the max (SW atomics limit) to 1 fsblock?
>>
> 
> Maybe in this case we don't need to restrict CoW-based atomics to 1 fsblock. But 
> why care? I mean, you have HW support, which is so much better to use than CoW- 
> based atomics, so better to config your FS to avail of them.

That is true but it is a bit strange we expose a smaller CoW based atomics when 
we have HW based atomic support.

For me the main issue is this function:
static xfs_extlen_t
xfs_calc_group_awu_max(
	struct xfs_mount	*mp,
	enum xfs_group_type	type)
{
	struct xfs_groups	*g = &mp->m_groups[type];
	struct xfs_buftarg	*btp = xfs_group_type_buftarg(mp, type);

	if (g->blocks == 0)
		return 0;
	if (btp && btp->bt_awu_min > 0)
		return max_pow_of_two_factor(g->blocks);
	return rounddown_pow_of_two(g->blocks);
}

Why do we take into account hardware limits when we calculate SW atomic limits?

For more context:

In my drive, I am getting odd nr_blks agsize for the drive I have when I format
it with 16k block size. This is fine because block size is aligned
with HW atomic write size. The issue comes in xfs_calc_group_awu_max where
we do max_pow_of_two_factor on blocks if HW based atomics are enabled, thereby,
awu_max is reported as 1.


So this results in the following

panky@blixen:~$ mkfs.xfs -V
mkfs.xfs version 7.1.1

panky@blixen:~$ xfs_info /mnt/atomssd/
meta-data=/dev/nvme1n1           isize=512    agcount=14, agsize=67108863 blks
          =                       sectsz=4096  attr=2, projid32bit=1
          =                       crc=1        finobt=1, sparse=1, rmapbt=1
          =                       reflink=1    bigtime=1 inobtcount=1 nrext64=1
          =                       exchange=1   metadir=0
data     =                       bsize=16384  blocks=937558016, imaxpct=5
          =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=16384  ascii-ci=0, ftype=1, parent=1
log      =internal log           bsize=16384  blocks=130432, version=2
          =                       sectsz=4096  sunit=1 blks, lazy-count=1
realtime =none                   extsz=16384  blocks=0, rtextents=0
          =                       rgcount=0    rgsize=0 extents
          =                       zoned=0      start=0 reserved=0


root@blixen:~# trace-cmd report
cpus=8
            mount-4432  [005] ..... 24183.039820: 
xfs_calc_atomic_write_unit_max: dev 259:2 ag max_write 131072 max_ioend 4096 
max_gsize 1 awu_max 1
            mount-4432  [005] ..... 24183.039820: 
xfs_calc_atomic_write_unit_max: dev 259:2 rtg max_write 131072 max_ioend 4096 
max_gsize 0 awu_max 0

panky@blixen:~/tools$ sudo ./statx /mnt/atomssd/hello.txt
/mnt/atomssd/hello.txt:
   stx_atomic_write_unit_min:            16384
   stx_atomic_write_unit_max:            16384
   stx_atomic_write_unit_max_opt:        0
   stx_atomic_write_segments_max:        1


I hope I have explained the issue clearly now.

--
Pankaj

  reply	other threads:[~2026-09-30 12:27 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-25 10:36 [PATCH] xfs: don't limit software atomic writes by the group alignment Pankaj Raghav
2026-09-25 11:44 ` John Garry
2026-09-29  7:17   ` Pankaj Raghav
2026-09-29 14:47     ` John Garry
2026-09-30  5:10       ` Pankaj Raghav (Samsung)
2026-09-30  8:42         ` John Garry
2026-09-30 12:27           ` Pankaj Raghav [this message]
2026-09-30 12:48             ` John Garry
2026-10-01 16:30               ` Pankaj Raghav
2026-10-02  8:45                 ` John Garry
2026-10-02 11:24                   ` Pankaj Raghav
2026-09-29 16:40     ` Darrick J. Wong
2026-09-29 20:42       ` Darrick J. Wong
2026-09-30  8:48         ` Pankaj Raghav (Samsung)
2026-10-07 17:43           ` Darrick J. Wong
2026-10-05 11:02 ` John Garry
2026-10-05 11:02 ` John Garry
2026-10-05 16:24   ` Pankaj Raghav (Samsung)
2026-10-06  7:06     ` John Garry

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=e96b6411-3392-480e-8cef-bdc94b8041e7@linux.dev \
    --to=pankaj.raghav@linux.dev \
    --cc=cem@kernel.org \
    --cc=djwong@kernel.org \
    --cc=gost.dev@samsung.com \
    --cc=john.g.garry@oracle.com \
    --cc=john.garry@linux.dev \
    --cc=linux-xfs@vger.kernel.org \
    --cc=p.raghav@samsung.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.