<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel/git/stable/linux.git/fs/exfat, branch master</title>
<subtitle>Linux kernel stable tree</subtitle>
<id>https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/atom?h=master</id>
<link rel='self' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/'/>
<updated>2026-08-22T15:57:28+00:00</updated>
<entry>
<title>Merge tag 'exfat-for-7.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/exfat</title>
<updated>2026-08-22T15:57:28+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2026-08-22T15:57:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=728785f8fb07ae9c295b1be6d7d672b9ebfc3c05'/>
<id>urn:sha1:728785f8fb07ae9c295b1be6d7d672b9ebfc3c05</id>
<content type='text'>
Pull exfat updates from Namjae Jeon:
 "A set of exfat fixes covering shared writable mappings, entry error
  handling, allocation cleanup, FITRIM bounds, and locking:

   - Fix valid_size extension over shared writable mappings by lazily
     zeroing page-cache gaps and ensuring racing stores cannot be
     overwritten or extend beyond valid_size

   - Clean up partially written directory entries on add-entry failure
     and safely free new directory clusters

   - Free a newly allocated directory cluster when zeroing it fails

   - Write the destination entry before removing the source entry during
     rename, preserving the source if the destination write fails

   - Keep FITRIM within the requested range, even when the free-space
     search wraps around the allocation bitmap

   - Fix truncated FS_IOC_GETFSLABEL results by passing the destination
     buffer size in bytes to the UTF-16-to-NLS conversion

   - Fix overflow in the cluster-to-dentry calculation, which could
     cause readdir to stop early on large volumes

   - Replace the per-inode truncate_lock with inode_lock, using shared
     locking in bmap to serialize against concurrent truncation

   - Update the exfat mailing list address in MAINTAINERS"

* tag 'exfat-for-7.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/exfat:
  exfat: replace truncate_lock with inode_lock
  exfat: keep FITRIM within the requested range
  exfat: fix truncated volume labels returned by FS_IOC_GETFSLABEL
  exfat: fix overflow in cluster-to-dentry conversion
  exfat: clean up new entry on add entry failure
  exfat: free new directory cluster if zeroing fails
  exfat: write moved entry before removing source
  MAINTAINERS: update mailing list address for exfat
  exfat: fix valid_size extension over a shared writable mapping
</content>
</entry>
<entry>
<title>Merge tag 'vfs-7.3-rc1.lookup' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs</title>
<updated>2026-08-17T19:03:34+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2026-08-17T19:03:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=ab5ed08f2d8396fb8e3942569bbbd5cd569a753e'/>
<id>urn:sha1:ab5ed08f2d8396fb8e3942569bbbd5cd569a753e</id>
<content type='text'>
Pull vfs lookup updates from Christian Brauner:
 "This refactors lookup_open() and adds vfs_lookup_open() for nfsd.

  mnt_want_write() and parent locking are moved into lookup_open()
  itself.

  audit_inode_child() is also now called in lookup_open() on failure.
  That is the calling convention in vfs_create() and vfs_mkdir(), but
  lookup_open() made no such call when atomic_open() should have created
  a file and did not. And neither did the regular -&gt;create() path fwiw.

  This also contains work to remove the unneeded excl argument from the
  -&gt;create() inode op"

* tag 'vfs-7.3-rc1.lookup' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs:
  fs/namei.c: fix coding style in atomic_open() and lookup_open()
  fs/namei.c: fix kerneldoc of atomic_open() and vfs_lookup_open()
  fs/namei.c: update stale comments in lookup_open()
  Remove excl arg to -&gt;create inode_operation
  fs/namei.c: update kerneldoc of atomic_open()
  vfs: call audit_inode_child() in lookup_open() on failure
  vfs: move create error &amp;&amp; negative dentry case in lookup_open() up
  VFS: add vfs_lookup_open() for nfsd
  VFS: move delegated_inode retry loop into lookup_open()
  VFS: move mnt_want_write() and locking into lookup_open()
</content>
</entry>
<entry>
<title>Merge tag 'vfs-7.3-rc1.iomap' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs</title>
<updated>2026-08-17T17:03:55+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2026-08-17T17:03:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=9ea8d6197d9f43a15ccb9c0dce601ec535d5da7e'/>
<id>urn:sha1:9ea8d6197d9f43a15ccb9c0dce601ec535d5da7e</id>
<content type='text'>
Pull iomap updates from Christian Brauner:
 "The bulk of this is the conversion of iomap to a single -&gt;iomap_next()
  callback and thus finishing the move to an iterator model.

  Every iomap operation drove its iteration through a struct iomap_ops
  holding -&gt;iomap_begin() and -&gt;iomap_end(). iomap_iter() only ever sees
  those as pointers. That means every step of every iteration is an
  indirect call.

  This collapses both into one -&gt;iomap_next() callback that finishes the
  previous mapping and produces the next one. This lets callers inline
  the iteration loop and pass its -&gt;iomap_next() as a compile time
  constant. That means the compiler can turn it into a direct and hence
  inlineable call.

  This also allows future callers to express custom logic to drive the
  iteration forward better. xfs, btrfs, ext4, ext2, erofs, f2fs, gfs2,
  hpfs, fuse, exfat, zonefs, ntfs, ntfs3 and the block device mapping
  are all converted. No functional changes are intended.

  This also adds a simple direct I/O path for small reads. On Gen5 NVMe
  the __iomap_dio_rw() dominates 4K random reads. The same single-core
  io_uring poll mode workload reaches ~3.2M IOPS against the raw block
  device but only ~1.92M through ext4 or XFS.

  __iomap_dio_rw(), iomap_iter(), iomap_dio_bio_iter() and kfree() were
  at the top of the profile. The new path is very lightweight if no
  special behavior is requested. The bio comes from a dedicated bioset
  and laid out so the whole request is a single cacheline aligned
  allocation. Completion runs inline.

  That takes ext4 from 1.92M to 2.19M IOPS in the original workload. fio
  shows around:
   - 4% at libaio queue depths of 64 and up
   - around 5% for io_uring
   - up to 10% for io_uring poll mode at depth 256
  on both ext4 and xfs.

  A few other patches:

   - iomap_folio_mark_uptodate() lets a filesystem that writes into the
     page cache outside the iomap read and write paths keep iomap's
     internal uptodate bitmap in sync, which fuse needs for
     server-pushed notify stores before it can enable large folios;

   - two fixes for iomap_bio_read_folio_range_sync(): a potential crash
     when device integrity behavior is changed and a missing
     bio_uninit().

   - a folio batch release fix on iomap callback failures

   - FGP_NOFS is dropped from iomap_get_folio()

   - documentation fix"

* tag 'vfs-7.3-rc1.iomap' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs: (29 commits)
  iomap: iomap_bio_read_folio_range_sync is missing a call to bio_uninit
  iomap: don't free integrity payload that doesn't exist
  docs: fix grammatical error in iomap docs
  exfat: convert iomap ops to -&gt;iomap_next()
  fuse: convert iomap ops to -&gt;iomap_next()
  hpfs: convert iomap ops to -&gt;iomap_next()
  gfs2: convert iomap ops to -&gt;iomap_next()
  f2fs: convert iomap ops to -&gt;iomap_next()
  block: convert iomap ops to -&gt;iomap_next()
  ext2: convert iomap ops to -&gt;iomap_next()
  zonefs: convert iomap ops to -&gt;iomap_next()
  erofs: convert iomap ops to -&gt;iomap_next()
  ext4: convert iomap ops to -&gt;iomap_next()
  ntfs: convert iomap ops to -&gt;iomap_next()
  ntfs3: convert iomap ops to -&gt;iomap_next()
  btrfs: convert iomap ops to -&gt;iomap_next()
  xfs: convert iomap ops to -&gt;iomap_next()
  iomap: add -&gt;iomap_next()
  iomap: use GFP_NOWAIT when application for iomap_dio_simple allocations
  iomap: decouple simple direct I/O reads from iomap_dio_rw
  ...
</content>
</entry>
<entry>
<title>exfat: replace truncate_lock with inode_lock</title>
<updated>2026-08-17T07:16:55+00:00</updated>
<author>
<name>Chi Zhiling</name>
<email>chizhiling@kylinos.cn</email>
</author>
<published>2026-08-17T06:20:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=490529f668016c401d3da688104d15d3fc2c4fca'/>
<id>urn:sha1:490529f668016c401d3da688104d15d3fc2c4fca</id>
<content type='text'>
Remove the per-inode truncate_lock and rely on inode_lock instead.
exfat_setattr() truncates under inode_lock (held exclusively by the
VFS callers), and exfat_aop_bmap() now takes inode_lock shared to
exclude a concurrent truncate, providing the same mutual exclusion
with a single lock.

Signed-off-by: Chi Zhiling &lt;chizhiling@kylinos.cn&gt;
Signed-off-by: Namjae Jeon &lt;linkinjeon@kernel.org&gt;
</content>
</entry>
<entry>
<title>exfat: keep FITRIM within the requested range</title>
<updated>2026-08-14T14:43:02+00:00</updated>
<author>
<name>Yang Wen</name>
<email>anmuxixixi@gmail.com</email>
</author>
<published>2026-08-13T14:29:19+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=2de727471b3b13409466a4af4f8824a86073bf4b'/>
<id>urn:sha1:2de727471b3b13409466a4af4f8824a86073bf4b</id>
<content type='text'>
exfat_find_free_bitmap() searches the entire allocation bitmap and may
wrap around to its beginning. exfat_trim_fs() does not verify that the
returned cluster is still within the requested FITRIM range.

As a result, a partial FITRIM operation may discard free clusters outside
the user-specified range and report a trimmed length larger than the
requested length.

Validate each returned cluster against the requested range and stop the
search when it wraps around or passes the range end.

Signed-off-by: Yang Wen &lt;anmuxixixi@gmail.com&gt;
Signed-off-by: Namjae Jeon &lt;linkinjeon@kernel.org&gt;
</content>
</entry>
<entry>
<title>exfat: fix truncated volume labels returned by FS_IOC_GETFSLABEL</title>
<updated>2026-08-11T08:46:46+00:00</updated>
<author>
<name>Yang Wen</name>
<email>anmuxixixi@gmail.com</email>
</author>
<published>2026-08-10T14:58:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=27af3392196ddfa4c212f4c883b9964a6dcd5f95'/>
<id>urn:sha1:27af3392196ddfa4c212f4c883b9964a6dcd5f95</id>
<content type='text'>
exfat_ioctl_get_volume_label() passes uniname.name_len to
exfat_utf16_to_nls() as the output buffer length. However, name_len is
the number of UTF-16 code units, while exfat_utf16_to_nls() expects the
buffer size in bytes.

As a result, volume labels that expand during charset conversion are
truncated.The destination buffer is FSLABEL_MAX bytes long, so pass
its actual size to the conversion helper.

Signed-off-by: Yang Wen &lt;anmuxixixi@gmail.com&gt;
Signed-off-by: Namjae Jeon &lt;linkinjeon@kernel.org&gt;
</content>
</entry>
<entry>
<title>exfat: fix overflow in cluster-to-dentry conversion</title>
<updated>2026-08-06T13:06:09+00:00</updated>
<author>
<name>Yang Wen</name>
<email>anmuxixixi@gmail.com</email>
</author>
<published>2026-07-28T15:07:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=0eb24ad05a6a31a3b25c091820ac5cd8ee5e5ae8'/>
<id>urn:sha1:0eb24ad05a6a31a3b25c091820ac5cd8ee5e5ae8</id>
<content type='text'>
The cluster-to-dentry calculation is performed as u32 and may overflow
and wrap around on large volumes. This can result in an incorrect
max_dentries value, causing readdir to stop early and omit directory
entries.

Cast nr_clusters to u64 before shifting to avoid the overflow.

Signed-off-by: Yang Wen &lt;anmuxixixi@gmail.com&gt;
Signed-off-by: Namjae Jeon &lt;linkinjeon@kernel.org&gt;
</content>
</entry>
<entry>
<title>exfat: convert iomap ops to -&gt;iomap_next()</title>
<updated>2026-07-31T10:28:51+00:00</updated>
<author>
<name>Joanne Koong</name>
<email>joannelkoong@gmail.com</email>
</author>
<published>2026-07-29T19:27:34+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=d14541b3d8acbf0587e502c9dbad649f84598094'/>
<id>urn:sha1:d14541b3d8acbf0587e502c9dbad649f84598094</id>
<content type='text'>
Convert exfat iomap_ops to the new -&gt;iomap_next() callback. Each
callback is generated with the DEFINE_IOMAP_ITER_NEXT() and
DEFINE_IOMAP_ITER_NEXT_END() macros, which wrap the iomap_iter_next()
helper to finish the previous mapping if needed and produce the next
one. No functional changes are intended.

Acked-by: Namjae Jeon &lt;linkinjeon@kernel.org&gt;
Signed-off-by: Joanne Koong &lt;joannelkoong@gmail.com&gt;
Link: https://patch.msgid.link/20260729192737.3190206-20-joannelkoong@gmail.com
Signed-off-by: Christian Brauner (Amutable) &lt;brauner@kernel.org&gt;
</content>
</entry>
<entry>
<title>Remove excl arg to -&gt;create inode_operation</title>
<updated>2026-07-31T08:18:30+00:00</updated>
<author>
<name>NeilBrown</name>
<email>neil@brown.name</email>
</author>
<published>2026-07-01T11:51:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=b2f1e6301efa4a80becdb0715416c3cbc693fbb4'/>
<id>urn:sha1:b2f1e6301efa4a80becdb0715416c3cbc693fbb4</id>
<content type='text'>
The only time that 'false' is passed as the 'excl' arg to the -&gt;create
inode_operation is in lookup_open() when -&gt;atomic_open is not provided
by the parent directory.
*all* directory inode_operations which do not have -&gt;atomic_open
completely ignore the 'excl' arg.

Therefore we don't need the 'excl' arg.  Those few -&gt;create operations
which pay attention to the arg are only ever called with a value of
'true'.

We remove that arg and change all -&gt;create operations to behave as those
thhe arg were 'true'.

Signed-off-by: NeilBrown &lt;neil@brown.name&gt;
Link: https://patch.msgid.link/178290671516.27465.15984496764174914338@noble.neil.brown.name
Reviewed-by: Jori Koolstra &lt;jkoolstra@xs4all.nl&gt;
Reviewed-by: Jan Kara &lt;jack@suse.cz&gt;
Signed-off-by: Christian Brauner (Amutable) &lt;brauner@kernel.org&gt;
</content>
</entry>
<entry>
<title>exfat: clean up new entry on add entry failure</title>
<updated>2026-07-29T09:08:54+00:00</updated>
<author>
<name>Yichong Chen</name>
<email>chenyichong@uniontech.com</email>
</author>
<published>2026-07-29T02:25:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.rulkc.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=0901a71e8cff5c60dd464529cba2ed30a2ab0a3f'/>
<id>urn:sha1:0901a71e8cff5c60dd464529cba2ed30a2ab0a3f</id>
<content type='text'>
exfat_add_entry() initializes a new directory entry set before writing it
with exfat_put_dentry_set().  If the write fails, mkdir/create returns an
error but a partially written entry may be left behind.

For non-zero-size directories, the failure also happens after a cluster
has been allocated for the new directory.  Clean up the new entry
best-effort, and free the newly allocated directory cluster only when the
cleanup writeback succeeds.  This avoids freeing a cluster that may still
be referenced by an on-disk entry if the cleanup fails.

Signed-off-by: Yichong Chen &lt;chenyichong@uniontech.com&gt;
Signed-off-by: Namjae Jeon &lt;linkinjeon@kernel.org&gt;
</content>
</entry>
</feed>
