On Sun, Oct 08, 2023 at 10:26:40PM +0200, Mateusz Guzik wrote: > On 10/7/23, Matthew Wilcox (Oracle) <willy@xxxxxxxxxxxxx> wrote: > > +static inline void inode_assert_locked_excl(const struct inode *inode) > > +{ > > + rwsem_assert_held_write(&inode->i_rwsem); > > +} > > + > > static inline void inode_lock_nested(struct inode *inode, unsigned > > subclass) > > { > > down_write_nested(&inode->i_rwsem, subclass); > > Why "excl" instead of "write"? Apart from looking weird, it is > inconsistent with "prior art" in the file: i_mmap_assert_write_locked. Yes, but that pairs with i_mmap_lock_write() / i_mmap_lock_read(). The problem is that we have inode_lock() / inode_lock_shared() inode_assert_locked_read/write doesn't make sense with them. But inode_assert_locked() doesn't make sense as the assertion for inode_lock() because you'd expect it to assert whether the inode lock is held at all. So I went with inode_assert_locked_excl(). I wouldn't mind if we converted all the inode_lock()/shared to inode_lock_read() / inode_lock_write(), and then added inode_assert_read_locked() / inode_assert_write_locked(). That's a bit of a bigger job than I want to take on today.