mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
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: merge fchmod() and fchmodat() guts, kill ancient broken kludge xfs: fix misspelled S_IS...() xfs: get rid of open-coded S_ISREG(), etc. vfs: document locking requirements for d_move, __d_move and d_materialise_unique omfs: fix (mode & S_IFDIR) abuse btrfs: S_ISREG(mode) is not mode & S_IFREG... ima: fmode_t misspelled as mode_t... pci-label.c: size_t misspelled as mode_t jffs2: S_ISLNK(mode & S_IFMT) is pointless snd_msnd ->mode is fmode_t, not mode_t v9fs_iop_get_acl: get rid of unused variable vfs: dont chain pipe/anon/socket on superblock s_inodes list Documentation: Exporting: update description of d_splice_alias fs: add missing unlock in default_llseek()
This commit is contained in:
commit
e371d46ae4
25 changed files with 133 additions and 120 deletions
39
fs/inode.c
39
fs/inode.c
|
@ -361,9 +361,11 @@ EXPORT_SYMBOL_GPL(inode_sb_list_add);
|
|||
|
||||
static inline void inode_sb_list_del(struct inode *inode)
|
||||
{
|
||||
spin_lock(&inode_sb_list_lock);
|
||||
list_del_init(&inode->i_sb_list);
|
||||
spin_unlock(&inode_sb_list_lock);
|
||||
if (!list_empty(&inode->i_sb_list)) {
|
||||
spin_lock(&inode_sb_list_lock);
|
||||
list_del_init(&inode->i_sb_list);
|
||||
spin_unlock(&inode_sb_list_lock);
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned long hash(struct super_block *sb, unsigned long hashval)
|
||||
|
@ -795,6 +797,29 @@ unsigned int get_next_ino(void)
|
|||
}
|
||||
EXPORT_SYMBOL(get_next_ino);
|
||||
|
||||
/**
|
||||
* new_inode_pseudo - obtain an inode
|
||||
* @sb: superblock
|
||||
*
|
||||
* Allocates a new inode for given superblock.
|
||||
* Inode wont be chained in superblock s_inodes list
|
||||
* This means :
|
||||
* - fs can't be unmount
|
||||
* - quotas, fsnotify, writeback can't work
|
||||
*/
|
||||
struct inode *new_inode_pseudo(struct super_block *sb)
|
||||
{
|
||||
struct inode *inode = alloc_inode(sb);
|
||||
|
||||
if (inode) {
|
||||
spin_lock(&inode->i_lock);
|
||||
inode->i_state = 0;
|
||||
spin_unlock(&inode->i_lock);
|
||||
INIT_LIST_HEAD(&inode->i_sb_list);
|
||||
}
|
||||
return inode;
|
||||
}
|
||||
|
||||
/**
|
||||
* new_inode - obtain an inode
|
||||
* @sb: superblock
|
||||
|
@ -813,13 +838,9 @@ struct inode *new_inode(struct super_block *sb)
|
|||
|
||||
spin_lock_prefetch(&inode_sb_list_lock);
|
||||
|
||||
inode = alloc_inode(sb);
|
||||
if (inode) {
|
||||
spin_lock(&inode->i_lock);
|
||||
inode->i_state = 0;
|
||||
spin_unlock(&inode->i_lock);
|
||||
inode = new_inode_pseudo(sb);
|
||||
if (inode)
|
||||
inode_sb_list_add(inode);
|
||||
}
|
||||
return inode;
|
||||
}
|
||||
EXPORT_SYMBOL(new_inode);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue