Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs-2.6: (52 commits) split invalidate_inodes() fs: skip I_FREEING inodes in writeback_sb_inodes fs: fold invalidate_list into invalidate_inodes fs: do not drop inode_lock in dispose_list fs: inode split IO and LRU lists fs: switch bdev inode bdi's correctly fs: fix buffer invalidation in invalidate_list fsnotify: use dget_parent smbfs: use dget_parent exportfs: use dget_parent fs: use RCU read side protection in d_validate fs: clean up dentry lru modification fs: split __shrink_dcache_sb fs: improve DCACHE_REFERENCED usage fs: use percpu counter for nr_dentry and nr_dentry_unused fs: simplify __d_free fs: take dcache_lock inside __d_path fs: do not assign default i_ino in new_inode fs: introduce a per-cpu last_ino allocator new helper: ihold() ...
This commit is contained in:
commit
426e1f5cec
118 changed files with 863 additions and 701 deletions
|
@ -92,6 +92,9 @@ struct inodes_stat_t {
|
|||
/* Expect random access pattern */
|
||||
#define FMODE_RANDOM ((__force fmode_t)0x1000)
|
||||
|
||||
/* File is huge (eg. /dev/kmem): treat loff_t as unsigned */
|
||||
#define FMODE_UNSIGNED_OFFSET ((__force fmode_t)0x2000)
|
||||
|
||||
/* File was opened by fanotify and shouldn't generate fanotify events */
|
||||
#define FMODE_NONOTIFY ((__force fmode_t)0x1000000)
|
||||
|
||||
|
@ -722,7 +725,8 @@ struct posix_acl;
|
|||
|
||||
struct inode {
|
||||
struct hlist_node i_hash;
|
||||
struct list_head i_list; /* backing dev IO list */
|
||||
struct list_head i_wb_list; /* backing dev IO list */
|
||||
struct list_head i_lru; /* inode LRU list */
|
||||
struct list_head i_sb_list;
|
||||
struct list_head i_dentry;
|
||||
unsigned long i_ino;
|
||||
|
@ -789,6 +793,11 @@ struct inode {
|
|||
void *i_private; /* fs or device private pointer */
|
||||
};
|
||||
|
||||
static inline int inode_unhashed(struct inode *inode)
|
||||
{
|
||||
return hlist_unhashed(&inode->i_hash);
|
||||
}
|
||||
|
||||
/*
|
||||
* inode->i_mutex nesting subclasses for the lock validator:
|
||||
*
|
||||
|
@ -1639,16 +1648,17 @@ struct super_operations {
|
|||
*
|
||||
* Q: What is the difference between I_WILL_FREE and I_FREEING?
|
||||
*/
|
||||
#define I_DIRTY_SYNC 1
|
||||
#define I_DIRTY_DATASYNC 2
|
||||
#define I_DIRTY_PAGES 4
|
||||
#define I_DIRTY_SYNC (1 << 0)
|
||||
#define I_DIRTY_DATASYNC (1 << 1)
|
||||
#define I_DIRTY_PAGES (1 << 2)
|
||||
#define __I_NEW 3
|
||||
#define I_NEW (1 << __I_NEW)
|
||||
#define I_WILL_FREE 16
|
||||
#define I_FREEING 32
|
||||
#define I_CLEAR 64
|
||||
#define I_WILL_FREE (1 << 4)
|
||||
#define I_FREEING (1 << 5)
|
||||
#define I_CLEAR (1 << 6)
|
||||
#define __I_SYNC 7
|
||||
#define I_SYNC (1 << __I_SYNC)
|
||||
#define I_REFERENCED (1 << 8)
|
||||
|
||||
#define I_DIRTY (I_DIRTY_SYNC | I_DIRTY_DATASYNC | I_DIRTY_PAGES)
|
||||
|
||||
|
@ -1740,6 +1750,7 @@ static inline void file_accessed(struct file *file)
|
|||
}
|
||||
|
||||
int sync_inode(struct inode *inode, struct writeback_control *wbc);
|
||||
int sync_inode_metadata(struct inode *inode, int wait);
|
||||
|
||||
struct file_system_type {
|
||||
const char *name;
|
||||
|
@ -2084,7 +2095,6 @@ extern int check_disk_change(struct block_device *);
|
|||
extern int __invalidate_device(struct block_device *);
|
||||
extern int invalidate_partition(struct gendisk *, int);
|
||||
#endif
|
||||
extern int invalidate_inodes(struct super_block *);
|
||||
unsigned long invalidate_mapping_pages(struct address_space *mapping,
|
||||
pgoff_t start, pgoff_t end);
|
||||
|
||||
|
@ -2168,7 +2178,7 @@ extern loff_t vfs_llseek(struct file *file, loff_t offset, int origin);
|
|||
|
||||
extern int inode_init_always(struct super_block *, struct inode *);
|
||||
extern void inode_init_once(struct inode *);
|
||||
extern void inode_add_to_lists(struct super_block *, struct inode *);
|
||||
extern void ihold(struct inode * inode);
|
||||
extern void iput(struct inode *);
|
||||
extern struct inode * igrab(struct inode *);
|
||||
extern ino_t iunique(struct super_block *, ino_t);
|
||||
|
@ -2188,11 +2198,11 @@ extern struct inode * iget_locked(struct super_block *, unsigned long);
|
|||
extern int insert_inode_locked4(struct inode *, unsigned long, int (*test)(struct inode *, void *), void *);
|
||||
extern int insert_inode_locked(struct inode *);
|
||||
extern void unlock_new_inode(struct inode *);
|
||||
extern unsigned int get_next_ino(void);
|
||||
|
||||
extern void __iget(struct inode * inode);
|
||||
extern void iget_failed(struct inode *);
|
||||
extern void end_writeback(struct inode *);
|
||||
extern void destroy_inode(struct inode *);
|
||||
extern void __destroy_inode(struct inode *);
|
||||
extern struct inode *new_inode(struct super_block *);
|
||||
extern int should_remove_suid(struct dentry *);
|
||||
|
@ -2200,9 +2210,11 @@ extern int file_remove_suid(struct file *);
|
|||
|
||||
extern void __insert_inode_hash(struct inode *, unsigned long hashval);
|
||||
extern void remove_inode_hash(struct inode *);
|
||||
static inline void insert_inode_hash(struct inode *inode) {
|
||||
static inline void insert_inode_hash(struct inode *inode)
|
||||
{
|
||||
__insert_inode_hash(inode, inode->i_ino);
|
||||
}
|
||||
extern void inode_sb_list_add(struct inode *inode);
|
||||
|
||||
#ifdef CONFIG_BLOCK
|
||||
extern void submit_bio(int, struct bio *);
|
||||
|
@ -2485,7 +2497,10 @@ ssize_t simple_attr_write(struct file *file, const char __user *buf,
|
|||
struct ctl_table;
|
||||
int proc_nr_files(struct ctl_table *table, int write,
|
||||
void __user *buffer, size_t *lenp, loff_t *ppos);
|
||||
|
||||
int proc_nr_dentry(struct ctl_table *table, int write,
|
||||
void __user *buffer, size_t *lenp, loff_t *ppos);
|
||||
int proc_nr_inodes(struct ctl_table *table, int write,
|
||||
void __user *buffer, size_t *lenp, loff_t *ppos);
|
||||
int __init get_filesystem_list(char *buf);
|
||||
|
||||
#define ACC_MODE(x) ("\004\002\006\006"[(x)&O_ACCMODE])
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue