git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' into for-2.6.39
[pandora-kernel.git]
/
fs
/
ext4
/
super.c
diff --git
a/fs/ext4/super.c
b/fs/ext4/super.c
index
4898cb1
..
c1d0f59
100644
(file)
--- a/
fs/ext4/super.c
+++ b/
fs/ext4/super.c
@@
-833,6
+833,7
@@
static struct inode *ext4_alloc_inode(struct super_block *sb)
ei->i_sync_tid = 0;
ei->i_datasync_tid = 0;
atomic_set(&ei->i_ioend_count, 0);
ei->i_sync_tid = 0;
ei->i_datasync_tid = 0;
atomic_set(&ei->i_ioend_count, 0);
+ atomic_set(&ei->i_aiodio_unwritten, 0);
return &ei->vfs_inode;
}
return &ei->vfs_inode;
}
@@
-3508,7
+3509,12
@@
static int ext4_fill_super(struct super_block *sb, void *data, int silent)
percpu_counter_set(&sbi->s_dirtyblocks_counter, 0);
no_journal:
percpu_counter_set(&sbi->s_dirtyblocks_counter, 0);
no_journal:
- EXT4_SB(sb)->dio_unwritten_wq = create_workqueue("ext4-dio-unwritten");
+ /*
+ * The maximum number of concurrent works can be high and
+ * concurrency isn't really necessary. Limit it to 1.
+ */
+ EXT4_SB(sb)->dio_unwritten_wq =
+ alloc_workqueue("ext4-dio-unwritten", WQ_MEM_RECLAIM, 1);
if (!EXT4_SB(sb)->dio_unwritten_wq) {
printk(KERN_ERR "EXT4-fs: failed to create DIO workqueue\n");
goto failed_mount_wq;
if (!EXT4_SB(sb)->dio_unwritten_wq) {
printk(KERN_ERR "EXT4-fs: failed to create DIO workqueue\n");
goto failed_mount_wq;
@@
-4800,23
+4806,37
@@
static void ext4_exit_feat_adverts(void)
kfree(ext4_feat);
}
kfree(ext4_feat);
}
+/* Shared across all ext4 file systems */
+wait_queue_head_t ext4__ioend_wq[EXT4_WQ_HASH_SZ];
+struct mutex ext4__aio_mutex[EXT4_WQ_HASH_SZ];
+
static int __init ext4_init_fs(void)
{
static int __init ext4_init_fs(void)
{
- int err;
+ int
i,
err;
ext4_check_flag_values();
ext4_check_flag_values();
+
+ for (i = 0; i < EXT4_WQ_HASH_SZ; i++) {
+ mutex_init(&ext4__aio_mutex[i]);
+ init_waitqueue_head(&ext4__ioend_wq[i]);
+ }
+
err = ext4_init_pageio();
if (err)
return err;
err = ext4_init_system_zone();
if (err)
err = ext4_init_pageio();
if (err)
return err;
err = ext4_init_system_zone();
if (err)
- goto out
5
;
+ goto out
7
;
ext4_kset = kset_create_and_add("ext4", NULL, fs_kobj);
if (!ext4_kset)
ext4_kset = kset_create_and_add("ext4", NULL, fs_kobj);
if (!ext4_kset)
- goto out
4
;
+ goto out
6
;
ext4_proc_root = proc_mkdir("fs/ext4", NULL);
ext4_proc_root = proc_mkdir("fs/ext4", NULL);
+ if (!ext4_proc_root)
+ goto out5;
err = ext4_init_feat_adverts();
err = ext4_init_feat_adverts();
+ if (err)
+ goto out4;
err = ext4_init_mballoc();
if (err)
err = ext4_init_mballoc();
if (err)
@@
-4847,11
+4867,13
@@
out2:
ext4_exit_mballoc();
out3:
ext4_exit_feat_adverts();
ext4_exit_mballoc();
out3:
ext4_exit_feat_adverts();
+out4:
remove_proc_entry("fs/ext4", NULL);
remove_proc_entry("fs/ext4", NULL);
+out5:
kset_unregister(ext4_kset);
kset_unregister(ext4_kset);
-out
4
:
+out
6
:
ext4_exit_system_zone();
ext4_exit_system_zone();
-out
5
:
+out
7
:
ext4_exit_pageio();
return err;
}
ext4_exit_pageio();
return err;
}