diff options
author | Jens Axboe <jens.axboe@oracle.com> | 2009-04-08 13:44:08 +0200 |
---|---|---|
committer | Jens Axboe <jens.axboe@oracle.com> | 2009-04-15 08:28:12 +0200 |
commit | 053c525fcf976810f023d96472f414c0d5e6339b (patch) | |
tree | 2e1954da38bd4c59edb9ff3daf0111b02c181b0a | |
parent | 329007ce25d56fc7113df7b4828d607806d8bc21 (diff) | |
download | op-kernel-dev-053c525fcf976810f023d96472f414c0d5e6339b.zip op-kernel-dev-053c525fcf976810f023d96472f414c0d5e6339b.tar.gz |
buffer: switch do_emergency_thaw() away from pdflush_operation()
This is (again) a preparatory patch similar to commit
a2a9537ac0b37a5da6fbe7e1e9cb06c524d2a9c4. It open codes a simple
async way of executing do_thaw_all() out of context, so we can get
rid of pdflush.
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
-rw-r--r-- | fs/buffer.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/fs/buffer.c b/fs/buffer.c index 13edf7a..ff8bb1f 100644 --- a/fs/buffer.c +++ b/fs/buffer.c @@ -547,7 +547,7 @@ repeat: return err; } -void do_thaw_all(unsigned long unused) +void do_thaw_all(struct work_struct *work) { struct super_block *sb; char b[BDEVNAME_SIZE]; @@ -567,6 +567,7 @@ restart: goto restart; } spin_unlock(&sb_lock); + kfree(work); printk(KERN_WARNING "Emergency Thaw complete\n"); } @@ -577,7 +578,13 @@ restart: */ void emergency_thaw_all(void) { - pdflush_operation(do_thaw_all, 0); + struct work_struct *work; + + work = kmalloc(sizeof(*work), GFP_ATOMIC); + if (work) { + INIT_WORK(work, do_thaw_all); + schedule_work(work); + } } /** |