dax: assert that i_rwsem is held exclusive for writes
authorChristoph Hellwig <hch@lst.de>
Wed, 8 Feb 2017 19:43:13 +0000 (14:43 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Wed, 8 Feb 2017 19:43:13 +0000 (14:43 -0500)
Make sure all callers follow the same locking protocol, given that DAX
transparantly replaced the normal buffered I/O path.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Jan Kara <jack@suse.cz>
fs/dax.c

index 5c74f60d0a5094dc0a27f27ae0acd41667414332..04734daed1bd4a392dcf9882683277a8856e9353 100644 (file)
--- a/fs/dax.c
+++ b/fs/dax.c
@@ -1061,8 +1061,12 @@ dax_iomap_rw(struct kiocb *iocb, struct iov_iter *iter,
        loff_t pos = iocb->ki_pos, ret = 0, done = 0;
        unsigned flags = 0;
 
-       if (iov_iter_rw(iter) == WRITE)
+       if (iov_iter_rw(iter) == WRITE) {
+               lockdep_assert_held_exclusive(&inode->i_rwsem);
                flags |= IOMAP_WRITE;
+       } else {
+               lockdep_assert_held(&inode->i_rwsem);
+       }
 
        while (iov_iter_count(iter)) {
                ret = iomap_apply(inode, pos, iov_iter_count(iter), flags, ops,