Message ID | 20200213202423.23455-2-agruenba@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Switch to page_mkwrite_check_truncate | expand |
On Thu 13-02-20 21:24:17, Andreas Gruenbacher wrote: > Per review comments from Jan and Ted, un-inline page_mkwrite_check_truncate > and move it to mm/filemap.c. This function doesn't seem worth inlining. > > Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com> > Cc: Jan Kara <jack@suse.cz> > Cc: Theodore Y. Ts'o <tytso@mit.edu> Looks good to me. You can add: Reviewed-by: Jan Kara <jack@suse.cz> Honza > > diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h > index ccb14b6a16b5..6c9c5b88924d 100644 > --- a/include/linux/pagemap.h > +++ b/include/linux/pagemap.h > @@ -636,32 +636,6 @@ static inline unsigned long dir_pages(struct inode *inode) > PAGE_SHIFT; > } > > -/** > - * page_mkwrite_check_truncate - check if page was truncated > - * @page: the page to check > - * @inode: the inode to check the page against > - * > - * Returns the number of bytes in the page up to EOF, > - * or -EFAULT if the page was truncated. > - */ > -static inline int page_mkwrite_check_truncate(struct page *page, > - struct inode *inode) > -{ > - loff_t size = i_size_read(inode); > - pgoff_t index = size >> PAGE_SHIFT; > - int offset = offset_in_page(size); > - > - if (page->mapping != inode->i_mapping) > - return -EFAULT; > - > - /* page is wholly inside EOF */ > - if (page->index < index) > - return PAGE_SIZE; > - /* page is wholly past EOF */ > - if (page->index > index || !offset) > - return -EFAULT; > - /* page is partially inside EOF */ > - return offset; > -} > +int page_mkwrite_check_truncate(struct page *page, struct inode *inode); > > #endif /* _LINUX_PAGEMAP_H */ > diff --git a/mm/filemap.c b/mm/filemap.c > index 1784478270e1..edcb4a8a6121 100644 > --- a/mm/filemap.c > +++ b/mm/filemap.c > @@ -2678,6 +2678,34 @@ const struct vm_operations_struct generic_file_vm_ops = { > .page_mkwrite = filemap_page_mkwrite, > }; > > +/** > + * page_mkwrite_check_truncate - check if page was truncated > + * @page: the page to check > + * @inode: the inode to check the page against > + * > + * Returns the number of bytes in the page up to EOF, > + * or -EFAULT if the page was truncated. > + */ > +int page_mkwrite_check_truncate(struct page *page, struct inode *inode) > +{ > + loff_t size = i_size_read(inode); > + pgoff_t index = size >> PAGE_SHIFT; > + int offset = offset_in_page(size); > + > + if (page->mapping != inode->i_mapping) > + return -EFAULT; > + > + /* page is wholly inside EOF */ > + if (page->index < index) > + return PAGE_SIZE; > + /* page is wholly past EOF */ > + if (page->index > index || !offset) > + return -EFAULT; > + /* page is partially inside EOF */ > + return offset; > +} > +EXPORT_SYMBOL(page_mkwrite_check_truncate); > + > /* This is used for a general mmap of a disk file */ > > int generic_file_mmap(struct file * file, struct vm_area_struct * vma) > -- > 2.24.1 >
diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index ccb14b6a16b5..6c9c5b88924d 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -636,32 +636,6 @@ static inline unsigned long dir_pages(struct inode *inode) PAGE_SHIFT; } -/** - * page_mkwrite_check_truncate - check if page was truncated - * @page: the page to check - * @inode: the inode to check the page against - * - * Returns the number of bytes in the page up to EOF, - * or -EFAULT if the page was truncated. - */ -static inline int page_mkwrite_check_truncate(struct page *page, - struct inode *inode) -{ - loff_t size = i_size_read(inode); - pgoff_t index = size >> PAGE_SHIFT; - int offset = offset_in_page(size); - - if (page->mapping != inode->i_mapping) - return -EFAULT; - - /* page is wholly inside EOF */ - if (page->index < index) - return PAGE_SIZE; - /* page is wholly past EOF */ - if (page->index > index || !offset) - return -EFAULT; - /* page is partially inside EOF */ - return offset; -} +int page_mkwrite_check_truncate(struct page *page, struct inode *inode); #endif /* _LINUX_PAGEMAP_H */ diff --git a/mm/filemap.c b/mm/filemap.c index 1784478270e1..edcb4a8a6121 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2678,6 +2678,34 @@ const struct vm_operations_struct generic_file_vm_ops = { .page_mkwrite = filemap_page_mkwrite, }; +/** + * page_mkwrite_check_truncate - check if page was truncated + * @page: the page to check + * @inode: the inode to check the page against + * + * Returns the number of bytes in the page up to EOF, + * or -EFAULT if the page was truncated. + */ +int page_mkwrite_check_truncate(struct page *page, struct inode *inode) +{ + loff_t size = i_size_read(inode); + pgoff_t index = size >> PAGE_SHIFT; + int offset = offset_in_page(size); + + if (page->mapping != inode->i_mapping) + return -EFAULT; + + /* page is wholly inside EOF */ + if (page->index < index) + return PAGE_SIZE; + /* page is wholly past EOF */ + if (page->index > index || !offset) + return -EFAULT; + /* page is partially inside EOF */ + return offset; +} +EXPORT_SYMBOL(page_mkwrite_check_truncate); + /* This is used for a general mmap of a disk file */ int generic_file_mmap(struct file * file, struct vm_area_struct * vma)
Per review comments from Jan and Ted, un-inline page_mkwrite_check_truncate and move it to mm/filemap.c. This function doesn't seem worth inlining. Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com> Cc: Jan Kara <jack@suse.cz> Cc: Theodore Y. Ts'o <tytso@mit.edu> --- include/linux/pagemap.h | 28 +--------------------------- mm/filemap.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 27 deletions(-)