mirror of
https://github.com/followmsi/android_kernel_google_msm.git
synced 2024-11-06 23:17:41 +00:00
mm/fs: remove truncate_range
Remove vmtruncate_range(), and remove the truncate_range method from struct inode_operations: only tmpfs ever supported it, and tmpfs has now converted over to using the fallocate method of file_operations. Update Documentation accordingly, adding (setlease and) fallocate lines. And while we're in mm.h, remove duplicate declarations of shmem_lock() and shmem_file_setup(): everyone is now using the ones in shmem_fs.h. Change-Id: I1452e3356333d19b778ef60d6cf7625c31b77bf8 Based-on-patch-by: Cong Wang <amwang@redhat.com> Signed-off-by: Hugh Dickins <hughd@google.com> Cc: Christoph Hellwig <hch@infradead.org> Cc: Cong Wang <amwang@redhat.com> Cc: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
1c7bcfb043
commit
1a139cbc38
7 changed files with 8 additions and 39 deletions
|
@ -59,7 +59,6 @@ prototypes:
|
||||||
ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
|
ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
|
||||||
ssize_t (*listxattr) (struct dentry *, char *, size_t);
|
ssize_t (*listxattr) (struct dentry *, char *, size_t);
|
||||||
int (*removexattr) (struct dentry *, const char *);
|
int (*removexattr) (struct dentry *, const char *);
|
||||||
void (*truncate_range)(struct inode *, loff_t, loff_t);
|
|
||||||
int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len);
|
int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len);
|
||||||
void (*update_time)(struct inode *, struct timespec *, int);
|
void (*update_time)(struct inode *, struct timespec *, int);
|
||||||
int (*atomic_open)(struct inode *, struct dentry *,
|
int (*atomic_open)(struct inode *, struct dentry *,
|
||||||
|
@ -91,7 +90,6 @@ setxattr: yes
|
||||||
getxattr: no
|
getxattr: no
|
||||||
listxattr: no
|
listxattr: no
|
||||||
removexattr: yes
|
removexattr: yes
|
||||||
truncate_range: yes
|
|
||||||
fiemap: no
|
fiemap: no
|
||||||
update_time: no
|
update_time: no
|
||||||
atomic_open: yes
|
atomic_open: yes
|
||||||
|
|
|
@ -363,7 +363,6 @@ struct inode_operations {
|
||||||
ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
|
ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
|
||||||
ssize_t (*listxattr) (struct dentry *, char *, size_t);
|
ssize_t (*listxattr) (struct dentry *, char *, size_t);
|
||||||
int (*removexattr) (struct dentry *, const char *);
|
int (*removexattr) (struct dentry *, const char *);
|
||||||
void (*truncate_range)(struct inode *, loff_t, loff_t);
|
|
||||||
void (*update_time)(struct inode *, struct timespec *, int);
|
void (*update_time)(struct inode *, struct timespec *, int);
|
||||||
int (*atomic_open)(struct inode *, struct dentry *, struct file *,
|
int (*atomic_open)(struct inode *, struct dentry *, struct file *,
|
||||||
unsigned open_flag, umode_t create_mode, int *opened);
|
unsigned open_flag, umode_t create_mode, int *opened);
|
||||||
|
@ -476,9 +475,6 @@ otherwise noted.
|
||||||
removexattr: called by the VFS to remove an extended attribute from
|
removexattr: called by the VFS to remove an extended attribute from
|
||||||
a file. This method is called by removexattr(2) system call.
|
a file. This method is called by removexattr(2) system call.
|
||||||
|
|
||||||
truncate_range: a method provided by the underlying filesystem to truncate a
|
|
||||||
range of blocks , i.e. punch a hole somewhere in a file.
|
|
||||||
|
|
||||||
update_time: called by the VFS to update a specific time or the i_version of
|
update_time: called by the VFS to update a specific time or the i_version of
|
||||||
an inode. If this is not defined the VFS will update the inode itself
|
an inode. If this is not defined the VFS will update the inode itself
|
||||||
and call mark_inode_dirty_sync.
|
and call mark_inode_dirty_sync.
|
||||||
|
@ -780,7 +776,7 @@ struct file_operations
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
This describes how the VFS can manipulate an open file. As of kernel
|
This describes how the VFS can manipulate an open file. As of kernel
|
||||||
2.6.22, the following members are defined:
|
3.5, the following members are defined:
|
||||||
|
|
||||||
struct file_operations {
|
struct file_operations {
|
||||||
struct module *owner;
|
struct module *owner;
|
||||||
|
@ -810,6 +806,8 @@ struct file_operations {
|
||||||
int (*flock) (struct file *, int, struct file_lock *);
|
int (*flock) (struct file *, int, struct file_lock *);
|
||||||
ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, size_t, unsigned int);
|
ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, size_t, unsigned int);
|
||||||
ssize_t (*splice_read)(struct file *, struct pipe_inode_info *, size_t, unsigned int);
|
ssize_t (*splice_read)(struct file *, struct pipe_inode_info *, size_t, unsigned int);
|
||||||
|
int (*setlease)(struct file *, long arg, struct file_lock **);
|
||||||
|
long (*fallocate)(struct file *, int mode, loff_t offset, loff_t len);
|
||||||
};
|
};
|
||||||
|
|
||||||
Again, all methods are called without any locks being held, unless
|
Again, all methods are called without any locks being held, unless
|
||||||
|
@ -878,6 +876,11 @@ otherwise noted.
|
||||||
splice_read: called by the VFS to splice data from file to a pipe. This
|
splice_read: called by the VFS to splice data from file to a pipe. This
|
||||||
method is used by the splice(2) system call
|
method is used by the splice(2) system call
|
||||||
|
|
||||||
|
setlease: called by the VFS to set or release a file lock lease.
|
||||||
|
setlease has the file_lock_lock held and must not sleep.
|
||||||
|
|
||||||
|
fallocate: called by the VFS to preallocate blocks or punch a hole.
|
||||||
|
|
||||||
Note that the file operations are implemented by the specific
|
Note that the file operations are implemented by the specific
|
||||||
filesystem in which the inode resides. When opening a device node
|
filesystem in which the inode resides. When opening a device node
|
||||||
(character or block special) most filesystems will call special
|
(character or block special) most filesystems will call special
|
||||||
|
|
|
@ -292,7 +292,6 @@ static const struct inode_operations bad_inode_ops =
|
||||||
.getxattr = bad_inode_getxattr,
|
.getxattr = bad_inode_getxattr,
|
||||||
.listxattr = bad_inode_listxattr,
|
.listxattr = bad_inode_listxattr,
|
||||||
.removexattr = bad_inode_removexattr,
|
.removexattr = bad_inode_removexattr,
|
||||||
/* truncate_range returns void */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1709,7 +1709,6 @@ struct inode_operations {
|
||||||
ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
|
ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
|
||||||
ssize_t (*listxattr) (struct dentry *, char *, size_t);
|
ssize_t (*listxattr) (struct dentry *, char *, size_t);
|
||||||
int (*removexattr) (struct dentry *, const char *);
|
int (*removexattr) (struct dentry *, const char *);
|
||||||
void (*truncate_range)(struct inode *, loff_t, loff_t);
|
|
||||||
int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
|
int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
|
||||||
u64 len);
|
u64 len);
|
||||||
int (*update_time)(struct inode *, struct timespec *, int);
|
int (*update_time)(struct inode *, struct timespec *, int);
|
||||||
|
|
|
@ -879,8 +879,6 @@ extern void pagefault_out_of_memory(void);
|
||||||
extern void show_free_areas(unsigned int flags);
|
extern void show_free_areas(unsigned int flags);
|
||||||
extern bool skip_free_areas_node(unsigned int flags, int nid);
|
extern bool skip_free_areas_node(unsigned int flags, int nid);
|
||||||
|
|
||||||
int shmem_lock(struct file *file, int lock, struct user_struct *user);
|
|
||||||
struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags);
|
|
||||||
void shmem_set_file(struct vm_area_struct *vma, struct file *file);
|
void shmem_set_file(struct vm_area_struct *vma, struct file *file);
|
||||||
int shmem_zero_setup(struct vm_area_struct *);
|
int shmem_zero_setup(struct vm_area_struct *);
|
||||||
|
|
||||||
|
@ -963,11 +961,9 @@ extern void truncate_pagecache(struct inode *inode, loff_t old, loff_t new);
|
||||||
extern void truncate_setsize(struct inode *inode, loff_t newsize);
|
extern void truncate_setsize(struct inode *inode, loff_t newsize);
|
||||||
void pagecache_isize_extended(struct inode *inode, loff_t from, loff_t to);
|
void pagecache_isize_extended(struct inode *inode, loff_t from, loff_t to);
|
||||||
extern int vmtruncate(struct inode *inode, loff_t offset);
|
extern int vmtruncate(struct inode *inode, loff_t offset);
|
||||||
extern int vmtruncate_range(struct inode *inode, loff_t offset, loff_t end);
|
|
||||||
void truncate_pagecache_range(struct inode *inode, loff_t offset, loff_t end);
|
void truncate_pagecache_range(struct inode *inode, loff_t offset, loff_t end);
|
||||||
int truncate_inode_page(struct address_space *mapping, struct page *page);
|
int truncate_inode_page(struct address_space *mapping, struct page *page);
|
||||||
int generic_error_remove_page(struct address_space *mapping, struct page *page);
|
int generic_error_remove_page(struct address_space *mapping, struct page *page);
|
||||||
|
|
||||||
int invalidate_inode_page(struct page *page);
|
int invalidate_inode_page(struct page *page);
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
|
|
|
@ -2649,7 +2649,6 @@ static const struct file_operations shmem_file_operations = {
|
||||||
|
|
||||||
static const struct inode_operations shmem_inode_operations = {
|
static const struct inode_operations shmem_inode_operations = {
|
||||||
.setattr = shmem_setattr,
|
.setattr = shmem_setattr,
|
||||||
.truncate_range = shmem_truncate_range,
|
|
||||||
#ifdef CONFIG_TMPFS_XATTR
|
#ifdef CONFIG_TMPFS_XATTR
|
||||||
.setxattr = shmem_setxattr,
|
.setxattr = shmem_setxattr,
|
||||||
.getxattr = shmem_getxattr,
|
.getxattr = shmem_getxattr,
|
||||||
|
|
|
@ -658,31 +658,6 @@ int vmtruncate(struct inode *inode, loff_t newsize)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(vmtruncate);
|
EXPORT_SYMBOL(vmtruncate);
|
||||||
|
|
||||||
int vmtruncate_range(struct inode *inode, loff_t lstart, loff_t lend)
|
|
||||||
{
|
|
||||||
struct address_space *mapping = inode->i_mapping;
|
|
||||||
loff_t holebegin = round_up(lstart, PAGE_SIZE);
|
|
||||||
loff_t holelen = 1 + lend - holebegin;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If the underlying filesystem is not going to provide
|
|
||||||
* a way to truncate a range of blocks (punch a hole) -
|
|
||||||
* we should return failure right now.
|
|
||||||
*/
|
|
||||||
if (!inode->i_op->truncate_range)
|
|
||||||
return -ENOSYS;
|
|
||||||
|
|
||||||
mutex_lock(&inode->i_mutex);
|
|
||||||
inode_dio_wait(inode);
|
|
||||||
unmap_mapping_range(mapping, holebegin, holelen, 1);
|
|
||||||
inode->i_op->truncate_range(inode, lstart, lend);
|
|
||||||
/* unmap again to remove racily COWed private pages */
|
|
||||||
unmap_mapping_range(mapping, holebegin, holelen, 1);
|
|
||||||
mutex_unlock(&inode->i_mutex);
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* truncate_pagecache_range - unmap and remove pagecache that is hole-punched
|
* truncate_pagecache_range - unmap and remove pagecache that is hole-punched
|
||||||
* @inode: inode
|
* @inode: inode
|
||||||
|
|
Loading…
Reference in a new issue