diff options
author | Souptick Joarder <jrdr.linux@gmail.com> | 2018-10-02 22:20:50 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2018-10-02 22:20:50 -0400 |
commit | 401b25aa1a75e7fe4e3202a6336604269697d705 (patch) | |
tree | 6506f794016ad7f8e905e33cd5faa5090a0f4dd7 | |
parent | 625ef8a3acd111d5f496d190baf99d1a815bd03e (diff) |
ext4: convert fault handler to use vm_fault_t type
Return type of ext4_page_mkwrite and ext4_filemap_fault are
changed to use vm_fault_t type.
With this patch all the callers of block_page_mkwrite_return()
are changed to handle vm_fault_t. So converting the return type
of block_page_mkwrite_return() to vm_fault_t.
Signed-off-by: Souptick Joarder <jrdr.linux@gmail.com>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Reviewed-by: Matthew Wilcox <willy@infradead.org>
-rw-r--r-- | fs/ext4/ext4.h | 4 | ||||
-rw-r--r-- | fs/ext4/inode.c | 29 | ||||
-rw-r--r-- | include/linux/buffer_head.h | 2 |
3 files changed, 18 insertions, 17 deletions
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 57cbc98d730f..86e1bacac757 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h | |||
@@ -2487,8 +2487,8 @@ extern int ext4_writepage_trans_blocks(struct inode *); | |||
2487 | extern int ext4_chunk_trans_blocks(struct inode *, int nrblocks); | 2487 | extern int ext4_chunk_trans_blocks(struct inode *, int nrblocks); |
2488 | extern int ext4_zero_partial_blocks(handle_t *handle, struct inode *inode, | 2488 | extern int ext4_zero_partial_blocks(handle_t *handle, struct inode *inode, |
2489 | loff_t lstart, loff_t lend); | 2489 | loff_t lstart, loff_t lend); |
2490 | extern int ext4_page_mkwrite(struct vm_fault *vmf); | 2490 | extern vm_fault_t ext4_page_mkwrite(struct vm_fault *vmf); |
2491 | extern int ext4_filemap_fault(struct vm_fault *vmf); | 2491 | extern vm_fault_t ext4_filemap_fault(struct vm_fault *vmf); |
2492 | extern qsize_t *ext4_get_reserved_space(struct inode *inode); | 2492 | extern qsize_t *ext4_get_reserved_space(struct inode *inode); |
2493 | extern int ext4_get_projid(struct inode *inode, kprojid_t *projid); | 2493 | extern int ext4_get_projid(struct inode *inode, kprojid_t *projid); |
2494 | extern void ext4_da_release_space(struct inode *inode, int to_free); | 2494 | extern void ext4_da_release_space(struct inode *inode, int to_free); |
diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c index 9b69f88bdacc..c3d9a42c561e 100644 --- a/fs/ext4/inode.c +++ b/fs/ext4/inode.c | |||
@@ -6184,13 +6184,14 @@ static int ext4_bh_unmapped(handle_t *handle, struct buffer_head *bh) | |||
6184 | return !buffer_mapped(bh); | 6184 | return !buffer_mapped(bh); |
6185 | } | 6185 | } |
6186 | 6186 | ||
6187 | int ext4_page_mkwrite(struct vm_fault *vmf) | 6187 | vm_fault_t ext4_page_mkwrite(struct vm_fault *vmf) |
6188 | { | 6188 | { |
6189 | struct vm_area_struct *vma = vmf->vma; | 6189 | struct vm_area_struct *vma = vmf->vma; |
6190 | struct page *page = vmf->page; | 6190 | struct page *page = vmf->page; |
6191 | loff_t size; | 6191 | loff_t size; |
6192 | unsigned long len; | 6192 | unsigned long len; |
6193 | int ret; | 6193 | int err; |
6194 | vm_fault_t ret; | ||
6194 | struct file *file = vma->vm_file; | 6195 | struct file *file = vma->vm_file; |
6195 | struct inode *inode = file_inode(file); | 6196 | struct inode *inode = file_inode(file); |
6196 | struct address_space *mapping = inode->i_mapping; | 6197 | struct address_space *mapping = inode->i_mapping; |
@@ -6203,8 +6204,8 @@ int ext4_page_mkwrite(struct vm_fault *vmf) | |||
6203 | 6204 | ||
6204 | down_read(&EXT4_I(inode)->i_mmap_sem); | 6205 | down_read(&EXT4_I(inode)->i_mmap_sem); |
6205 | 6206 | ||
6206 | ret = ext4_convert_inline_data(inode); | 6207 | err = ext4_convert_inline_data(inode); |
6207 | if (ret) | 6208 | if (err) |
6208 | goto out_ret; | 6209 | goto out_ret; |
6209 | 6210 | ||
6210 | /* Delalloc case is easy... */ | 6211 | /* Delalloc case is easy... */ |
@@ -6212,9 +6213,9 @@ int ext4_page_mkwrite(struct vm_fault *vmf) | |||
6212 | !ext4_should_journal_data(inode) && | 6213 | !ext4_should_journal_data(inode) && |
6213 | !ext4_nonda_switch(inode->i_sb)) { | 6214 | !ext4_nonda_switch(inode->i_sb)) { |
6214 | do { | 6215 | do { |
6215 | ret = block_page_mkwrite(vma, vmf, | 6216 | err = block_page_mkwrite(vma, vmf, |
6216 | ext4_da_get_block_prep); | 6217 | ext4_da_get_block_prep); |
6217 | } while (ret == -ENOSPC && | 6218 | } while (err == -ENOSPC && |
6218 | ext4_should_retry_alloc(inode->i_sb, &retries)); | 6219 | ext4_should_retry_alloc(inode->i_sb, &retries)); |
6219 | goto out_ret; | 6220 | goto out_ret; |
6220 | } | 6221 | } |
@@ -6259,8 +6260,8 @@ retry_alloc: | |||
6259 | ret = VM_FAULT_SIGBUS; | 6260 | ret = VM_FAULT_SIGBUS; |
6260 | goto out; | 6261 | goto out; |
6261 | } | 6262 | } |
6262 | ret = block_page_mkwrite(vma, vmf, get_block); | 6263 | err = block_page_mkwrite(vma, vmf, get_block); |
6263 | if (!ret && ext4_should_journal_data(inode)) { | 6264 | if (!err && ext4_should_journal_data(inode)) { |
6264 | if (ext4_walk_page_buffers(handle, page_buffers(page), 0, | 6265 | if (ext4_walk_page_buffers(handle, page_buffers(page), 0, |
6265 | PAGE_SIZE, NULL, do_journal_get_write_access)) { | 6266 | PAGE_SIZE, NULL, do_journal_get_write_access)) { |
6266 | unlock_page(page); | 6267 | unlock_page(page); |
@@ -6271,24 +6272,24 @@ retry_alloc: | |||
6271 | ext4_set_inode_state(inode, EXT4_STATE_JDATA); | 6272 | ext4_set_inode_state(inode, EXT4_STATE_JDATA); |
6272 | } | 6273 | } |
6273 | ext4_journal_stop(handle); | 6274 | ext4_journal_stop(handle); |
6274 | if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries)) | 6275 | if (err == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries)) |
6275 | goto retry_alloc; | 6276 | goto retry_alloc; |
6276 | out_ret: | 6277 | out_ret: |
6277 | ret = block_page_mkwrite_return(ret); | 6278 | ret = block_page_mkwrite_return(err); |
6278 | out: | 6279 | out: |
6279 | up_read(&EXT4_I(inode)->i_mmap_sem); | 6280 | up_read(&EXT4_I(inode)->i_mmap_sem); |
6280 | sb_end_pagefault(inode->i_sb); | 6281 | sb_end_pagefault(inode->i_sb); |
6281 | return ret; | 6282 | return ret; |
6282 | } | 6283 | } |
6283 | 6284 | ||
6284 | int ext4_filemap_fault(struct vm_fault *vmf) | 6285 | vm_fault_t ext4_filemap_fault(struct vm_fault *vmf) |
6285 | { | 6286 | { |
6286 | struct inode *inode = file_inode(vmf->vma->vm_file); | 6287 | struct inode *inode = file_inode(vmf->vma->vm_file); |
6287 | int err; | 6288 | vm_fault_t ret; |
6288 | 6289 | ||
6289 | down_read(&EXT4_I(inode)->i_mmap_sem); | 6290 | down_read(&EXT4_I(inode)->i_mmap_sem); |
6290 | err = filemap_fault(vmf); | 6291 | ret = filemap_fault(vmf); |
6291 | up_read(&EXT4_I(inode)->i_mmap_sem); | 6292 | up_read(&EXT4_I(inode)->i_mmap_sem); |
6292 | 6293 | ||
6293 | return err; | 6294 | return ret; |
6294 | } | 6295 | } |
diff --git a/include/linux/buffer_head.h b/include/linux/buffer_head.h index 96225a77c112..7b73ef7f902d 100644 --- a/include/linux/buffer_head.h +++ b/include/linux/buffer_head.h | |||
@@ -242,7 +242,7 @@ int block_commit_write(struct page *page, unsigned from, unsigned to); | |||
242 | int block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf, | 242 | int block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf, |
243 | get_block_t get_block); | 243 | get_block_t get_block); |
244 | /* Convert errno to return value from ->page_mkwrite() call */ | 244 | /* Convert errno to return value from ->page_mkwrite() call */ |
245 | static inline int block_page_mkwrite_return(int err) | 245 | static inline vm_fault_t block_page_mkwrite_return(int err) |
246 | { | 246 | { |
247 | if (err == 0) | 247 | if (err == 0) |
248 | return VM_FAULT_LOCKED; | 248 | return VM_FAULT_LOCKED; |