Thread (7 messages) 7 messages, 3 authors, 2021-03-26

Re: [RFC] inode.i_opflags - Usage of two different locking schemes

From: "Theodore Ts'o" <tytso@mit.edu>
Date: 2021-03-05 15:19:31
Also in: lkml

On Fri, Mar 05, 2021 at 02:10:09PM +0100, Alexander Lochmann wrote:
Hi folks,

I've stumbled across an interesting locking scheme. It's related to struct
inode, more precisely it is an mqueue inode.
Our results show that inode:mqueue.i_opflags is read with i_rwsem being
hold.
In d_flags_for_inode, and do_inode_permission the i_lock is used to read and
write i_opflags.
Is this a real locking scheme? Is a lock needed to access i_opflags at all?
What is the magic behind this contradiction?

I've put the report of the counterexamples on our webserver:
https://ess.cs.tu-dortmund.de/lockdoc-bugs/cex-inode-mqueue.html.
It contains the stacktraces leading to those accesses, and the locks that
were actually held.
1)  I don't see where i_opflags is being read in ipc/mqueue.c at all,
either with or without i_rwsem.

2)  I'm not sure what this has to do with ext4?

        	    	      	       	  - Ted
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help