Linux NFS development
 help / color / mirror / Atom feed
From: Mike Snitzer <snitzer@kernel.org>
To: Jonathan Curley <jcurley@purestorage.com>
Cc: Trond Myklebust <trondmy@kernel.org>,
	Anna Schumaker <anna@kernel.org>,
	Luis Chamberlain <mcgrof@kernel.org>,
	linux-nfs@vger.kernel.org
Subject: Re: [RFC PATCH v4 0/9] NFSv4/flexfiles: Add support for striped layouts
Date: Tue, 7 Oct 2025 10:50:04 -0400	[thread overview]
Message-ID: <aOUonNQRjYBpYcrD@kernel.org> (raw)
In-Reply-To: <aOUeDCzouBMwjalF@kernel.org>

On Tue, Oct 07, 2025 at 10:05:00AM -0400, Mike Snitzer wrote:
> On Wed, Sep 24, 2025 at 04:20:41PM +0000, Jonathan Curley wrote:
> > This patch series introduces support for striped layouts:
> > 
> > The first 2 patches are simple preparation changes. There should be
> > no logical impact to the code.
> > 
> > The 3rd patch refactors the nfs4_ff_layout_mirror struct to have an
> > array of a new nfs4_ff_layout_ds_stripe type. The
> > nfs4_ff_layout_ds_stripe has all the contents of ff_data_server4 per
> > the flexfile rfc. I called it ds_stripe because ds was already taken
> > by the deviceid side of the code.
> > 
> > The patches 4-8 update various paths to be dss_id aware. Most of this
> > consists of either adding a new parameter to the function or adding a
> > loop. Depending on which is appropriate.
> > 
> > The final patch 9 updates the layout creation path to populate the
> > array and turns the feature on.
> > 
> > v1:
> >  - Fixes function parameter 'dss_id' not described in
> >    'nfs4_ff_layout_prepare_ds'
> > 
> > v2:
> >  - Fixes layout stat error reporting path for commit to properly
> >    calculate dss_id.
> > 
> > v3:
> >  - Fixes do_div dividend to be u64.
> > 
> > v4:
> >  - Use regular division operators for u32 commit path math.
> >  - Fix mirror null check in ff_rw_layout_has_available_ds.
> > 
> > Jonathan Curley (9):
> >   NFSv4/flexfiles: Remove cred local variable dependency
> >   NFSv4/flexfiles: Use ds_commit_idx when marking a write commit
> >   NFSv4/flexfiles: Add data structure support for striped layouts
> >   NFSv4/flexfiles: Update low level helper functions to be DS stripe
> >     aware.
> >   NFSv4/flexfiles: Read path updates for striped layouts
> >   NFSv4/flexfiles: Commit path updates for striped layouts
> >   NFSv4/flexfiles: Write path updates for striped layouts
> >   NFSv4/flexfiles: Update layout stats & error paths for striped layouts
> >   NFSv4/flexfiles: Add support for striped layouts
> > 
> >  fs/nfs/flexfilelayout/flexfilelayout.c    | 778 +++++++++++++++-------
> >  fs/nfs/flexfilelayout/flexfilelayout.h    |  64 +-
> >  fs/nfs/flexfilelayout/flexfilelayoutdev.c | 105 +--
> >  fs/nfs/write.c                            |   2 +-
> >  4 files changed, 635 insertions(+), 314 deletions(-)
> > 
> > -- 
> > 2.34.1
> > 
> > 
> 
> Hi Jonathan,
> 
> Testing the latest 'nfs-for-6.18-1' tag (now merged into Linus' tree),
> with your flexfiles striped layout changes, using NFS LOCALIO results
> in NFSD shutdown hanging due to nfsd refcount.
> 
> I'm using 4.2 flexfiles client that connects to local system's DS via
> NFS v3 over LOCALIO, and then simply issuing very brief IO with dd:
> 
> dd if=/dev/zero of=/mnt/hs_test/dd_thisisa.test bs=47008 count=2 oflag=direct
> dd if=/mnt/hs_test/dd_thisisa.test of=/dev/null bs=47008 count=2 iflag=direct
> 
> followed by umount of the filesystem, and then attempt to stop all
> NFS/NFSD services so that all related kernel modules may be unloaded:
> 
> umount /mnt/hs_test
> systemctl stop rpc-statd.service
> systemctl stop rpc-statd-notify.service
> systemctl stop var-lib-nfs-rpc_pipefs.mount
> systemctl stop proc-fs-nfsd.mount
> systemctl stop nfs-server.service
>  # ^ this hangs below...
> 
> systemctl stop rpcbind
> systemctl stop rpcbind.socket
> systemctl stop nfsdcld.service
> systemctl stop nfs-client.target
> 
> /var/log/messages shows:
> 
> Oct  6 18:08:20 plsm121c-06 systemd[1]: mnt-hs_test.mount: Deactivated successfully.
> Oct  6 18:08:20 plsm121c-06 systemd[1]: Stopping NFS status monitor for NFSv2/3 locking....
> Oct  6 18:08:20 plsm121c-06 systemd[1]: rpc-statd.service: Deactivated successfully.
> Oct  6 18:08:20 plsm121c-06 systemd[1]: Stopped NFS status monitor for NFSv2/3 locking..
> Oct  6 18:08:20 plsm121c-06 systemd[1]: rpc-statd-notify.service: Deactivated successfully.
> Oct  6 18:08:20 plsm121c-06 systemd[1]: Stopped Notify NFS peers of a restart.
> Oct  6 18:08:20 plsm121c-06 rpc.idmapd[8982]: exiting on signal 15
> Oct  6 18:08:20 plsm121c-06 systemd[1]: Stopping NFSv4 ID-name mapping service...
> Oct  6 18:08:20 plsm121c-06 systemd[1]: Stopping NFSv4 Client Tracking Daemon...
> Oct  6 18:08:20 plsm121c-06 systemd[1]: nfs-idmapd.service: Deactivated successfully.
> Oct  6 18:08:20 plsm121c-06 systemd[1]: Stopped NFSv4 ID-name mapping service.
> Oct  6 18:08:20 plsm121c-06 systemd[1]: nfsdcld.service: Deactivated successfully.
> Oct  6 18:08:20 plsm121c-06 systemd[1]: Stopped NFSv4 Client Tracking Daemon.
> Oct  6 18:08:20 plsm121c-06 systemd[1]: Stopped target rpc_pipefs.target.
> Oct  6 18:08:20 plsm121c-06 systemd[1]: Unmounting RPC Pipe File System...
> Oct  6 18:08:20 plsm121c-06 systemd[1]: var-lib-nfs-rpc_pipefs.mount: Deactivated successfully.
> Oct  6 18:08:20 plsm121c-06 systemd[1]: Unmounted RPC Pipe File System.
> Oct  6 18:08:20 plsm121c-06 systemd[1]: Stopping NFS server and services...
> Oct  6 18:08:22 plsm121c-06 rpc.mountd[8988]: v4.2 client detached: 0x68a8fa0468e404e3 from "192.168.0.105:853"
> 
> Oct  6 18:09:50 plsm121c-06 systemd[1]: nfs-server.service: Stopping timed out. Terminating.
> Oct  6 18:10:00 plsm121c-06 systemd[1]: Starting system activity accounting tool...
> Oct  6 18:10:00 plsm121c-06 systemd[1]: sysstat-collect.service: Deactivated successfully.
> Oct  6 18:10:00 plsm121c-06 systemd[1]: Finished system activity accounting tool.
> 
> Oct  6 18:11:21 plsm121c-06 systemd[1]: nfs-server.service: State 'stop-sigterm' timed out. Killing.
> Oct  6 18:11:21 plsm121c-06 systemd[1]: nfs-server.service: Killing process 9669 (rpc.nfsd) with signal SIGKILL.
> Oct  6 18:11:26 plsm121c-06 kernel: INFO: task rpc.nfsd:9669 blocked for more than 122 seconds.
> Oct  6 18:11:26 plsm121c-06 kernel:      Not tainted 6.12.24.23.hs.snitm+ #44
> Oct  6 18:11:26 plsm121c-06 kernel: "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
> Oct  6 18:11:26 plsm121c-06 kernel: task:rpc.nfsd        state:D stack:0     pid:9669  tgid:9669  ppid:1      flags:0x00004006
> Oct  6 18:11:26 plsm121c-06 kernel: Call Trace:
> Oct  6 18:11:26 plsm121c-06 kernel: <TASK>
> Oct  6 18:11:26 plsm121c-06 kernel: __schedule+0x26d/0x530
> Oct  6 18:11:26 plsm121c-06 kernel: schedule+0x27/0xa0
> Oct  6 18:11:26 plsm121c-06 kernel: schedule_timeout+0x14e/0x160
> Oct  6 18:11:26 plsm121c-06 kernel: ? svc_destroy+0xce/0x160 [sunrpc]
> Oct  6 18:11:26 plsm121c-06 kernel: ? lockd_put+0x5f/0x90 [lockd]
> Oct  6 18:11:26 plsm121c-06 kernel: __wait_for_common+0x8f/0x1d0
> Oct  6 18:11:26 plsm121c-06 kernel: ? __pfx_schedule_timeout+0x10/0x10
> Oct  6 18:11:26 plsm121c-06 kernel: nfsd_destroy_serv+0x138/0x1a0 [nfsd]
> Oct  6 18:11:26 plsm121c-06 kernel: nfsd_svc+0xe0/0x170 [nfsd]
> Oct  6 18:11:26 plsm121c-06 kernel: write_threads+0xc3/0x190 [nfsd]
> Oct  6 18:11:26 plsm121c-06 kernel: ? simple_transaction_get+0xc2/0xe0
> Oct  6 18:11:26 plsm121c-06 kernel: ? __pfx_write_threads+0x10/0x10 [nfsd]
> Oct  6 18:11:26 plsm121c-06 kernel: nfsctl_transaction_write+0x47/0x80 [nfsd]
> Oct  6 18:11:26 plsm121c-06 kernel: vfs_write+0xfa/0x420
> Oct  6 18:11:26 plsm121c-06 kernel: ? syscall_exit_work+0xf3/0x120
> Oct  6 18:11:26 plsm121c-06 kernel: ? syscall_exit_to_user_mode+0x32/0x1b0
> Oct  6 18:11:26 plsm121c-06 kernel: ksys_write+0x63/0xe0
> Oct  6 18:11:26 plsm121c-06 kernel: do_syscall_64+0x7d/0x160
> Oct  6 18:11:26 plsm121c-06 kernel: ? __x64_sys_close+0x3c/0x80
> Oct  6 18:11:26 plsm121c-06 kernel: ? kmem_cache_free+0x347/0x450
> Oct  6 18:11:26 plsm121c-06 kernel: ? syscall_exit_work+0xf3/0x120
> Oct  6 18:11:26 plsm121c-06 kernel: ? syscall_exit_to_user_mode+0x32/0x1b0
> Oct  6 18:11:26 plsm121c-06 kernel: ? do_syscall_64+0x89/0x160
> Oct  6 18:11:26 plsm121c-06 kernel: ? list_lru_add+0x142/0x190
> Oct  6 18:11:26 plsm121c-06 kernel: ? task_lookup_next_fdget_rcu+0x91/0xd0
> Oct  6 18:11:26 plsm121c-06 kernel: ? __pfx_proc_fd_instantiate+0x10/0x10
> Oct  6 18:11:26 plsm121c-06 kernel: ? proc_readfd_common+0xf5/0x1f0
> Oct  6 18:11:26 plsm121c-06 kernel: ? atime_needs_update+0x61/0x120
> Oct  6 18:11:26 plsm121c-06 kernel: ? touch_atime+0x1e/0x100
> Oct  6 18:11:26 plsm121c-06 kernel: ? iterate_dir+0x18f/0x220
> Oct  6 18:11:26 plsm121c-06 kernel: ? __x64_sys_getdents64+0xf7/0x120
> Oct  6 18:11:26 plsm121c-06 kernel: ? syscall_exit_work+0xf3/0x120
> Oct  6 18:11:26 plsm121c-06 kernel: ? syscall_exit_to_user_mode+0x32/0x1b0
> Oct  6 18:11:26 plsm121c-06 kernel: ? do_syscall_64+0x89/0x160
> Oct  6 18:11:26 plsm121c-06 kernel: ? syscall_exit_work+0xf3/0x120
> Oct  6 18:11:26 plsm121c-06 kernel: ? syscall_exit_to_user_mode+0x32/0x1b0
> Oct  6 18:11:26 plsm121c-06 kernel: ? do_syscall_64+0x89/0x160
> Oct  6 18:11:26 plsm121c-06 kernel: ? syscall_exit_work+0xf3/0x120
> Oct  6 18:11:26 plsm121c-06 kernel: ? syscall_exit_to_user_mode+0x32/0x1b0
> Oct  6 18:11:26 plsm121c-06 kernel: ? do_syscall_64+0x89/0x160
> Oct  6 18:11:26 plsm121c-06 kernel: ? do_user_addr_fault+0x341/0x6b0
> Oct  6 18:11:26 plsm121c-06 kernel: ? exc_page_fault+0x70/0x160
> Oct  6 18:11:26 plsm121c-06 kernel: entry_SYSCALL_64_after_hwframe+0x76/0x7e
> Oct  6 18:11:26 plsm121c-06 kernel: RIP: 0033:0x7fc17ecfd617
> Oct  6 18:11:26 plsm121c-06 kernel: RSP: 002b:00007ffc321ff1c8 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
> Oct  6 18:11:26 plsm121c-06 kernel: RAX: ffffffffffffffda RBX: 0000000000000004 RCX: 00007fc17ecfd617
> Oct  6 18:11:26 plsm121c-06 kernel: RDX: 0000000000000002 RSI: 000056109cba2c20 RDI: 0000000000000003
> Oct  6 18:11:26 plsm121c-06 kernel: RBP: 0000000000000003 R08: 0000000000000000 R09: 00007ffc321ff060
> Oct  6 18:11:26 plsm121c-06 kernel: R10: 0000000000000000 R11: 0000000000000246 R12: 000056109cba2c20
> Oct  6 18:11:26 plsm121c-06 kernel: R13: 00007fc17ee086c8 R14: 00007ffc321ff290 R15: 00000000ffffffff
> Oct  6 18:11:26 plsm121c-06 kernel: </TASK>
> 
> I started to try to bisect but if I only apply the first 3 commits in
> your series:
> 
> fec80afc41af NFSv4/flexfiles: Remove cred local variable dependency
> eb71428e1a7f NFSv4/flexfiles: Use ds_commit_idx when marking a write commit
> d442670c0f63 NFSv4/flexfiles: Add data structure support for striped layouts

I was mistaken, I had  also applied the 4th commit:
a1491919c880 NFSv4/flexfiles: Update low level helper functions to be DS stripe aware.
 
> and rerun the test I get a kernel panic (which I don't yet have a
> crashdump for, kdump appears misconfigured on my system).

I also get a crash if I apply all but the last commit in the series,
and I was able to get a crashdump (which is the same that I actually
did get, for the previous case with only the first 4 commits applied):

[  301.706108] BUG: kernel NULL pointer dereference, address: 0000000000000060
[  301.706124] #PF: supervisor write access in kernel mode
[  301.706134] #PF: error_code(0x0002) - not-present page
[  301.706143] PGD 80a3680067 P4D 0
[  301.706150] Oops: Oops: 0002 [#1] PREEMPT SMP NOPTI
[  301.706159] CPU: 27 UID: 0 PID: 4299 Comm: dd Kdump: loaded Tainted: G           O      -------  ---  6.12.24.23.hs.snitm+ #50
[  301.706176] Tainted: [O]=OOT_MODULE
[  301.706181] Hardware name: Supermicro SYS-121C-TN10R/X13DDW-A, BIOS 2.7 07/23/2025
[  301.706191] RIP: 0010:ff_layout_alloc_lseg+0x1d8/0x7b0 [nfs_layout_flexfiles]
[  301.706205] Code: 85 c0 0f 84 72 05 00 00 48 8d 50 08 c7 40 28 01 00 00 00 48 89 50 08 48 89 50 10 48 8b 50 20 c7 40 2c 00 00 00 00 48 8d 4a 70 <48> c7 42 60 00 00 00 00 48 89 4a 70 48 c7 42 68 00 00 00 00 48 89
[  301.706228] RSP: 0018:ff825cf2df0876c0 EFLAGS: 00010286
[  301.706236] RAX: ff373fab2dbf16c0 RBX: 0000000000000001 RCX: 0000000000000070
[  301.706246] RDX: 0000000000000000 RSI: ffffffffc1b4db5d RDI: ff373fab2dbf1700
[  301.706529] RBP: ff825cf2df0877c8 R08: 0000000000000040 R09: ff373fab2dbf16c0
[  301.706759] R10: ff825cf2df0876c0 R11: 0000000000000005 R12: ff37402c1f9c0e80
[  301.706979] R13: 0000000000000000 R14: ff37402c0269f080 R15: 0000000000000000
[  301.707194] FS:  00007fa060a0f740(0000) GS:ff3740a87f180000(0000) knlGS:0000000000000000
[  301.707409] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  301.707617] CR2: 0000000000000060 CR3: 000000809d2a0001 CR4: 0000000000f73ef0
[  301.707822] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[  301.708023] DR3: 0000000000000000 DR6: 00000000fffe07f0 DR7: 0000000000000400
[  301.708223] PKRU: 55555554
[  301.708420] Call Trace:
[  301.708616]  <TASK>
[  301.708811]  ? __pfx_nfs_init_locked+0x10/0x10 [nfs]
[  301.709043]  pnfs_layout_process+0xc9/0x3c0 [nfsv4]
[  301.709283]  pnfs_parse_lgopen+0x5b/0x120 [nfsv4]
[  301.709511]  _nfs4_open_and_get_state+0x173/0x2b0 [nfsv4]
[  301.709734]  ? nfs4_opendata_alloc+0x26d/0x400 [nfsv4]
[  301.709956]  _nfs4_do_open.isra.0+0x168/0x470 [nfsv4]
[  301.710176]  nfs4_do_open+0xcc/0x210 [nfsv4]
[  301.710393]  ? __memcg_slab_post_alloc_hook+0x220/0x3d0
[  301.710595]  nfs4_atomic_open+0x10b/0x140 [nfsv4]
[  301.710818]  ? alloc_nfs_open_context+0x2e/0x190 [nfs]
[  301.711047]  nfs_atomic_open+0x209/0x6b0 [nfs]
[  301.711270]  lookup_open.isra.0+0x394/0x620
[  301.711473]  open_last_lookups+0x1f6/0x470
[  301.711677]  path_openat+0x88/0x280
[  301.711875]  ? folio_add_file_rmap_ptes+0x38/0xb0
[  301.712076]  do_filp_open+0xae/0x150
[  301.712273]  ? syscall_exit_to_user_mode+0x32/0x1b0
[  301.712474]  ? __check_object_size.part.0+0x5e/0x140
[  301.712672]  do_sys_openat2+0x96/0xd0
[  301.712871]  __x64_sys_openat+0x57/0xa0
[  301.713066]  do_syscall_64+0x7d/0x160
[  301.713260]  ? __count_memcg_events+0x53/0xf0
[  301.713449]  ? handle_mm_fault+0x245/0x340
[  301.713635]  ? do_user_addr_fault+0x341/0x6b0
[  301.713823]  ? exc_page_fault+0x70/0x160
[  301.714008]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[  301.714195] RIP: 0033:0x7fa0608fd2cb
[  301.714376] Code: 25 00 00 41 00 3d 00 00 41 00 74 4b 64 8b 04 25 18 00 00 00 85 c0 75 67 44 89 e2 48 89 ee bf 9c ff ff ff b8 01 01 00 00 0f 05 <48> 3d 00 f0 ff ff 0f 87 91 00 00 00 48 8b 54 24 28 64 48 2b 14 25
[  301.714749] RSP: 002b:00007ffe82758370 EFLAGS: 00000246 ORIG_RAX: 0000000000000101
[  301.714938] RAX: ffffffffffffffda RBX: 0000000000000001 RCX: 00007fa0608fd2cb
[  301.715127] RDX: 0000000000004241 RSI: 00007ffe82759ce1 RDI: 00000000ffffff9c
[  301.715311] RBP: 00007ffe82759ce1 R08: 0000000000000000 R09: 0000000000000002
[  301.715490] R10: 00000000000001b6 R11: 0000000000000246 R12: 0000000000004241
[  301.715667] R13: 0000000000004241 R14: 00007ffe82759ce1 R15: 00007ffe82759d15
[  301.715843]  </TASK>

crash> l *ff_layout_alloc_lseg+0x1d8
0xffffffffc170eb88 is in ff_layout_alloc_lseg (./include/linux/nfs_fs.h:90).
85      };
86
87      static inline void nfs_localio_file_init(struct nfs_file_localio *nfl)
88      {
89      #if IS_ENABLED(CONFIG_NFS_LOCALIO)
90              nfl->ro_file = NULL;
91              nfl->rw_file = NULL;
92              INIT_LIST_HEAD(&nfl->list);
93              nfl->nfs_uuid = NULL;
94      #endif

pnfs_layout_process
	-> ff_layout_alloc_mirror
	   -> nfs_localio_file_init(&mirror->dss[0].nfl)

So given the crash with:
BUG: kernel NULL pointer dereference, address: 0000000000000060

It would appear mirror->dss[0] is NULL, given its nfl member is at 0x60:

crash> struct -o nfs4_ff_layout_ds_stripe
struct nfs4_ff_layout_ds_stripe {
    [0x0] struct nfs4_ff_layout_mirror *mirror;
    [0x8] struct nfs4_deviceid devid;
   [0x18] u32 efficiency;
   [0x20] struct nfs4_ff_layout_ds *mirror_ds;
   [0x28] u32 fh_versions_cnt;
   [0x30] struct nfs_fh *fh_versions;
   [0x38] nfs4_stateid stateid;
   [0x50] const struct cred *ro_cred;
   [0x58] const struct cred *rw_cred;
   [0x60] struct nfs_file_localio nfl;
   [0x88] struct nfs4_ff_layoutstat read_stat;
   [0xd0] struct nfs4_ff_layoutstat write_stat;
  [0x118] ktime_t start_time;
}
SIZE: 0x120

  reply	other threads:[~2025-10-07 14:50 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-24 16:20 [RFC PATCH v4 0/9] NFSv4/flexfiles: Add support for striped layouts Jonathan Curley
2025-09-24 16:20 ` [RFC PATCH v4 1/9] NFSv4/flexfiles: Remove cred local variable dependency Jonathan Curley
2025-09-24 16:20 ` [RFC PATCH v4 2/9] NFSv4/flexfiles: Use ds_commit_idx when marking a write commit Jonathan Curley
2025-09-24 16:20 ` [RFC PATCH v4 3/9] NFSv4/flexfiles: Add data structure support for striped layouts Jonathan Curley
2025-09-24 16:20 ` [RFC PATCH v4 4/9] NFSv4/flexfiles: Update low level helper functions to be DS stripe aware Jonathan Curley
2025-09-24 16:20 ` [RFC PATCH v4 5/9] NFSv4/flexfiles: Read path updates for striped layouts Jonathan Curley
2025-09-24 16:20 ` [RFC PATCH v4 6/9] NFSv4/flexfiles: Commit " Jonathan Curley
2025-09-24 16:20 ` [RFC PATCH v4 7/9] NFSv4/flexfiles: Write " Jonathan Curley
2025-09-24 16:20 ` [RFC PATCH v4 8/9] NFSv4/flexfiles: Update layout stats & error paths " Jonathan Curley
2025-09-24 16:20 ` [RFC PATCH v4 9/9] NFSv4/flexfiles: Add support " Jonathan Curley
2025-10-07 14:05 ` [RFC PATCH v4 0/9] " Mike Snitzer
2025-10-07 14:50   ` Mike Snitzer [this message]
2025-10-07 16:10     ` [PATCH] NFSv4/flexfiles: fix to allocate mirror->dss before use Mike Snitzer
2025-10-07 17:39       ` [PATCH v2] " Mike Snitzer
2025-10-07 18:03         ` Jon Curley
2025-10-15 13:09 ` [RFC PATCH v4 0/9] NFSv4/flexfiles: Add support for striped layouts Mike Snitzer
2025-10-20 19:58   ` Mike Snitzer

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=aOUonNQRjYBpYcrD@kernel.org \
    --to=snitzer@kernel.org \
    --cc=anna@kernel.org \
    --cc=jcurley@purestorage.com \
    --cc=linux-nfs@vger.kernel.org \
    --cc=mcgrof@kernel.org \
    --cc=trondmy@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