diff options
Diffstat (limited to 'include/linux/fs.h')
-rw-r--r-- | include/linux/fs.h | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/include/linux/fs.h b/include/linux/fs.h index 34406ed467c3..2fe6e3f900ba 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h | |||
@@ -623,6 +623,9 @@ enum inode_i_mutex_lock_class | |||
623 | I_MUTEX_QUOTA | 623 | I_MUTEX_QUOTA |
624 | }; | 624 | }; |
625 | 625 | ||
626 | extern void inode_double_lock(struct inode *inode1, struct inode *inode2); | ||
627 | extern void inode_double_unlock(struct inode *inode1, struct inode *inode2); | ||
628 | |||
626 | /* | 629 | /* |
627 | * NOTE: in a 32bit arch with a preemptable kernel and | 630 | * NOTE: in a 32bit arch with a preemptable kernel and |
628 | * an UP compile the i_size_read/write must be atomic | 631 | * an UP compile the i_size_read/write must be atomic |
@@ -656,7 +659,11 @@ static inline loff_t i_size_read(struct inode *inode) | |||
656 | #endif | 659 | #endif |
657 | } | 660 | } |
658 | 661 | ||
659 | 662 | /* | |
663 | * NOTE: unlike i_size_read(), i_size_write() does need locking around it | ||
664 | * (normally i_mutex), otherwise on 32bit/SMP an update of i_size_seqcount | ||
665 | * can be lost, resulting in subsequent i_size_read() calls spinning forever. | ||
666 | */ | ||
660 | static inline void i_size_write(struct inode *inode, loff_t i_size) | 667 | static inline void i_size_write(struct inode *inode, loff_t i_size) |
661 | { | 668 | { |
662 | #if BITS_PER_LONG==32 && defined(CONFIG_SMP) | 669 | #if BITS_PER_LONG==32 && defined(CONFIG_SMP) |
@@ -1705,6 +1712,8 @@ extern void __iget(struct inode * inode); | |||
1705 | extern void clear_inode(struct inode *); | 1712 | extern void clear_inode(struct inode *); |
1706 | extern void destroy_inode(struct inode *); | 1713 | extern void destroy_inode(struct inode *); |
1707 | extern struct inode *new_inode(struct super_block *); | 1714 | extern struct inode *new_inode(struct super_block *); |
1715 | extern int __remove_suid(struct dentry *, int); | ||
1716 | extern int should_remove_suid(struct dentry *); | ||
1708 | extern int remove_suid(struct dentry *); | 1717 | extern int remove_suid(struct dentry *); |
1709 | extern void remove_dquot_ref(struct super_block *, int, struct list_head *); | 1718 | extern void remove_dquot_ref(struct super_block *, int, struct list_head *); |
1710 | 1719 | ||
@@ -1751,6 +1760,8 @@ extern ssize_t generic_file_splice_read(struct file *, loff_t *, | |||
1751 | struct pipe_inode_info *, size_t, unsigned int); | 1760 | struct pipe_inode_info *, size_t, unsigned int); |
1752 | extern ssize_t generic_file_splice_write(struct pipe_inode_info *, | 1761 | extern ssize_t generic_file_splice_write(struct pipe_inode_info *, |
1753 | struct file *, loff_t *, size_t, unsigned int); | 1762 | struct file *, loff_t *, size_t, unsigned int); |
1763 | extern ssize_t generic_file_splice_write_nolock(struct pipe_inode_info *, | ||
1764 | struct file *, loff_t *, size_t, unsigned int); | ||
1754 | extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe, | 1765 | extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe, |
1755 | struct file *out, loff_t *, size_t len, unsigned int flags); | 1766 | struct file *out, loff_t *, size_t len, unsigned int flags); |
1756 | extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out, | 1767 | extern long do_splice_direct(struct file *in, loff_t *ppos, struct file *out, |