linux-stable/fs/ceph
Xiubo Li 77be53ba04 netfs: do not unlock and put the folio twice
[ Upstream commit fac47b43c7 ]

check_write_begin() will unlock and put the folio when return
non-zero.  So we should avoid unlocking and putting it twice in
netfs layer.

Change the way ->check_write_begin() works in the following two ways:

 (1) Pass it a pointer to the folio pointer, allowing it to unlock and put
     the folio prior to doing the stuff it wants to do, provided it clears
     the folio pointer.

 (2) Change the return values such that 0 with folio pointer set means
     continue, 0 with folio pointer cleared means re-get and all error
     codes indicating an error (no special treatment for -EAGAIN).

[ bagasdotme: use Sphinx code text syntax for *foliop pointer ]

Cc: stable@vger.kernel.org
Link: https://tracker.ceph.com/issues/56423
Link: https://lore.kernel.org/r/cf169f43-8ee7-8697-25da-0204d1b4343e@redhat.com
Co-developed-by: David Howells <dhowells@redhat.com>
Signed-off-by: Xiubo Li <xiubli@redhat.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2022-07-22 10:21:42 +02:00
..
Kconfig ceph: conversion to new fscache API 2022-01-11 22:13:01 +00:00
Makefile ceph: add dentry lease metric support 2020-06-01 13:22:51 +02:00
acl.c vfs: add rcu argument to ->get_acl() callback 2021-08-18 22:08:24 +02:00
addr.c netfs: do not unlock and put the folio twice 2022-07-22 10:21:42 +02:00
cache.c netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-22 14:28:12 +02:00
cache.h netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-22 14:28:12 +02:00
caps.c ceph: wait on async create before checking caps for syncfs 2022-07-07 17:54:45 +02:00
ceph_frag.c License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
debugfs.c ceph: use tracked average r/w/m latencies to display metrics in debugfs 2022-03-21 13:35:16 +01:00
dir.c ceph: fix memory leak in ceph_readdir when note_last_dentry returns error 2022-03-21 13:35:16 +01:00
export.c ceph: shut down access to inode when async create fails 2021-11-08 03:29:51 +01:00
file.c netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-22 14:28:12 +02:00
inode.c netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-22 14:28:12 +02:00
io.c ceph: fix kerneldoc copypasta over ceph_start_io_direct 2021-04-27 23:52:23 +02:00
io.h ceph: add buffered/direct exclusionary locking for reads and writes 2019-09-16 12:06:25 +02:00
ioctl.c ceph: consider inode's last read/write when calculating wanted caps 2020-03-30 12:42:42 +02:00
ioctl.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
locks.c ceph: eliminate req->r_wait_for_completion from ceph_mds_request 2022-03-01 18:26:36 +01:00
mds_client.c netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-22 14:28:12 +02:00
mds_client.h ceph: add getvxattr op 2022-03-01 18:26:37 +01:00
mdsmap.c ceph: fix mdsmap decode when there are MDS's beyond max_mds 2021-11-08 03:29:52 +01:00
metric.c ceph: include average/stdev r/w/m latency in mds metrics 2022-03-21 13:35:16 +01:00
metric.h ceph: include average/stdev r/w/m latency in mds metrics 2022-03-21 13:35:16 +01:00
quota.c ceph: don't check for quotas on MDS stray dirs 2022-01-13 13:40:07 +01:00
snap.c netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-22 14:28:12 +02:00
strings.c ceph: add getvxattr op 2022-03-01 18:26:37 +01:00
super.c netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-22 14:28:12 +02:00
super.h netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-22 14:28:12 +02:00
util.c ceph: move net/ceph/ceph_fs.c to fs/ceph/util.c 2020-01-27 16:53:40 +01:00
xattr.c netfs: Fix gcc-12 warning by embedding vfs inode in netfs_i_context 2022-06-22 14:28:12 +02:00