From: Andrew Morton <akpm@digeo.com>
To: Andrew Morton <akpm@digeo.com>
Cc: hch@lst.de, linux-kernel@vger.kernel.org
Subject: Re: [RFC] how to fix is_local_disk()?
Date: Sun, 4 May 2003 01:00:14 -0700 [thread overview]
Message-ID: <20030504010014.67352345.akpm@digeo.com> (raw)
In-Reply-To: <20030504003021.077e8819.akpm@digeo.com>
Andrew Morton <akpm@digeo.com> wrote:
>
> Christoph Hellwig <hch@lst.de> wrote:
> >
> > In drivers/char/sysrq.c we have this nice piece of code:
> >
>
> Suggest you chainsaw the whole lot and simply do a wakeup_bdflush(0) from
> interrupt context.
>
Actually, that's a bit slack because it won't run journal commits and such.
The below should do the trick.
But we still need superblock walking code to do the remount-ro thing.
Another superblock-iterator which calls do_remount_sb()?
fs/buffer.c | 16 +++++++++++++---
include/linux/fs.h | 1 +
2 files changed, 14 insertions(+), 3 deletions(-)
diff -puN fs/buffer.c~emergency_sync fs/buffer.c
--- 25/fs/buffer.c~emergency_sync 2003-05-04 00:46:15.000000000 -0700
+++ 25-akpm/fs/buffer.c 2003-05-04 00:48:54.000000000 -0700
@@ -244,18 +244,28 @@ int fsync_bdev(struct block_device *bdev
* sync everything. Start out by waking pdflush, because that writes back
* all queues in parallel.
*/
-asmlinkage long sys_sync(void)
+static void do_sync(unsigned long wait)
{
wakeup_bdflush(0);
sync_inodes(0); /* All mappings, inodes and their blockdevs */
DQUOT_SYNC(NULL);
sync_supers(); /* Write the superblocks */
sync_filesystems(0); /* Start syncing the filesystems */
- sync_filesystems(1); /* Waitingly sync the filesystems */
- sync_inodes(1); /* Mappings, inodes and blockdevs, again. */
+ sync_filesystems(wait); /* Waitingly sync the filesystems */
+ sync_inodes(wait); /* Mappings, inodes and blockdevs, again. */
+}
+
+asmlinkage long sys_sync(void)
+{
+ do_sync(1);
return 0;
}
+void emergency_sync(void)
+{
+ pdflush_operation(do_sync, 0);
+}
+
/*
* Generic function to fsync a file.
*
diff -puN include/linux/fs.h~emergency_sync include/linux/fs.h
--- 25/include/linux/fs.h~emergency_sync 2003-05-04 00:46:21.000000000 -0700
+++ 25-akpm/include/linux/fs.h 2003-05-04 00:47:01.000000000 -0700
@@ -1113,6 +1113,7 @@ extern int filemap_flush(struct address_
extern int filemap_fdatawait(struct address_space *);
extern void sync_supers(void);
extern void sync_filesystems(int wait);
+extern void emergency_sync(void);
extern sector_t bmap(struct inode *, sector_t);
extern int setattr_mask(unsigned int);
extern int notify_change(struct dentry *, struct iattr *);
_
next prev parent reply other threads:[~2003-05-04 7:46 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-05-04 7:00 [RFC] how to fix is_local_disk()? Christoph Hellwig
2003-05-04 7:30 ` Andrew Morton
2003-05-04 7:53 ` Christoph Hellwig
2003-05-04 8:00 ` Andrew Morton [this message]
2003-05-04 17:10 ` Christoph Hellwig
2003-05-04 21:05 ` Andrew Morton
2003-05-05 7:41 ` viro
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20030504010014.67352345.akpm@digeo.com \
--to=akpm@digeo.com \
--cc=hch@lst.de \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.