From 7731bfe534d10634accca127a461166822d41432 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Tue, 17 Mar 2009 09:38:40 +0100 Subject: [PATCH] --- yaml --- r: 135583 b: refs/heads/master c: a2a9537ac0b37a5da6fbe7e1e9cb06c524d2a9c4 h: refs/heads/master i: 135581: 486e9facb5707176273bd4e267b8a052007da618 135579: 7ac035fc6682761c7c21e2ff2d0acee0d98f0743 135575: c24b78eb37cb34a59c6bdda22fab38ef562bf5f7 135567: 8ac1e8216f35b7f929c4bc3c31531b0d05cfcc01 135551: 77840239fc4f12606273c3bb4af021d3ac2f0570 v: v3 --- [refs] | 2 +- trunk/fs/super.c | 11 +++++++++-- trunk/fs/sync.c | 14 +++++++++++++- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index c1df4a32700b..b8ec0078eeb9 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6933c02e9cc47c2df3c016621a013ec79fb4203f +refs/heads/master: a2a9537ac0b37a5da6fbe7e1e9cb06c524d2a9c4 diff --git a/trunk/fs/super.c b/trunk/fs/super.c index 6ce501447ada..dd4acb158b5e 100644 --- a/trunk/fs/super.c +++ b/trunk/fs/super.c @@ -674,7 +674,7 @@ int do_remount_sb(struct super_block *sb, int flags, void *data, int force) return 0; } -static void do_emergency_remount(unsigned long foo) +static void do_emergency_remount(struct work_struct *work) { struct super_block *sb; @@ -697,12 +697,19 @@ static void do_emergency_remount(unsigned long foo) spin_lock(&sb_lock); } spin_unlock(&sb_lock); + kfree(work); printk("Emergency Remount complete\n"); } void emergency_remount(void) { - pdflush_operation(do_emergency_remount, 0); + struct work_struct *work; + + work = kmalloc(sizeof(*work), GFP_ATOMIC); + if (work) { + INIT_WORK(work, do_emergency_remount); + schedule_work(work); + } } /* diff --git a/trunk/fs/sync.c b/trunk/fs/sync.c index a16d53e5fe9d..ec95a69d17aa 100644 --- a/trunk/fs/sync.c +++ b/trunk/fs/sync.c @@ -42,9 +42,21 @@ SYSCALL_DEFINE0(sync) return 0; } +static void do_sync_work(struct work_struct *work) +{ + do_sync(0); + kfree(work); +} + void emergency_sync(void) { - pdflush_operation(do_sync, 0); + struct work_struct *work; + + work = kmalloc(sizeof(*work), GFP_ATOMIC); + if (work) { + INIT_WORK(work, do_sync_work); + schedule_work(work); + } } /*