All of lore.kernel.org
 help / color / mirror / Atom feed
* [ANNOUNCE] xfs: for-next tree updated to a44a027a8b2a
@ 2022-04-25 23:17 Dave Chinner
  2022-04-27 18:32 ` Darrick J. Wong
  0 siblings, 1 reply; 4+ messages in thread
From: Dave Chinner @ 2022-04-25 23:17 UTC (permalink / raw)
  To: linux-xfs

Hi folks,

I just pushed out a new for-next branch for the XFS tree. It
contains:

- pending fixes for 5.18
- various miscellaneous fixes
- xlog_write() rework
- conversions to unsigned for trace_printk flags
- large on-disk extent counts

This all passes my local regression testing, though further smoke
testing in different environments would be appreaciated.

I haven't pulled in fixes from late last week yet - I'll work
through those in the next couple of days to get them into the tree
as well.

If I've missed anything you were expecting to see in this update,
let me know and I'll get them sorted for the next update.

Cheers,

Dave.

---------------------------------------------------------------

Head commit:

a44a027a8b2a Merge tag 'large-extent-counters-v9' of https://github.com/chandanr/linux into xfs-5.19-for-next

----------------------------------------------------------------
Chandan Babu R (19):
      xfs: Move extent count limits to xfs_format.h
      xfs: Define max extent length based on on-disk format definition
      xfs: Introduce xfs_iext_max_nextents() helper
      xfs: Use xfs_extnum_t instead of basic data types
      xfs: Introduce xfs_dfork_nextents() helper
      xfs: Use basic types to define xfs_log_dinode's di_nextents and di_anextents
      xfs: Promote xfs_extnum_t and xfs_aextnum_t to 64 and 32-bits respectively
      xfs: Introduce XFS_SB_FEAT_INCOMPAT_NREXT64 and associated per-fs feature bit
      xfs: Introduce XFS_FSOP_GEOM_FLAGS_NREXT64
      xfs: Introduce XFS_DIFLAG2_NREXT64 and associated helpers
      xfs: Use uint64_t to count maximum blocks that can be used by BMBT
      xfs: Introduce macros to represent new maximum extent counts for data/attr forks
      xfs: Replace numbered inode recovery error messages with descriptive ones
      xfs: Introduce per-inode 64-bit extent counters
      xfs: Directory's data fork extent counter can never overflow
      xfs: Conditionally upgrade existing inodes to use large extent counters
      xfs: Decouple XFS_IBULK flags from XFS_IWALK flags
      xfs: Enable bulkstat ioctl to support 64-bit per-inode extent counters
      xfs: Add XFS_SB_FEAT_INCOMPAT_NREXT64 to the list of supported flags

Christoph Hellwig (2):
      xfs: change the type of ic_datap
      xfs: remove xlog_verify_dest_ptr

Darrick J. Wong (3):
      xfs: pass explicit mount pointer to rtalloc query functions
      xfs: recalculate free rt extents after log recovery
      xfs: use a separate frextents counter for rt extent reservations

Dave Chinner (36):
      xfs: convert buffer flags to unsigned.
      xfs: reorder iunlink remove operation in xfs_ifree
      xfs: factor out the CIL transaction header building
      xfs: only CIL pushes require a start record
      xfs: embed the xlog_op_header in the unmount record
      xfs: embed the xlog_op_header in the commit record
      xfs: log tickets don't need log client id
      xfs: move log iovec alignment to preparation function
      xfs: reserve space and initialise xlog_op_header in item formatting
      xfs: log ticket region debug is largely useless
      xfs: pass lv chain length into xlog_write()
      xfs: introduce xlog_write_full()
      xfs: introduce xlog_write_partial()
      xfs: xlog_write() no longer needs contwr state
      xfs: xlog_write() doesn't need optype anymore
      xfs: CIL context doesn't need to count iovecs
      xfs: convert attr type flags to unsigned.
      xfs: convert scrub type flags to unsigned.
      xfs: convert bmap extent type flags to unsigned.
      xfs: convert bmapi flags to unsigned.
      xfs: convert AGF log flags to unsigned.
      xfs: convert AGI log flags to unsigned.
      xfs: convert btree buffer log flags to unsigned.
      xfs: convert buffer log item flags to unsigned.
      xfs: convert da btree operations flags to unsigned.
      xfs: convert dquot flags to unsigned.
      xfs: convert log item tracepoint flags to unsigned.
      xfs: convert inode lock flags to unsigned.
      xfs: convert ptag flags to unsigned.
      xfs: convert quota options flags to unsigned.
      xfs: convert shutdown reasons to unsigned.
      xfs: convert log ticket and iclog flags to unsigned.
      Merge branch 'guilt/5.19-miscellaneous' into xfs-5.19-for-next
      Merge branch 'guilt/xfs-unsigned-flags-5.18' into xfs-5.19-for-next
      Merge branch 'guilt/xlog-write-rework' into xfs-5.19-for-next
      Merge tag 'large-extent-counters-v9' of https://github.com/chandanr/linux into xfs-5.19-for-next

Jonathan Lassoff (2):
      xfs: Simplify XFS logging methods.
      xfs: Add XFS messages to printk index

Kaixu Xia (1):
      xfs: simplify local variable assignment in file write code

Matthew Wilcox (Oracle) (1):
      xfs: Use generic_file_open()

Tiezhu Yang (1):
      MAINTAINERS: update IOMAP FILESYSTEM LIBRARY and XFS FILESYSTEM

 MAINTAINERS                     |   3 -
 fs/xfs/libxfs/xfs_alloc.c       |  12 +-
 fs/xfs/libxfs/xfs_alloc.h       |   2 +-
 fs/xfs/libxfs/xfs_attr.c        |   3 +
 fs/xfs/libxfs/xfs_bmap.c        | 145 +++++++++-----------
 fs/xfs/libxfs/xfs_bmap.h        |  58 ++++----
 fs/xfs/libxfs/xfs_bmap_btree.c  |   9 +-
 fs/xfs/libxfs/xfs_btree.c       |  10 +-
 fs/xfs/libxfs/xfs_btree.h       |  26 ++--
 fs/xfs/libxfs/xfs_da_btree.h    |  17 +--
 fs/xfs/libxfs/xfs_da_format.h   |   9 +-
 fs/xfs/libxfs/xfs_dir2.c        |   8 ++
 fs/xfs/libxfs/xfs_format.h      | 180 ++++++++++++++++++-------
 fs/xfs/libxfs/xfs_fs.h          |  41 ++++--
 fs/xfs/libxfs/xfs_ialloc.c      |   8 +-
 fs/xfs/libxfs/xfs_ialloc.h      |   2 +-
 fs/xfs/libxfs/xfs_inode_buf.c   |  83 +++++++++---
 fs/xfs/libxfs/xfs_inode_fork.c  |  39 +++++-
 fs/xfs/libxfs/xfs_inode_fork.h  |  76 +++++++++--
 fs/xfs/libxfs/xfs_log_format.h  |  34 ++++-
 fs/xfs/libxfs/xfs_quota_defs.h  |  49 ++++---
 fs/xfs/libxfs/xfs_rtbitmap.c    |   9 +-
 fs/xfs/libxfs/xfs_sb.c          |  10 ++
 fs/xfs/libxfs/xfs_trans_resv.c  |  11 +-
 fs/xfs/libxfs/xfs_types.h       |  11 +-
 fs/xfs/scrub/bmap.c             |   2 +-
 fs/xfs/scrub/inode.c            |  20 +--
 fs/xfs/scrub/rtbitmap.c         |   9 +-
 fs/xfs/xfs_bmap_item.c          |   2 +
 fs/xfs/xfs_bmap_util.c          |  27 +++-
 fs/xfs/xfs_buf.c                |   6 +-
 fs/xfs/xfs_buf.h                |  42 +++---
 fs/xfs/xfs_buf_item.h           |  24 ++--
 fs/xfs/xfs_dquot.c              |   3 +
 fs/xfs/xfs_error.h              |  20 +--
 fs/xfs/xfs_file.c               |  24 ++--
 fs/xfs/xfs_fsmap.c              |   6 +-
 fs/xfs/xfs_fsops.c              |   7 +-
 fs/xfs/xfs_icache.c             |   9 +-
 fs/xfs/xfs_inode.c              | 104 ++++-----------
 fs/xfs/xfs_inode.h              |  29 ++--
 fs/xfs/xfs_inode_item.c         |  23 +++-
 fs/xfs/xfs_inode_item_recover.c | 141 ++++++++++++++------
 fs/xfs/xfs_ioctl.c              |   3 +
 fs/xfs/xfs_iomap.c              |  33 +++--
 fs/xfs/xfs_itable.c             |  15 ++-
 fs/xfs/xfs_itable.h             |   5 +-
 fs/xfs/xfs_iwalk.h              |   2 +-
 fs/xfs/xfs_log.c                | 766 +++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------
 fs/xfs/xfs_log.h                |  57 +++-----
 fs/xfs/xfs_log_cil.c            | 169 ++++++++++++++++--------
 fs/xfs/xfs_log_priv.h           |  55 ++------
 fs/xfs/xfs_message.c            |  58 ++++----
 fs/xfs/xfs_message.h            |  55 +++++---
 fs/xfs/xfs_mount.c              |  91 +++++++------
 fs/xfs/xfs_mount.h              |  32 +++--
 fs/xfs/xfs_reflink.c            |   5 +
 fs/xfs/xfs_rtalloc.c            |  41 ++++++
 fs/xfs/xfs_rtalloc.h            |   9 +-
 fs/xfs/xfs_super.c              |  18 ++-
 fs/xfs/xfs_symlink.c            |   5 -
 fs/xfs/xfs_trace.h              |  28 +---
 fs/xfs/xfs_trans.c              |  49 +++++--
 fs/xfs/xfs_trans.h              |  10 +-
 64 files changed, 1585 insertions(+), 1274 deletions(-)

-- 
Dave Chinner
david@fromorbit.com

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [ANNOUNCE] xfs: for-next tree updated to a44a027a8b2a
  2022-04-25 23:17 [ANNOUNCE] xfs: for-next tree updated to a44a027a8b2a Dave Chinner
@ 2022-04-27 18:32 ` Darrick J. Wong
  2022-04-27 21:25   ` Dave Chinner
  0 siblings, 1 reply; 4+ messages in thread
From: Darrick J. Wong @ 2022-04-27 18:32 UTC (permalink / raw)
  To: Dave Chinner; +Cc: linux-xfs

On Tue, Apr 26, 2022 at 09:17:14AM +1000, Dave Chinner wrote:
> Hi folks,
> 
> I just pushed out a new for-next branch for the XFS tree. It
> contains:
> 
> - pending fixes for 5.18
> - various miscellaneous fixes
> - xlog_write() rework
> - conversions to unsigned for trace_printk flags
> - large on-disk extent counts
> 
> This all passes my local regression testing, though further smoke
> testing in different environments would be appreaciated.
> 
> I haven't pulled in fixes from late last week yet - I'll work
> through those in the next couple of days to get them into the tree
> as well.
> 
> If I've missed anything you were expecting to see in this update,
> let me know and I'll get them sorted for the next update.

Hmm.  I saw the following crash on an arm64 VM with 64k page size and an
8k blocksize:

run fstests xfs/502 at 2022-04-26 20:54:15
spectre-v4 mitigation disabled by command-line option
XFS (sda2): Mounting V5 Filesystem
XFS (sda2): Ending clean mount
XFS (sda3): Mounting V5 Filesystem
XFS (sda3): Ending clean mount
XFS (sda3): Quotacheck needed: Please wait.
XFS (sda3): Quotacheck: Done.
XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
XFS: Assertion failed: IS_ALIGNED((unsigned long)lv->lv_buf, sizeof(uint64_t)), file: fs/xfs/xfs_log_cil.c, line: 431
------------[ cut here ]------------
WARNING: CPU: 1 PID: 3168300 at fs/xfs/xfs_message.c:112 assfail+0x44/0x54 [xfs]
Modules linked in: xfs dm_delay dm_zero dm_flakey dm_snapshot dm_thin_pool dm_persistent_data dm_bio_prison dm_bufio libcrc32c xt_REDIRECT iptable_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 ip6t_REJECT nf_reject_ipv6 ipt_REJECT nf_reject_ipv4 rputh_rpcgss xt_tcpudp ip_set_hash_ip ip_set_hash_net xt_set ip_set_hash_mac ip6table_filter ip6_tables bfq iptable_filter crct10dif_ce sch_fq_codel efivarfs ip_tables x_tables overlay nfsv4 [last unloaded: xfs]
CPU: 1 PID: 3168300 Comm: t_open_tmpfiles Not tainted 5.17.0-xfsa #5.17.0 0288cc936a4dc1878aaf6a4c6fa6235f949bf1e9
Hardware name: QEMU KVM Virtual Machine, BIOS 1.5.1 06/16/2021
pstate: 60401005 (nZCv daif +PAN -UAO -TCO -DIT +SSBS BTYPE=--)
pc : assfail+0x44/0x54 [xfs]
lr : assfail+0x34/0x54 [xfs]
sp : fffffe00213ef8b0
x29: fffffe00213ef8b0 x28: 0000000000000000 x27: fffffc0102ce3c00
x26: fffffc013c2bbeb0 x25: fffffc01830d8000 x24: fffffc01bc0d4f70
x23: fffffc01825a41da x22: fffffc01bc0d5020 x21: fffffe00015bf0b8
x20: fffffc006023c000 x19: fffffc0102ce3c00 x18: 0000000000000030
x17: 7a6973202c667562 x16: 5f766c3e2d766c29 x15: 676e6f6c2064656e
x14: 6769736e75282844 x13: 313334203a656e69 x12: 6c202c632e6c6963
x11: fffffe00213ef7d0 x10: fffffe00015bb9d8 x9 : fffffe00815bb9d7
x8 : 000000000000000a x7 : 00000000ffffffc0 x6 : 0000000000000021
x5 : fffffe00015bb9d9 x4 : 00000000ffffffca x3 : 0000000000000000
x2 : 0000000000000000 x1 : 0000000000000000 x0 : 0000000000000000
Call trace:
 assfail+0x44/0x54 [xfs afa05b7bcc3355e0f6d54fdf0bba6e6ddd5eafff]
 xlog_cil_commit+0x328/0x9b0 [xfs afa05b7bcc3355e0f6d54fdf0bba6e6ddd5eafff]
 __xfs_trans_commit+0xe4/0x3a0 [xfs afa05b7bcc3355e0f6d54fdf0bba6e6ddd5eafff]
 xfs_trans_commit+0x20/0x30 [xfs afa05b7bcc3355e0f6d54fdf0bba6e6ddd5eafff]
 xfs_create_tmpfile+0x1ec/0x270 [xfs afa05b7bcc3355e0f6d54fdf0bba6e6ddd5eafff]
 xfs_generic_create+0x324/0x390 [xfs afa05b7bcc3355e0f6d54fdf0bba6e6ddd5eafff]
 xfs_vn_tmpfile+0x24/0x30 [xfs afa05b7bcc3355e0f6d54fdf0bba6e6ddd5eafff]
 vfs_tmpfile+0xbc/0x160
 path_openat+0x9c0/0xeb0
 do_filp_open+0x8c/0x13c
 do_sys_openat2+0xbc/0x170
 __arm64_sys_openat+0x70/0xbc
 invoke_syscall.constprop.0+0x58/0xf0
 do_el0_svc+0x5c/0x160
 el0_svc+0x30/0x15c
 el0t_64_sync_handler+0x1a8/0x1b0
 el0t_64_sync+0x1a0/0x1a4
---[ end trace 0000000000000000 ]---
Unable to handle kernel paging request at virtual address 9ac7c01eb06874e8
Mem abort info:
  ESR = 0x96000004
  EC = 0x25: DABT (current EL), IL = 32 bits
  SET = 0, FnV = 0
  EA = 0, S1PTW = 0
  FSC = 0x04: level 0 translation fault
Data abort info:
  ISV = 0, ISS = 0x00000004
  CM = 0, WnR = 0
[9ac7c01eb06874e8] address between user and kernel address ranges
Internal error: Oops: 96000004 [#1] PREEMPT SMP
Dumping ftrace buffer:
   (ftrace buffer empty)
Modules linked in: xfs dm_delay dm_zero dm_flakey dm_snapshot dm_thin_pool dm_persistent_data dm_bio_prison dm_bufio libcrc32c xt_REDIRECT iptable_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 ip6t_REJECT nf_reject_ipv6 ipt_REJECT nf_reject_ipv4 rputh_rpcgss xt_tcpudp ip_set_hash_ip ip_set_hash_net xt_set ip_set_hash_mac ip6table_filter ip6_tables bfq iptable_filter crct10dif_ce sch_fq_codel efivarfs ip_tables x_tables overlay nfsv4 [last unloaded: xfs]
CPU: 1 PID: 3168300 Comm: t_open_tmpfiles Tainted: G        W         5.17.0-xfsa #5.17.0 0288cc936a4dc1878aaf6a4c6fa6235f949bf1e9
Hardware name: QEMU KVM Virtual Machine, BIOS 1.5.1 06/16/2021
pstate: a0401005 (NzCv daif +PAN -UAO -TCO -DIT +SSBS BTYPE=--)
pc : __kmalloc+0x120/0x3f0
lr : __kmalloc+0xe8/0x3f0
sp : fffffe00213ef840
x29: fffffe00213ef840 x28: 0000000000000002 x27: fffffe0008fe6000
x26: fffffc00e8740000 x25: fffffe00090e9000 x24: fffffe0001523c44
x23: 0000000000000150 x22: 00000000000128c0 x21: 0000000000000000
x20: 9ac7c01eb06874e8 x19: fffffc00e0010400 x18: 0000000000000000
x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000
x14: 0000000000000000 x13: 0000f0ffffffffff x12: 0000000000000040
x11: fffffc0133b5c678 x10: fffffc0133b5c67a x9 : fffffe0008294814
x8 : 0000000000000001 x7 : fffffe01f68d0000 x6 : 8d4857517c5941da
x5 : 00000000019ff6ec x4 : 0000000000000100 x3 : 0000000000000000
x2 : e87468b01ec0c79a x1 : 0000000003a724a9 x0 : 9ac7c01eb06873e8
Call trace:
 __kmalloc+0x120/0x3f0
 xlog_cil_commit+0x144/0x9b0 [xfs afa05b7bcc3355e0f6d54fdf0bba6e6ddd5eafff]
 __xfs_trans_commit+0xe4/0x3a0 [xfs afa05b7bcc3355e0f6d54fdf0bba6e6ddd5eafff]
 xfs_trans_commit+0x20/0x30 [xfs afa05b7bcc3355e0f6d54fdf0bba6e6ddd5eafff]
 xfs_create_tmpfile+0x1ec/0x270 [xfs afa05b7bcc3355e0f6d54fdf0bba6e6ddd5eafff]
 xfs_generic_create+0x324/0x390 [xfs afa05b7bcc3355e0f6d54fdf0bba6e6ddd5eafff]
 xfs_vn_tmpfile+0x24/0x30 [xfs afa05b7bcc3355e0f6d54fdf0bba6e6ddd5eafff]
 vfs_tmpfile+0xbc/0x160
 path_openat+0x9c0/0xeb0
 do_filp_open+0x8c/0x13c
 do_sys_openat2+0xbc/0x170
 __arm64_sys_openat+0x70/0xbc
 invoke_syscall.constprop.0+0x58/0xf0
 do_el0_svc+0x5c/0x160
 el0_svc+0x30/0x15c
 el0t_64_sync_handler+0x1a8/0x1b0
 el0t_64_sync+0x1a0/0x1a4
Code: f9405e66 8b040014 dac00e82 b9400b43 (f8646814) 

Not sure what's going on there, but I'll add it to the list of things to
dig into.

--D

> 
> Cheers,
> 
> Dave.
> 
> ---------------------------------------------------------------
> 
> Head commit:
> 
> a44a027a8b2a Merge tag 'large-extent-counters-v9' of https://github.com/chandanr/linux into xfs-5.19-for-next
> 
> ----------------------------------------------------------------
> Chandan Babu R (19):
>       xfs: Move extent count limits to xfs_format.h
>       xfs: Define max extent length based on on-disk format definition
>       xfs: Introduce xfs_iext_max_nextents() helper
>       xfs: Use xfs_extnum_t instead of basic data types
>       xfs: Introduce xfs_dfork_nextents() helper
>       xfs: Use basic types to define xfs_log_dinode's di_nextents and di_anextents
>       xfs: Promote xfs_extnum_t and xfs_aextnum_t to 64 and 32-bits respectively
>       xfs: Introduce XFS_SB_FEAT_INCOMPAT_NREXT64 and associated per-fs feature bit
>       xfs: Introduce XFS_FSOP_GEOM_FLAGS_NREXT64
>       xfs: Introduce XFS_DIFLAG2_NREXT64 and associated helpers
>       xfs: Use uint64_t to count maximum blocks that can be used by BMBT
>       xfs: Introduce macros to represent new maximum extent counts for data/attr forks
>       xfs: Replace numbered inode recovery error messages with descriptive ones
>       xfs: Introduce per-inode 64-bit extent counters
>       xfs: Directory's data fork extent counter can never overflow
>       xfs: Conditionally upgrade existing inodes to use large extent counters
>       xfs: Decouple XFS_IBULK flags from XFS_IWALK flags
>       xfs: Enable bulkstat ioctl to support 64-bit per-inode extent counters
>       xfs: Add XFS_SB_FEAT_INCOMPAT_NREXT64 to the list of supported flags
> 
> Christoph Hellwig (2):
>       xfs: change the type of ic_datap
>       xfs: remove xlog_verify_dest_ptr
> 
> Darrick J. Wong (3):
>       xfs: pass explicit mount pointer to rtalloc query functions
>       xfs: recalculate free rt extents after log recovery
>       xfs: use a separate frextents counter for rt extent reservations
> 
> Dave Chinner (36):
>       xfs: convert buffer flags to unsigned.
>       xfs: reorder iunlink remove operation in xfs_ifree
>       xfs: factor out the CIL transaction header building
>       xfs: only CIL pushes require a start record
>       xfs: embed the xlog_op_header in the unmount record
>       xfs: embed the xlog_op_header in the commit record
>       xfs: log tickets don't need log client id
>       xfs: move log iovec alignment to preparation function
>       xfs: reserve space and initialise xlog_op_header in item formatting
>       xfs: log ticket region debug is largely useless
>       xfs: pass lv chain length into xlog_write()
>       xfs: introduce xlog_write_full()
>       xfs: introduce xlog_write_partial()
>       xfs: xlog_write() no longer needs contwr state
>       xfs: xlog_write() doesn't need optype anymore
>       xfs: CIL context doesn't need to count iovecs
>       xfs: convert attr type flags to unsigned.
>       xfs: convert scrub type flags to unsigned.
>       xfs: convert bmap extent type flags to unsigned.
>       xfs: convert bmapi flags to unsigned.
>       xfs: convert AGF log flags to unsigned.
>       xfs: convert AGI log flags to unsigned.
>       xfs: convert btree buffer log flags to unsigned.
>       xfs: convert buffer log item flags to unsigned.
>       xfs: convert da btree operations flags to unsigned.
>       xfs: convert dquot flags to unsigned.
>       xfs: convert log item tracepoint flags to unsigned.
>       xfs: convert inode lock flags to unsigned.
>       xfs: convert ptag flags to unsigned.
>       xfs: convert quota options flags to unsigned.
>       xfs: convert shutdown reasons to unsigned.
>       xfs: convert log ticket and iclog flags to unsigned.
>       Merge branch 'guilt/5.19-miscellaneous' into xfs-5.19-for-next
>       Merge branch 'guilt/xfs-unsigned-flags-5.18' into xfs-5.19-for-next
>       Merge branch 'guilt/xlog-write-rework' into xfs-5.19-for-next
>       Merge tag 'large-extent-counters-v9' of https://github.com/chandanr/linux into xfs-5.19-for-next
> 
> Jonathan Lassoff (2):
>       xfs: Simplify XFS logging methods.
>       xfs: Add XFS messages to printk index
> 
> Kaixu Xia (1):
>       xfs: simplify local variable assignment in file write code
> 
> Matthew Wilcox (Oracle) (1):
>       xfs: Use generic_file_open()
> 
> Tiezhu Yang (1):
>       MAINTAINERS: update IOMAP FILESYSTEM LIBRARY and XFS FILESYSTEM
> 
>  MAINTAINERS                     |   3 -
>  fs/xfs/libxfs/xfs_alloc.c       |  12 +-
>  fs/xfs/libxfs/xfs_alloc.h       |   2 +-
>  fs/xfs/libxfs/xfs_attr.c        |   3 +
>  fs/xfs/libxfs/xfs_bmap.c        | 145 +++++++++-----------
>  fs/xfs/libxfs/xfs_bmap.h        |  58 ++++----
>  fs/xfs/libxfs/xfs_bmap_btree.c  |   9 +-
>  fs/xfs/libxfs/xfs_btree.c       |  10 +-
>  fs/xfs/libxfs/xfs_btree.h       |  26 ++--
>  fs/xfs/libxfs/xfs_da_btree.h    |  17 +--
>  fs/xfs/libxfs/xfs_da_format.h   |   9 +-
>  fs/xfs/libxfs/xfs_dir2.c        |   8 ++
>  fs/xfs/libxfs/xfs_format.h      | 180 ++++++++++++++++++-------
>  fs/xfs/libxfs/xfs_fs.h          |  41 ++++--
>  fs/xfs/libxfs/xfs_ialloc.c      |   8 +-
>  fs/xfs/libxfs/xfs_ialloc.h      |   2 +-
>  fs/xfs/libxfs/xfs_inode_buf.c   |  83 +++++++++---
>  fs/xfs/libxfs/xfs_inode_fork.c  |  39 +++++-
>  fs/xfs/libxfs/xfs_inode_fork.h  |  76 +++++++++--
>  fs/xfs/libxfs/xfs_log_format.h  |  34 ++++-
>  fs/xfs/libxfs/xfs_quota_defs.h  |  49 ++++---
>  fs/xfs/libxfs/xfs_rtbitmap.c    |   9 +-
>  fs/xfs/libxfs/xfs_sb.c          |  10 ++
>  fs/xfs/libxfs/xfs_trans_resv.c  |  11 +-
>  fs/xfs/libxfs/xfs_types.h       |  11 +-
>  fs/xfs/scrub/bmap.c             |   2 +-
>  fs/xfs/scrub/inode.c            |  20 +--
>  fs/xfs/scrub/rtbitmap.c         |   9 +-
>  fs/xfs/xfs_bmap_item.c          |   2 +
>  fs/xfs/xfs_bmap_util.c          |  27 +++-
>  fs/xfs/xfs_buf.c                |   6 +-
>  fs/xfs/xfs_buf.h                |  42 +++---
>  fs/xfs/xfs_buf_item.h           |  24 ++--
>  fs/xfs/xfs_dquot.c              |   3 +
>  fs/xfs/xfs_error.h              |  20 +--
>  fs/xfs/xfs_file.c               |  24 ++--
>  fs/xfs/xfs_fsmap.c              |   6 +-
>  fs/xfs/xfs_fsops.c              |   7 +-
>  fs/xfs/xfs_icache.c             |   9 +-
>  fs/xfs/xfs_inode.c              | 104 ++++-----------
>  fs/xfs/xfs_inode.h              |  29 ++--
>  fs/xfs/xfs_inode_item.c         |  23 +++-
>  fs/xfs/xfs_inode_item_recover.c | 141 ++++++++++++++------
>  fs/xfs/xfs_ioctl.c              |   3 +
>  fs/xfs/xfs_iomap.c              |  33 +++--
>  fs/xfs/xfs_itable.c             |  15 ++-
>  fs/xfs/xfs_itable.h             |   5 +-
>  fs/xfs/xfs_iwalk.h              |   2 +-
>  fs/xfs/xfs_log.c                | 766 +++++++++++++++++++++++++++++++++++++++++++++-------------------------------------------------------------
>  fs/xfs/xfs_log.h                |  57 +++-----
>  fs/xfs/xfs_log_cil.c            | 169 ++++++++++++++++--------
>  fs/xfs/xfs_log_priv.h           |  55 ++------
>  fs/xfs/xfs_message.c            |  58 ++++----
>  fs/xfs/xfs_message.h            |  55 +++++---
>  fs/xfs/xfs_mount.c              |  91 +++++++------
>  fs/xfs/xfs_mount.h              |  32 +++--
>  fs/xfs/xfs_reflink.c            |   5 +
>  fs/xfs/xfs_rtalloc.c            |  41 ++++++
>  fs/xfs/xfs_rtalloc.h            |   9 +-
>  fs/xfs/xfs_super.c              |  18 ++-
>  fs/xfs/xfs_symlink.c            |   5 -
>  fs/xfs/xfs_trace.h              |  28 +---
>  fs/xfs/xfs_trans.c              |  49 +++++--
>  fs/xfs/xfs_trans.h              |  10 +-
>  64 files changed, 1585 insertions(+), 1274 deletions(-)
> 
> -- 
> Dave Chinner
> david@fromorbit.com

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [ANNOUNCE] xfs: for-next tree updated to a44a027a8b2a
  2022-04-27 18:32 ` Darrick J. Wong
