diff options
author | Christoph Hellwig <hch@lst.de> | 2017-02-08 14:43:13 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2017-02-08 14:43:13 -0500 |
commit | 168316db3583253b9e5d46392e5b9d03d531406f (patch) | |
tree | 1d402c8b9dbc959dfc546a1cef16581b2b09a711 /fs/dax.c | |
parent | ff5462e39ca1d27e530d088c4e38741fd9cddad4 (diff) | |
download | linux-stable-168316db3583253b9e5d46392e5b9d03d531406f.tar.gz linux-stable-168316db3583253b9e5d46392e5b9d03d531406f.tar.bz2 linux-stable-168316db3583253b9e5d46392e5b9d03d531406f.zip |
dax: assert that i_rwsem is held exclusive for writes
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>
Diffstat (limited to 'fs/dax.c')
-rw-r--r-- | fs/dax.c | 6 |
1 files changed, 5 insertions, 1 deletions
@@ -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, |