Stop corrupting socket's task_frag
Status from this message: This series was applied to netdev/net.git (master)
Get series with b4
b4 am [email protected]Versions newest first · linked by author and title
- v4 Latest3 patches 4 repliesApplied 3/3
- v3 posting 2/23 patches 5 repliesSuperseded
- v3 posting 1/21 of 3 patches 1 replySuperseded
Earlier versions · 2
| Version | Posted | Patches | Replies | Status |
|---|---|---|---|---|
| v2 | 3 patches | 4 replies | Superseded | |
| v1 | 3 patches | 21 replies | Superseded |
Patches in v4 All 3 applied
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/3 | net: Introduce sk_use_task_frag in struct sock.include/ net/ | +10 | 0 replies | Applied |
| 2/3 | Treewide: Stop corrupting socket's task_fragdrivers/ drivers/ drivers/ +9 more | +17 | 4 replies | Applied |
| 3/3 | net: simplify sk_page_fraginclude/ | +2 | 0 replies | Applied |
Reviews trailers per patch
All 3 patches have a Reviewed-by or Acked-by.
| Patch | Guillaume Nault | Benjamin Coddington |
|---|---|---|
| 1/3 | R-b | |
| 2/3 | R-b | |
| 3/3 | R-b |
Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.
Cover letter [PATCH net v4 0/3] Stop corrupting socket's task_frag
The networking code uses flags in sk_allocation to determine if it can use current->task_frag, however in-kernel users of sockets may stop setting sk_allocation when they convert to the preferred memalloc_nofs_save/restore, as SUNRPC has done in commit a1231fda7e94 ("SUNRPC: Set memalloc_nofs_save() on all rpciod/xprtiod jobs").
This will cause corruption in current->task_frag when recursing into the network layer for those subsystems during page fault or reclaim. The corruption is difficult to diagnose because stack traces may not contain the offending subsystem at all. The corruption is unlikely to show up in testing because it requires memory pressure, and so subsystems that convert to memalloc_nofs_save/restore are likely to continue to run into this issue.
Previous reports and proposed fixes:
https://lore.kernel.org/netdev/96a18bd00cbc6cb554603cc0d6ef1c551965b078.1663762494.git.gnault@redhat.com/
https://lore.kernel.org/netdev/b4d8cb09c913d3e34f853736f3f5628abfd7f4b6.1656699567.git.gnault@redhat.com/
https://lore.kernel.org/linux-nfs/de6d99321d1dcaa2ad456b92b3680aa77c07a747.1665401788.git.gnault@redhat.com/
Guilluame Nault has done all of the hard work tracking this problem down and finding the best fix for this issue. I'm just taking a turn posting another fix.
Changes on v2:
- rebased on -net
- set sk_use_task_frag = false for xfrm/espintcp.c
Changes on v3:
- fixup comments in sock.h for kernel-doc
Changes on v4:
- rebased on -net
- sk_use_task_frag moved to hole after sk_txtime_unused
- droppd afs/rxrpc.c hunk, not needed
Benjamin Coddington (2):
Treewide: Stop corrupting socket's task_frag
net: simplify sk_page_frag
Guillaume Nault (1):
net: Introduce sk_use_task_frag in struct sock.
drivers/block/drbd/drbd_receiver.c | 3 +++ drivers/block/nbd.c | 1 + drivers/nvme/host/tcp.c | 1 + drivers/scsi/iscsi_tcp.c | 1 + drivers/usb/usbip/usbip_common.c | 1 + fs/cifs/connect.c | 1 + fs/dlm/lowcomms.c | 2 ++ fs/ocfs2/cluster/tcp.c | 1 + include/net/sock.h | 10 ++++++---- net/9p/trans_fd.c | 1 + net/ceph/messenger.c | 1 + net/core/sock.c | 1 + net/sunrpc/xprtsock.c | 3 +++ net/xfrm/espintcp.c | 1 + 14 files changed, 24 insertions(+), 4 deletions(-)
Signature · 1 line
2.31.1