linux/fs/afs
David Howells 17ba6f0bd1 afs: Fix error handling with lookup via FS.InlineBulkStatus
When afs does a lookup, it tries to use FS.InlineBulkStatus to preemptively
look up a bunch of files in the parent directory and cache this locally, on
the basis that we might want to look at them too (for example if someone
does an ls on a directory, they may want want to then stat every file
listed).

FS.InlineBulkStatus can be considered a compound op with the normal abort
code applying to the compound as a whole.  Each status fetch within the
compound is then given its own individual abort code - but assuming no
error that prevents the bulk fetch from returning the compound result will
be 0, even if all the constituent status fetches failed.

At the conclusion of afs_do_lookup(), we should use the abort code from the
appropriate status to determine the error to return, if any - but instead
it is assumed that we were successful if the op as a whole succeeded and we
return an incompletely initialised inode, resulting in ENOENT, no matter
the actual reason.  In the particular instance reported, a vnode with no
permission granted to be accessed is being given a UAEACCES abort code
which should be reported as EACCES, but is instead being reported as
ENOENT.

Fix this by abandoning the inode (which will be cleaned up with the op) if
file[1] has an abort code indicated and turn that abort code into an error
instead.

Whilst we're at it, add a tracepoint so that the abort codes of the
individual subrequests of FS.InlineBulkStatus can be logged.  At the moment
only the container abort code can be 0.

Fixes: e49c7b2f6d ("afs: Build an abstraction around an "operation" concept")
Reported-by: Jeffrey Altman <jaltman@auristor.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Reviewed-by: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org
2024-01-22 22:30:14 +00:00
..
addr_list.c afs: Remove the unimplemented afs_cmp_addr_list() 2024-01-01 16:37:26 +00:00
addr_prefs.c afs: Mark address lists with configured priorities 2024-01-01 16:37:27 +00:00
afs_cm.h
afs_fs.h
afs_vl.h afs: Implement client support for the YFSVL.GetCellName RPC op 2020-06-04 15:37:57 +01:00
afs.h afs: Parse the VolSync record in the reply of a number of RPC ops 2024-01-01 16:37:27 +00:00
callback.c afs: Overhaul invalidation handling to better support RO volumes 2024-01-01 16:37:27 +00:00
cell.c afs: Overhaul invalidation handling to better support RO volumes 2024-01-01 16:37:27 +00:00
cmservice.c rxrpc, afs: Allow afs to pin rxrpc_peer objects 2023-12-24 15:22:50 +00:00
dir_edit.c afs: fix the afs_dir_get_folio return value 2023-05-06 10:10:08 -07:00
dir_silly.c afs: Simplify error handling 2023-12-24 15:22:53 +00:00
dir.c afs: Fix error handling with lookup via FS.InlineBulkStatus 2024-01-22 22:30:14 +00:00
dynroot.c vfs-6.8.netfs 2024-01-19 09:10:23 -08:00
file.c vfs-6.8.netfs 2024-01-19 09:10:23 -08:00
flock.c fs: remove locks_inode 2023-01-11 06:52:43 -05:00
fs_operation.c afs: Fix fileserver rotation 2024-01-01 16:37:27 +00:00
fs_probe.c afs: Fix fileserver rotation 2024-01-01 16:37:27 +00:00
fsclient.c afs: trace: Log afs_make_call(), including server address 2024-01-01 16:37:27 +00:00
inode.c vfs-6.8.netfs 2024-01-19 09:10:23 -08:00
internal.h vfs-6.8.netfs 2024-01-19 09:10:23 -08:00
Kconfig afs: Convert afs to use the new fscache API 2022-01-07 13:44:47 +00:00
main.c afs: Provide a way to configure address priorities 2024-01-01 16:37:26 +00:00
Makefile afs: Move the vnode/volume validity checking code into its own file 2024-01-01 16:37:27 +00:00
misc.c afs: Simplify error handling 2023-12-24 15:22:53 +00:00
mntpt.c afs: Remove check of PageError 2022-06-29 08:51:06 -04:00
proc.c afs: Overhaul invalidation handling to better support RO volumes 2024-01-01 16:37:27 +00:00
protocol_afs.h afs: Fix corruption in reads at fpos 2G-4G from an OpenAFS server 2021-09-13 09:14:21 +01:00
protocol_uae.h afs: Add support for the UAE error table 2019-06-28 18:37:53 +01:00
protocol_yfs.h afs: Fix corruption in reads at fpos 2G-4G from an OpenAFS server 2021-09-13 09:14:21 +01:00
rotate.c afs: Fix offline and busy message emission 2024-01-01 16:37:27 +00:00
rxrpc.c afs: trace: Log afs_make_call(), including server address 2024-01-01 16:37:27 +00:00
security.c fs: port ->permission() to pass mnt_idmap 2023-01-19 09:24:28 +01:00
server_list.c afs: Fix fileserver rotation 2024-01-01 16:37:27 +00:00
server.c afs: Apply server breaks to mmap'd files in the call processor 2024-01-01 16:37:27 +00:00
super.c vfs-6.8.netfs 2024-01-19 09:10:23 -08:00
validation.c afs: Overhaul invalidation handling to better support RO volumes 2024-01-01 16:37:27 +00:00
vl_alias.c afs: Defer volume record destruction to a workqueue 2024-01-01 16:37:27 +00:00
vl_list.c afs: Dispatch vlserver probes in priority order 2024-01-01 16:37:27 +00:00
vl_probe.c afs: Keep a record of the current fileserver endpoint state 2024-01-01 16:37:27 +00:00
vl_rotate.c afs: Add some more info to /proc/net/afs/servers 2024-01-01 16:36:58 +00:00
vlclient.c afs: Don't leave DONTUSE/NEWREPSITE servers out of server list 2024-01-01 16:37:27 +00:00
volume.c afs: Fix fileserver rotation 2024-01-01 16:37:27 +00:00
write.c vfs-6.8.netfs 2024-01-19 09:10:23 -08:00
xattr.c afs: Add __counted_by for struct afs_acl and use struct_size() 2023-12-01 09:51:43 -08:00
xdr_fs.h afs: Fix directory entry size calculation 2021-01-04 12:25:19 +00:00
yfsclient.c afs: trace: Log afs_make_call(), including server address 2024-01-01 16:37:27 +00:00