lockdep: holding locks across syscall boundaries

From: Jens Axboe
Date: Fri Oct 27 2023 - 11:15:01 EST


Hi,

Normally we'd expect locking state to be clean and consistent across
syscall entry and exit, as that is always the case for sync syscalls.
We currently have a work-around for holding a lock from aio, see
kiocb_start_write(), which pretends to drop the lock from lockdeps
perspective, as it's held from submission to until kiocb_end_write() is
called at completion time.

This is a bit of an ugly work-around, and defeats the purpose of
lockdep.

Since I've now got another case where I want to hold a resource across
syscalls, is there a better way to do this?

This is for inode_dio_start(), which increments an inode int count, and
inode_dio_end() which decrements it. If a task is doing
inode_dio_start() and then inode_dio_wait(), I want to trigger this. I
have a hack that does this, but it disables lockdep_sys_exit() as
otherwise I just get that warning rather than the more useful one.

Thanks,
--
Jens Axboe