forked from luck/tmp_suning_uos_patched
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4: [PATCH] ext4: retry failed direct IO allocations ext4: Fix build warning in ext4_dirty_inode() ext4: drop ext4dev compat ext4: fix a BUG_ON crash by checking that page has buffers attached to it
This commit is contained in:
commit
9117703fab
|
@ -26,20 +26,6 @@ config EXT4_FS
|
|||
|
||||
If unsure, say N.
|
||||
|
||||
config EXT4DEV_COMPAT
|
||||
bool "Enable ext4dev compatibility"
|
||||
depends on EXT4_FS
|
||||
help
|
||||
Starting with 2.6.28, the name of the ext4 filesystem was
|
||||
renamed from ext4dev to ext4. Unfortunately there are some
|
||||
legacy userspace programs (such as klibc's fstype) have
|
||||
"ext4dev" hardcoded.
|
||||
|
||||
To enable backwards compatibility so that systems that are
|
||||
still expecting to mount ext4 filesystems using ext4dev,
|
||||
choose Y here. This feature will go away by 2.6.31, so
|
||||
please arrange to get your userspace programs fixed!
|
||||
|
||||
config EXT4_FS_XATTR
|
||||
bool "Ext4 extended attributes"
|
||||
depends on EXT4_FS
|
||||
|
|
|
@ -1146,8 +1146,8 @@ static int check_block_validity(struct inode *inode, const char *msg,
|
|||
}
|
||||
|
||||
/*
|
||||
* Return the number of dirty pages in the given inode starting at
|
||||
* page frame idx.
|
||||
* Return the number of contiguous dirty pages in a given inode
|
||||
* starting at page frame idx.
|
||||
*/
|
||||
static pgoff_t ext4_num_dirty_pages(struct inode *inode, pgoff_t idx,
|
||||
unsigned int max_pages)
|
||||
|
@ -1181,15 +1181,15 @@ static pgoff_t ext4_num_dirty_pages(struct inode *inode, pgoff_t idx,
|
|||
unlock_page(page);
|
||||
break;
|
||||
}
|
||||
head = page_buffers(page);
|
||||
bh = head;
|
||||
do {
|
||||
if (!buffer_delay(bh) &&
|
||||
!buffer_unwritten(bh)) {
|
||||
done = 1;
|
||||
break;
|
||||
}
|
||||
} while ((bh = bh->b_this_page) != head);
|
||||
if (page_has_buffers(page)) {
|
||||
bh = head = page_buffers(page);
|
||||
do {
|
||||
if (!buffer_delay(bh) &&
|
||||
!buffer_unwritten(bh))
|
||||
done = 1;
|
||||
bh = bh->b_this_page;
|
||||
} while (!done && (bh != head));
|
||||
}
|
||||
unlock_page(page);
|
||||
if (done)
|
||||
break;
|
||||
|
@ -3378,6 +3378,7 @@ static ssize_t ext4_ind_direct_IO(int rw, struct kiocb *iocb,
|
|||
ssize_t ret;
|
||||
int orphan = 0;
|
||||
size_t count = iov_length(iov, nr_segs);
|
||||
int retries = 0;
|
||||
|
||||
if (rw == WRITE) {
|
||||
loff_t final_size = offset + count;
|
||||
|
@ -3400,9 +3401,12 @@ static ssize_t ext4_ind_direct_IO(int rw, struct kiocb *iocb,
|
|||
}
|
||||
}
|
||||
|
||||
retry:
|
||||
ret = blockdev_direct_IO(rw, iocb, inode, inode->i_sb->s_bdev, iov,
|
||||
offset, nr_segs,
|
||||
ext4_get_block, NULL);
|
||||
if (ret == -ENOSPC && ext4_should_retry_alloc(inode->i_sb, &retries))
|
||||
goto retry;
|
||||
|
||||
if (orphan) {
|
||||
int err;
|
||||
|
@ -5612,14 +5616,12 @@ int ext4_mark_inode_dirty(handle_t *handle, struct inode *inode)
|
|||
*/
|
||||
void ext4_dirty_inode(struct inode *inode)
|
||||
{
|
||||
handle_t *current_handle = ext4_journal_current_handle();
|
||||
handle_t *handle;
|
||||
|
||||
handle = ext4_journal_start(inode, 2);
|
||||
if (IS_ERR(handle))
|
||||
goto out;
|
||||
|
||||
jbd_debug(5, "marking dirty. outer handle=%p\n", current_handle);
|
||||
ext4_mark_inode_dirty(handle, inode);
|
||||
|
||||
ext4_journal_stop(handle);
|
||||
|
|
|
@ -3966,27 +3966,6 @@ static struct file_system_type ext4_fs_type = {
|
|||
.fs_flags = FS_REQUIRES_DEV,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_EXT4DEV_COMPAT
|
||||
static int ext4dev_get_sb(struct file_system_type *fs_type, int flags,
|
||||
const char *dev_name, void *data,struct vfsmount *mnt)
|
||||
{
|
||||
printk(KERN_WARNING "EXT4-fs (%s): Update your userspace programs "
|
||||
"to mount using ext4\n", dev_name);
|
||||
printk(KERN_WARNING "EXT4-fs (%s): ext4dev backwards compatibility "
|
||||
"will go away by 2.6.31\n", dev_name);
|
||||
return get_sb_bdev(fs_type, flags, dev_name, data, ext4_fill_super,mnt);
|
||||
}
|
||||
|
||||
static struct file_system_type ext4dev_fs_type = {
|
||||
.owner = THIS_MODULE,
|
||||
.name = "ext4dev",
|
||||
.get_sb = ext4dev_get_sb,
|
||||
.kill_sb = kill_block_super,
|
||||
.fs_flags = FS_REQUIRES_DEV,
|
||||
};
|
||||
MODULE_ALIAS("ext4dev");
|
||||
#endif
|
||||
|
||||
static int __init init_ext4_fs(void)
|
||||
{
|
||||
int err;
|
||||
|
@ -4011,13 +3990,6 @@ static int __init init_ext4_fs(void)
|
|||
err = register_filesystem(&ext4_fs_type);
|
||||
if (err)
|
||||
goto out;
|
||||
#ifdef CONFIG_EXT4DEV_COMPAT
|
||||
err = register_filesystem(&ext4dev_fs_type);
|
||||
if (err) {
|
||||
unregister_filesystem(&ext4_fs_type);
|
||||
goto out;
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
out:
|
||||
destroy_inodecache();
|
||||
|
@ -4036,9 +4008,6 @@ static int __init init_ext4_fs(void)
|
|||
static void __exit exit_ext4_fs(void)
|
||||
{
|
||||
unregister_filesystem(&ext4_fs_type);
|
||||
#ifdef CONFIG_EXT4DEV_COMPAT
|
||||
unregister_filesystem(&ext4dev_fs_type);
|
||||
#endif
|
||||
destroy_inodecache();
|
||||
exit_ext4_xattr();
|
||||
exit_ext4_mballoc();
|
||||
|
|
Loading…
Reference in New Issue
Block a user