On Sun, Nov 19, 2023 at 08:22:30PM +0000, Chuck Lever III wrote: > lockdep assertion failure > > Call Trace: > <TASK> > ? show_regs+0x5d/0x64 > ? offset_dir_llseek+0x39/0xa3 > ? __warn+0xab/0x158 > ? report_bug+0xd0/0x144 > ? offset_dir_llseek+0x39/0xa3 > ? handle_bug+0x45/0x74 > ? exc_invalid_op+0x18/0x68 > ? asm_exc_invalid_op+0x1b/0x20 > ? offset_dir_llseek+0x39/0xa3 > ? __pfx_nfs3svc_encode_entryplus3+0x10/0x10 [nfsd] > vfs_llseek+0x1f/0x31 > nfsd_readdir+0x64/0xb7 [nfsd] Lovely... Said that, file here is thread-local, so all accesses to it are serialized. The same file has ->iterate_shared() called without ->f_pos_lock a well... So that's whatever serialization between ->iterate_shared and ->llseek, really; for normally opened files that's going to be on fdget_pos() in relevant syscalls, for something private it's up to whatever's opened them.