@ 2022-04-27 21:25   ` Dave Chinner
  2022-04-27 21:53     ` Darrick J. Wong
  0 siblings, 1 reply; 4+ messages in thread
From: Dave Chinner @ 2022-04-27 21:25 UTC (permalink / raw)
  To: Darrick J. Wong; +Cc: linux-xfs

On Wed, Apr 27, 2022 at 11:32:22AM -0700, Darrick J. Wong wrote:
> On Tue, Apr 26, 2022 at 09:17:14AM +1000, Dave Chinner wrote:
> > Hi folks,
> > 
> > I just pushed out a new for-next branch for the XFS tree. It
> > contains:
> > 
> > - pending fixes for 5.18
> > - various miscellaneous fixes
> > - xlog_write() rework
> > - conversions to unsigned for trace_printk flags
> > - large on-disk extent counts
> > 
> > This all passes my local regression testing, though further smoke
> > testing in different environments would be appreaciated.
> > 
> > I haven't pulled in fixes from late last week yet - I'll work
> > through those in the next couple of days to get them into the tree
> > as well.
> > 
> > If I've missed anything you were expecting to see in this update,
> > let me know and I'll get them sorted for the next update.
> 
> Hmm.  I saw the following crash on an arm64 VM with 64k page size and an
> 8k blocksize:

