diff options
Diffstat (limited to 'fs/ext4/file.c')
-rw-r--r-- | fs/ext4/file.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/fs/ext4/file.c b/fs/ext4/file.c index 3cec0b95672f..208adfc3e673 100644 --- a/fs/ext4/file.c +++ b/fs/ext4/file.c | |||
@@ -302,16 +302,17 @@ static int ext4_dax_huge_fault(struct vm_fault *vmf, | |||
302 | down_read(&EXT4_I(inode)->i_mmap_sem); | 302 | down_read(&EXT4_I(inode)->i_mmap_sem); |
303 | handle = ext4_journal_start_sb(sb, EXT4_HT_WRITE_PAGE, | 303 | handle = ext4_journal_start_sb(sb, EXT4_HT_WRITE_PAGE, |
304 | EXT4_DATA_TRANS_BLOCKS(sb)); | 304 | EXT4_DATA_TRANS_BLOCKS(sb)); |
305 | if (IS_ERR(handle)) { | ||
306 | up_read(&EXT4_I(inode)->i_mmap_sem); | ||
307 | sb_end_pagefault(sb); | ||
308 | return VM_FAULT_SIGBUS; | ||
309 | } | ||
305 | } else { | 310 | } else { |
306 | down_read(&EXT4_I(inode)->i_mmap_sem); | 311 | down_read(&EXT4_I(inode)->i_mmap_sem); |
307 | } | 312 | } |
308 | if (!IS_ERR(handle)) | 313 | result = dax_iomap_fault(vmf, pe_size, NULL, &ext4_iomap_ops); |
309 | result = dax_iomap_fault(vmf, pe_size, NULL, &ext4_iomap_ops); | ||
310 | else | ||
311 | result = VM_FAULT_SIGBUS; | ||
312 | if (write) { | 314 | if (write) { |
313 | if (!IS_ERR(handle)) | 315 | ext4_journal_stop(handle); |
314 | ext4_journal_stop(handle); | ||
315 | up_read(&EXT4_I(inode)->i_mmap_sem); | 316 | up_read(&EXT4_I(inode)->i_mmap_sem); |
316 | sb_end_pagefault(sb); | 317 | sb_end_pagefault(sb); |
317 | } else { | 318 | } else { |