mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -04: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: (96 commits) no need for list_for_each_entry_safe()/resetting with superblock list Fix sget() race with failing mount vfs: don't hold s_umount over close_bdev_exclusive() call sysv: do not mark superblock dirty on remount sysv: do not mark superblock dirty on mount btrfs: remove junk sb_dirt change BFS: clean up the superblock usage AFFS: wait for sb synchronization when needed AFFS: clean up dirty flag usage cifs: truncate fallout mbcache: fix shrinker function return value mbcache: Remove unused features add f_flags to struct statfs(64) pass a struct path to vfs_statfs update VFS documentation for method changes. All filesystems that need invalidate_inode_buffers() are doing that explicitly convert remaining ->clear_inode() to ->evict_inode() Make ->drop_inode() just return whether inode needs to be dropped fs/inode.c:clear_inode() is gone fs/inode.c:evict() doesn't care about delete vs. non-delete paths now ... Fix up trivial conflicts in fs/nilfs2/super.c
This commit is contained in:
commit
5f248c9c25
205 changed files with 2584 additions and 2475 deletions
|
|
@ -643,11 +643,10 @@ static ssize_t ocfs2_direct_IO(int rw,
|
|||
if (i_size_read(inode) <= offset)
|
||||
return 0;
|
||||
|
||||
ret = blockdev_direct_IO_no_locking(rw, iocb, inode,
|
||||
inode->i_sb->s_bdev, iov, offset,
|
||||
nr_segs,
|
||||
ocfs2_direct_IO_get_blocks,
|
||||
ocfs2_dio_end_io);
|
||||
ret = __blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev,
|
||||
iov, offset, nr_segs,
|
||||
ocfs2_direct_IO_get_blocks,
|
||||
ocfs2_dio_end_io, NULL, 0);
|
||||
|
||||
mlog_exit(ret);
|
||||
return ret;
|
||||
|
|
|
|||
|
|
@ -213,10 +213,12 @@ static int dlmfs_file_setattr(struct dentry *dentry, struct iattr *attr)
|
|||
|
||||
attr->ia_valid &= ~ATTR_SIZE;
|
||||
error = inode_change_ok(inode, attr);
|
||||
if (!error)
|
||||
error = inode_setattr(inode, attr);
|
||||
if (error)
|
||||
return error;
|
||||
|
||||
return error;
|
||||
setattr_copy(inode, attr);
|
||||
mark_inode_dirty(inode);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned int dlmfs_file_poll(struct file *file, poll_table *wait)
|
||||
|
|
@ -354,13 +356,12 @@ static void dlmfs_destroy_inode(struct inode *inode)
|
|||
kmem_cache_free(dlmfs_inode_cache, DLMFS_I(inode));
|
||||
}
|
||||
|
||||
static void dlmfs_clear_inode(struct inode *inode)
|
||||
static void dlmfs_evict_inode(struct inode *inode)
|
||||
{
|
||||
int status;
|
||||
struct dlmfs_inode_private *ip;
|
||||
|
||||
if (!inode)
|
||||
return;
|
||||
end_writeback(inode);
|
||||
|
||||
mlog(0, "inode %lu\n", inode->i_ino);
|
||||
|
||||
|
|
@ -630,7 +631,7 @@ static const struct super_operations dlmfs_ops = {
|
|||
.statfs = simple_statfs,
|
||||
.alloc_inode = dlmfs_alloc_inode,
|
||||
.destroy_inode = dlmfs_destroy_inode,
|
||||
.clear_inode = dlmfs_clear_inode,
|
||||
.evict_inode = dlmfs_evict_inode,
|
||||
.drop_inode = generic_delete_inode,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -1233,18 +1233,26 @@ int ocfs2_setattr(struct dentry *dentry, struct iattr *attr)
|
|||
}
|
||||
|
||||
/*
|
||||
* This will intentionally not wind up calling simple_setsize(),
|
||||
* This will intentionally not wind up calling truncate_setsize(),
|
||||
* since all the work for a size change has been done above.
|
||||
* Otherwise, we could get into problems with truncate as
|
||||
* ip_alloc_sem is used there to protect against i_size
|
||||
* changes.
|
||||
*
|
||||
* XXX: this means the conditional below can probably be removed.
|
||||
*/
|
||||
status = inode_setattr(inode, attr);
|
||||
if (status < 0) {
|
||||
mlog_errno(status);
|
||||
goto bail_commit;
|
||||
if ((attr->ia_valid & ATTR_SIZE) &&
|
||||
attr->ia_size != i_size_read(inode)) {
|
||||
status = vmtruncate(inode, attr->ia_size);
|
||||
if (status) {
|
||||
mlog_errno(status);
|
||||
goto bail_commit;
|
||||
}
|
||||
}
|
||||
|
||||
setattr_copy(inode, attr);
|
||||
mark_inode_dirty(inode);
|
||||
|
||||
status = ocfs2_mark_inode_dirty(handle, inode, bh);
|
||||
if (status < 0)
|
||||
mlog_errno(status);
|
||||
|
|
@ -2300,12 +2308,12 @@ relock:
|
|||
* blocks outside i_size. Trim these off again.
|
||||
* Don't need i_size_read because we hold i_mutex.
|
||||
*
|
||||
* XXX(hch): this looks buggy because ocfs2 did not
|
||||
* XXX(truncate): this looks buggy because ocfs2 did not
|
||||
* actually implement ->truncate. Take a look at
|
||||
* the new truncate sequence and update this accordingly
|
||||
*/
|
||||
if (*ppos + count > inode->i_size)
|
||||
simple_setsize(inode, inode->i_size);
|
||||
truncate_setsize(inode, inode->i_size);
|
||||
ret = written;
|
||||
goto out_dio;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -969,7 +969,7 @@ static void ocfs2_cleanup_delete_inode(struct inode *inode,
|
|||
truncate_inode_pages(&inode->i_data, 0);
|
||||
}
|
||||
|
||||
void ocfs2_delete_inode(struct inode *inode)
|
||||
static void ocfs2_delete_inode(struct inode *inode)
|
||||
{
|
||||
int wipe, status;
|
||||
sigset_t oldset;
|
||||
|
|
@ -1075,20 +1075,17 @@ bail_unlock_nfs_sync:
|
|||
bail_unblock:
|
||||
ocfs2_unblock_signals(&oldset);
|
||||
bail:
|
||||
clear_inode(inode);
|
||||
mlog_exit_void();
|
||||
}
|
||||
|
||||
void ocfs2_clear_inode(struct inode *inode)
|
||||
static void ocfs2_clear_inode(struct inode *inode)
|
||||
{
|
||||
int status;
|
||||
struct ocfs2_inode_info *oi = OCFS2_I(inode);
|
||||
|
||||
mlog_entry_void();
|
||||
|
||||
if (!inode)
|
||||
goto bail;
|
||||
|
||||
end_writeback(inode);
|
||||
mlog(0, "Clearing inode: %llu, nlink = %u\n",
|
||||
(unsigned long long)OCFS2_I(inode)->ip_blkno, inode->i_nlink);
|
||||
|
||||
|
|
@ -1180,16 +1177,27 @@ void ocfs2_clear_inode(struct inode *inode)
|
|||
jbd2_journal_release_jbd_inode(OCFS2_SB(inode->i_sb)->journal->j_journal,
|
||||
&oi->ip_jinode);
|
||||
|
||||
bail:
|
||||
mlog_exit_void();
|
||||
}
|
||||
|
||||
void ocfs2_evict_inode(struct inode *inode)
|
||||
{
|
||||
if (!inode->i_nlink ||
|
||||
(OCFS2_I(inode)->ip_flags & OCFS2_INODE_MAYBE_ORPHANED)) {
|
||||
ocfs2_delete_inode(inode);
|
||||
} else {
|
||||
truncate_inode_pages(&inode->i_data, 0);
|
||||
}
|
||||
ocfs2_clear_inode(inode);
|
||||
}
|
||||
|
||||
/* Called under inode_lock, with no more references on the
|
||||
* struct inode, so it's safe here to check the flags field
|
||||
* and to manipulate i_nlink without any other locks. */
|
||||
void ocfs2_drop_inode(struct inode *inode)
|
||||
int ocfs2_drop_inode(struct inode *inode)
|
||||
{
|
||||
struct ocfs2_inode_info *oi = OCFS2_I(inode);
|
||||
int res;
|
||||
|
||||
mlog_entry_void();
|
||||
|
||||
|
|
@ -1197,11 +1205,12 @@ void ocfs2_drop_inode(struct inode *inode)
|
|||
(unsigned long long)oi->ip_blkno, inode->i_nlink, oi->ip_flags);
|
||||
|
||||
if (oi->ip_flags & OCFS2_INODE_MAYBE_ORPHANED)
|
||||
generic_delete_inode(inode);
|
||||
res = 1;
|
||||
else
|
||||
generic_drop_inode(inode);
|
||||
res = generic_drop_inode(inode);
|
||||
|
||||
mlog_exit_void();
|
||||
return res;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -123,9 +123,8 @@ static inline struct ocfs2_caching_info *INODE_CACHE(struct inode *inode)
|
|||
return &OCFS2_I(inode)->ip_metadata_cache;
|
||||
}
|
||||
|
||||
void ocfs2_clear_inode(struct inode *inode);
|
||||
void ocfs2_delete_inode(struct inode *inode);
|
||||
void ocfs2_drop_inode(struct inode *inode);
|
||||
void ocfs2_evict_inode(struct inode *inode);
|
||||
int ocfs2_drop_inode(struct inode *inode);
|
||||
|
||||
/* Flags for ocfs2_iget() */
|
||||
#define OCFS2_FI_FLAG_SYSFILE 0x1
|
||||
|
|
|
|||
|
|
@ -145,8 +145,7 @@ static const struct super_operations ocfs2_sops = {
|
|||
.alloc_inode = ocfs2_alloc_inode,
|
||||
.destroy_inode = ocfs2_destroy_inode,
|
||||
.drop_inode = ocfs2_drop_inode,
|
||||
.clear_inode = ocfs2_clear_inode,
|
||||
.delete_inode = ocfs2_delete_inode,
|
||||
.evict_inode = ocfs2_evict_inode,
|
||||
.sync_fs = ocfs2_sync_fs,
|
||||
.put_super = ocfs2_put_super,
|
||||
.remount_fs = ocfs2_remount,
|
||||
|
|
|
|||
Loading…
Reference in a new issue