Ok, that's a whacky config I can't directly test here. 

> run fstests xfs/502 at 2022-04-26 20:54:15
> spectre-v4 mitigation disabled by command-line option
> XFS (sda2): Mounting V5 Filesystem
> XFS (sda2): Ending clean mount
> XFS (sda3): Mounting V5 Filesystem
> XFS (sda3): Ending clean mount
> XFS (sda3): Quotacheck needed: Please wait.
> XFS (sda3): Quotacheck: Done.
> XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> XFS: Assertion failed: IS_ALIGNED((unsigned long)lv->lv_buf, sizeof(uint64_t)), file: fs/xfs/xfs_log_cil.c, line: 431

Huh. That implies that memory allocation for the shadow buffer
wasn't 8 byte aligned because:

                        lv->lv_buf = (char *)lv +
					xlog_cil_iovec_space(lv->lv_niovecs);

And:

static inline int
xlog_cil_iovec_space(
        uint    niovecs)
{
        return round_up((sizeof(struct xfs_log_vec) +
                                        niovecs * sizeof(struct xfs_log_iovec)),
                        sizeof(uint64_t));
}

So the length returned by xlog_cil_iovec_space() is always a
multiple of 8 bytes. Hence the only way lv->lv_buf would not be
aligned to 8 bytes is if the original allocation was not aligned.

That buffer comes from:

static inline void *
xlog_cil_kvmalloc(
        size_t          buf_size)
{
        gfp_t           flags = GFP_KERNEL;
        void            *p;

        flags &= ~__GFP_DIRECT_RECLAIM;
        flags |= __GFP_NOWARN | __GFP_NORETRY;
        do {
                p = kmalloc(buf_size, flags);
                if (!p)
                        p = vmalloc(buf_size);
        } while (!p);

        return p;
}

vmalloc() guarantees alignment of the returned buffer, so this must
have come from a heap allocation via kmalloc() and that must have
returned something that is not 8 byte aligned...

Oh, after the XFS assert, a second oops happened, this time in
kmalloc():

> Unable to handle kernel paging request at virtual address 9ac7c01eb06874e8
> Mem abort info:
>   ESR = 0x96000004
>   EC = 0x25: DABT (current EL), IL = 32 bits
>   SET = 0, FnV = 0
>   EA = 0, S1PTW = 0
>   FSC = 0x04: level 0 translation fault
> Data abort info:
>   ISV = 0, ISS = 0x00000004
>   CM = 0, WnR = 0
> [9ac7c01eb06874e8] address between user and kernel address ranges
> Internal error: Oops: 96000004 [#1] PREEMPT SMP
> Dumping ftrace buffer:
>    (ftrace buffer empty)
> Modules linked in: xfs dm_delay dm_zero dm_flakey dm_snapshot dm_thin_pool dm_persistent_data dm_bio_prison dm_bufio libcrc32c xt_REDIRECT iptable_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 ip6t_REJECT nf_reject_ipv6 ipt_REJECT nf_reject_ipv4 rputh_rpcgss xt_tcpudp ip_set_hash_ip ip_set_hash_net xt_set ip_set_hash_mac ip6table_filter ip6_tables bfq iptable_filter crct10dif_ce sch_fq_codel efivarfs ip_tables x_tables overlay nfsv4 [last unloaded: xfs]
> CPU: 1 PID: 3168300 Comm: t_open_tmpfiles Tainted: G        W         5.17.0-xfsa #5.17.0 0288cc936a4dc1878aaf6a4c6fa6235f949bf1e9
> Hardware name: QEMU KVM Virtual Machine, BIOS 1.5.1 06/16/2021
> pstate: a0401005 (NzCv daif +PAN -UAO -TCO -DIT +SSBS BTYPE=--)
> pc : __kmalloc+0x120/0x3f0
> lr : __kmalloc+0xe8/0x3f0
> sp : fffffe00213ef840
> x29: fffffe00213ef840 x28: 0000000000000002 x27: fffffe0008fe6000
> x26: fffffc00e8740000 x25: fffffe00090e9000 x24: fffffe0001523c44
> x23: 0000000000000150 x22: 00000000000128c0 x21: 0000000000000000
> x20: 9ac7c01eb06874e8 x19: fffffc00e0010400 x18: 0000000000000000
> x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000
> x14: 0000000000000000 x13: 0000f0ffffffffff x12: 0000000000000040
> x11: fffffc0133b5c678 x10: fffffc0133b5c67a x9 : fffffe0008294814
> x8 : 0000000000000001 x7 : fffffe01f68d0000 x6 : 8d4857517c5941da
> x5 : 00000000019ff6ec x4 : 0000000000000100 x3 : 0000000000000000
> x2 : e87468b01ec0c79a x1 : 0000000003a724a9 x0 : 9ac7c01eb06873e8
> Call trace:
>  __kmalloc+0x120/0x3f0
>  xlog_cil_commit+0x144/0x9b0 [xfs afa05b7bcc3355e0f6d54fdf0bba6e6ddd5eafff]

This smells like heap corruption has occurred and the CIL commit
code was the unfortunate victim that tripped over it first. That
would explain the unaligned object being returned from kmalloc().

Did you have any memory debugging options turned on?

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [ANNOUNCE] xfs: for-next tree updated to a44a027a8b2a
  2022-04-27 21:25   ` Dave Chinner
@ 2022-04-27 21:53     ` Darrick J. Wong
  0 siblings, 0 replies; 4+ messages in thread
From: Darrick J. Wong @ 2022-04-27 21:53 UTC (permalink / raw)
  To: Dave Chinner; +Cc: linux-xfs

On Thu, Apr 28, 2022 at 07:25:38AM +1000, Dave Chinner wrote:
> On Wed, Apr 27, 2022 at 11:32:22AM -0700, Darrick J. Wong wrote:
> > On Tue, Apr 26, 2022 at 09:17:14AM +1000, Dave Chinner wrote:
> > > Hi folks,
> > > 
> > > I just pushed out a new for-next branch for the XFS tree. It
> > > contains:
> > > 
> > > - pending fixes for 5.18
> > > - various miscellaneous fixes
> > > - xlog_write() rework
> > > - conversions to unsigned for trace_printk flags
> > > - large on-disk extent counts
> > > 
> > > This all passes my local regression testing, though further smoke
> > > testing in different environments would be appreaciated.
> > > 
> > > I haven't pulled in fixes from late last week yet - I'll work
> > > through those in the next couple of days to get them into the tree
> > > as well.
> > > 
> > > If I've missed anything you were expecting to see in this update,
> > > let me know and I'll get them sorted for the next update.
> > 
> > Hmm.  I saw the following crash on an arm64 VM with 64k page size and an
> > 8k blocksize:
> 
> Ok, that's a whacky config I can't directly test here. 

Heh. :/

> > run fstests xfs/502 at 2022-04-26 20:54:15
> > spectre-v4 mitigation disabled by command-line option
> > XFS (sda2): Mounting V5 Filesystem
> > XFS (sda2): Ending clean mount
> > XFS (sda3): Mounting V5 Filesystem
> > XFS (sda3): Ending clean mount
> > XFS (sda3): Quotacheck needed: Please wait.
> > XFS (sda3): Quotacheck: Done.
> > XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> > XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> > XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> > XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> > XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> > XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> > XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> > XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> > XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> > XFS (sda3): Injecting error (false) at file fs/xfs/xfs_inode.c, line 1876, on filesystem "sda3"
> > XFS: Assertion failed: IS_ALIGNED((unsigned long)lv->lv_buf, sizeof(uint64_t)), file: fs/xfs/xfs_log_cil.c, line: 431
> 
> Huh. That implies that memory allocation for the shadow buffer
> wasn't 8 byte aligned because:
> 
>                         lv->lv_buf = (char *)lv +
> 					xlog_cil_iovec_space(lv->lv_niovecs);
> 
> And:
> 
> static inline int
> xlog_cil_iovec_space(
>         uint    niovecs)
> {
>         return round_up((sizeof(struct xfs_log_vec) +
>                                         niovecs * sizeof(struct xfs_log_iovec)),
>                         sizeof(uint64_t));
> }
> 
> So the length returned by xlog_cil_iovec_space() is always a
> multiple of 8 bytes. Hence the only way lv->lv_buf would not be
> aligned to 8 bytes is if the original allocation was not aligned.
> 
> That buffer comes from:
> 
> static inline void *
> xlog_cil_kvmalloc(
>         size_t          buf_size)
> {
>         gfp_t           flags = GFP_KERNEL;
>         void            *p;
> 
>         flags &= ~__GFP_DIRECT_RECLAIM;
>         flags |= __GFP_NOWARN | __GFP_NORETRY;
>         do {
>                 p = kmalloc(buf_size, flags);
>                 if (!p)
>                         p = vmalloc(buf_size);
>         } while (!p);
> 
>         return p;
> }
> 
> vmalloc() guarantees alignment of the returned buffer, so this must
> have come from a heap allocation via kmalloc() and that must have
> returned something that is not 8 byte aligned...
> 
> Oh, after the XFS assert, a second oops happened, this time in
> kmalloc():
> 
> > Unable to handle kernel paging request at virtual address 9ac7c01eb06874e8
> > Mem abort info:
> >   ESR = 0x96000004
> >   EC = 0x25: DABT (current EL), IL = 32 bits
> >   SET = 0, FnV = 0
> >   EA = 0, S1PTW = 0
> >   FSC = 0x04: level 0 translation fault
> > Data abort info:
> >   ISV = 0, ISS = 0x00000004
> >   CM = 0, WnR = 0
> > [9ac7c01eb06874e8] address between user and kernel address ranges
> > Internal error: Oops: 96000004 [#1] PREEMPT SMP
> > Dumping ftrace buffer:
> >    (ftrace buffer empty)
> > Modules linked in: xfs dm_delay dm_zero dm_flakey dm_snapshot dm_thin_pool dm_persistent_data dm_bio_prison dm_bufio libcrc32c xt_REDIRECT iptable_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 ip6t_REJECT nf_reject_ipv6 ipt_REJECT nf_reject_ipv4 rputh_rpcgss xt_tcpudp ip_set_hash_ip ip_set_hash_net xt_set ip_set_hash_mac ip6table_filter ip6_tables bfq iptable_filter crct10dif_ce sch_fq_codel efivarfs ip_tables x_tables overlay nfsv4 [last unloaded: xfs]
> > CPU: 1 PID: 3168300 Comm: t_open_tmpfiles Tainted: G        W         5.17.0-xfsa #5.17.0 0288cc936a4dc1878aaf6a4c6fa6235f949bf1e9
> > Hardware name: QEMU KVM Virtual Machine, BIOS 1.5.1 06/16/2021
> > pstate: a0401005 (NzCv daif +PAN -UAO -TCO -DIT +SSBS BTYPE=--)
> > pc : __kmalloc+0x120/0x3f0
> > lr : __kmalloc+0xe8/0x3f0
> > sp : fffffe00213ef840
> > x29: fffffe00213ef840 x28: 0000000000000002 x27: fffffe0008fe6000
> > x26: fffffc00e8740000 x25: fffffe00090e9000 x24: fffffe0001523c44
> > x23: 0000000000000150 x22: 00000000000128c0 x21: 0000000000000000
> > x20: 9ac7c01eb06874e8 x19: fffffc00e0010400 x18: 0000000000000000
> > x17: 0000000000000000 x16: 0000000000000000 x15: 0000000000000000
> > x14: 0000000000000000 x13: 0000f0ffffffffff x12: 0000000000000040
> > x11: fffffc0133b5c678 x10: fffffc0133b5c67a x9 : fffffe0008294814
> > x8 : 0000000000000001 x7 : fffffe01f68d0000 x6 : 8d4857517c5941da
> > x5 : 00000000019ff6ec x4 : 0000000000000100 x3 : 0000000000000000
> > x2 : e87468b01ec0c79a x1 : 0000000003a724a9 x0 : 9ac7c01eb06873e8
> > Call trace:
> >  __kmalloc+0x120/0x3f0
> >  xlog_cil_commit+0x144/0x9b0 [xfs afa05b7bcc3355e0f6d54fdf0bba6e6ddd5eafff]
> 
> This smells like heap corruption has occurred and the CIL commit
> code was the unfortunate victim that tripped over it first. That
> would explain the unaligned object being returned from kmalloc().
> 
> Did you have any memory debugging options turned on?

Nope.  I'll run them again tonight with KASAN enabled and see if that
shakes anything out.

--D

> Cheers,
> 
> Dave.
> -- 
> Dave Chinner
> david@fromorbit.com

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-04-27 21:53 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-25 23:17 [ANNOUNCE] xfs: for-next tree updated to a44a027a8b2a Dave Chinner
2022-04-27 18:32 ` Darrick J. Wong
2022-04-27 21:25   ` Dave Chinner
2022-04-27 21:53     ` Darrick J. Wong

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.