提交 a2a9537a 编写于 作者: J Jens Axboe

Get rid of pdflush_operation() in emergency sync and remount

Opencode a cheasy approach with kevent. The idea here is that we'll
add some generic delayed work infrastructure, which probably wont be
based on pdflush (or maybe it will, in which case we can just add it
back).

This is in preparation for getting rid of pdflush completely.
Signed-off-by: NJens Axboe <jens.axboe@oracle.com>
上级 6933c02e
...@@ -674,7 +674,7 @@ int do_remount_sb(struct super_block *sb, int flags, void *data, int force) ...@@ -674,7 +674,7 @@ int do_remount_sb(struct super_block *sb, int flags, void *data, int force)
return 0; return 0;
} }
static void do_emergency_remount(unsigned long foo) static void do_emergency_remount(struct work_struct *work)
{ {
struct super_block *sb; struct super_block *sb;
...@@ -697,12 +697,19 @@ static void do_emergency_remount(unsigned long foo) ...@@ -697,12 +697,19 @@ static void do_emergency_remount(unsigned long foo)
spin_lock(&sb_lock); spin_lock(&sb_lock);
} }
spin_unlock(&sb_lock); spin_unlock(&sb_lock);
kfree(work);
printk("Emergency Remount complete\n"); printk("Emergency Remount complete\n");
} }
void emergency_remount(void) 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);
}
} }
/* /*
......
...@@ -42,9 +42,21 @@ SYSCALL_DEFINE0(sync) ...@@ -42,9 +42,21 @@ SYSCALL_DEFINE0(sync)
return 0; return 0;
} }
static void do_sync_work(struct work_struct *work)
{
do_sync(0);
kfree(work);
}
void emergency_sync(void) 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);
}
} }
/* /*
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册