Skip to content

Commit

Permalink
[GFS2] Fix locking for Direct I/O reads
Browse files Browse the repository at this point in the history
We need to hold i_mutex when doing direct i/o reads.

Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
  • Loading branch information
Steven Whitehouse committed Jul 5, 2006
1 parent b0dd930 commit faac9bd
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions fs/gfs2/ops_address.c
Original file line number Diff line number Diff line change
Expand Up @@ -642,6 +642,7 @@ static ssize_t gfs2_direct_IO(int rw, struct kiocb *iocb,
struct inode *inode = file->f_mapping->host;
struct gfs2_inode *ip = GFS2_I(inode);
struct gfs2_sbd *sdp = GFS2_SB(inode);
int ret;

if (rw == WRITE)
return gfs2_direct_IO_write(iocb, iov, offset, nr_segs);
Expand All @@ -650,9 +651,12 @@ static ssize_t gfs2_direct_IO(int rw, struct kiocb *iocb,
gfs2_assert_warn(sdp, !gfs2_is_stuffed(ip)))
return -EINVAL;

return __blockdev_direct_IO(READ, iocb, inode, inode->i_sb->s_bdev, iov,
offset, nr_segs, gfs2_get_block, NULL,
DIO_OWN_LOCKING);
mutex_lock(&inode->i_mutex);
ret = __blockdev_direct_IO(READ, iocb, inode, inode->i_sb->s_bdev, iov,
offset, nr_segs, gfs2_get_block, NULL,
DIO_OWN_LOCKING);
mutex_unlock(&inode->i_mutex);
return ret;
}

const struct address_space_operations gfs2_file_aops = {
Expand Down

0 comments on commit faac9bd

Please sign in to comment.