From: "Jörn Engel" <joern@logfs.org>
To: Jens Axboe <jens.axboe@oracle.com>
Cc: Christoph Hellwig <hch@infradead.org>,
David Woodhouse <dwmw2@infradead.org>,
Linus Torvalds <torvalds@linux-foundation.org>,
linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org
Subject: [Patch] Catch filesystems lacking s_bdi
Date: Thu, 22 Apr 2010 22:33:58 +0200 [thread overview]
Message-ID: <20100422203358.GB30749@logfs.org> (raw)
In-Reply-To: <20100422162709.GJ27497@kernel.dk>
On Thu, 22 April 2010 18:27:10 +0200, Jens Axboe wrote:
>
> > Jens - please help fix this up.
>
> Of course, I already posted a series of patches to fix this up. I want
> to test them a bit, and I'll send them in tomorrow.
How about something like this to catch future cases? It compiles and
survived a test boot, so it does seem to work for the common cases like
tmpfs, procfs, etc.
Jens, you know the bdi code 10x better than me, would this work?
Jörn
--
ticks = jiffies;
while (ticks == jiffies);
ticks = jiffies;
-- /usr/src/linux/init/main.c
noop_backing_dev_info is used only as a flag to mark filesystems that
don't have any backing store, like tmpfs, procfs, spufs, etc.
Signed-off-by: Joern Engel <joern@logfs.org>
diff --git a/fs/super.c b/fs/super.c
index f35ac60..dc72491 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -693,6 +693,7 @@ int set_anon_super(struct super_block *s, void *data)
return -EMFILE;
}
s->s_dev = MKDEV(0, dev & MINORMASK);
+ s->s_bdi = &noop_backing_dev_info;
return 0;
}
@@ -954,10 +955,11 @@ vfs_kern_mount(struct file_system_type *type, int flags, const char *name, void
if (error < 0)
goto out_free_secdata;
BUG_ON(!mnt->mnt_sb);
+ BUG_ON(!mnt->mnt_sb->s_bdi);
- error = security_sb_kern_mount(mnt->mnt_sb, flags, secdata);
- if (error)
- goto out_sb;
+ error = security_sb_kern_mount(mnt->mnt_sb, flags, secdata);
+ if (error)
+ goto out_sb;
/*
* filesystems should never set s_maxbytes larger than MAX_LFS_FILESIZE
diff --git a/fs/sync.c b/fs/sync.c
index fc5c3d7..92b2281 100644
--- a/fs/sync.c
+++ b/fs/sync.c
@@ -14,6 +14,7 @@
#include <linux/pagemap.h>
#include <linux/quotaops.h>
#include <linux/buffer_head.h>
+#include <linux/backing-dev.h>
#include "internal.h"
#define VALID_FLAGS (SYNC_FILE_RANGE_WAIT_BEFORE|SYNC_FILE_RANGE_WRITE| \
@@ -32,7 +33,7 @@ static int __sync_filesystem(struct super_block *sb, int wait)
* This should be safe, as we require bdi backing to actually
* write out data in the first place
*/
- if (!sb->s_bdi)
+ if (!sb->s_bdi || sb->s_bdi == &noop_backing_dev_info)
return 0;
if (sb->s_qcop && sb->s_qcop->quota_sync)
diff --git a/include/linux/backing-dev.h b/include/linux/backing-dev.h
index fcbc26a..f4a1436 100644
--- a/include/linux/backing-dev.h
+++ b/include/linux/backing-dev.h
@@ -246,6 +246,7 @@ int bdi_set_max_ratio(struct backing_dev_info *bdi, unsigned int max_ratio);
#endif
extern struct backing_dev_info default_backing_dev_info;
+extern struct backing_dev_info noop_backing_dev_info;
void default_unplug_io_fn(struct backing_dev_info *bdi, struct page *page);
int writeback_in_progress(struct backing_dev_info *bdi);
diff --git a/mm/backing-dev.c b/mm/backing-dev.c
index f13e067..4aba836 100644
--- a/mm/backing-dev.c
+++ b/mm/backing-dev.c
@@ -25,6 +25,11 @@ struct backing_dev_info default_backing_dev_info = {
};
EXPORT_SYMBOL_GPL(default_backing_dev_info);
+struct backing_dev_info noop_backing_dev_info = {
+ .name = "noop",
+};
+EXPORT_SYMBOL_GPL(noop_backing_dev_info);
+
static struct class *bdi_class;
/*
next prev parent reply other threads:[~2010-04-22 20:37 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-04-17 18:40 [PATCH] [MTD] Fix JFFS2 sync silent failure Jörn Engel
2010-04-19 7:38 ` Jens Axboe
2010-04-19 10:15 ` Jörn Engel
2010-04-19 10:20 ` Jens Axboe
2010-04-19 11:39 ` Jörn Engel
2010-04-22 5:54 ` Jörn Engel
2010-04-22 6:26 ` Jörn Engel
2010-04-22 14:25 ` Linus Torvalds
2010-04-22 14:33 ` Linus Torvalds
2010-04-22 16:27 ` Jens Axboe
2010-04-22 20:33 ` Jörn Engel [this message]
2010-04-23 10:05 ` [Patch] Catch filesystems lacking s_bdi Jens Axboe
2010-04-23 20:55 ` Jörn Engel
2010-04-26 9:48 ` Jens Axboe
2010-04-26 14:32 ` Jörn Engel
2010-04-26 14:38 ` Jens Axboe
2010-04-26 14:45 ` Jens Axboe
2010-04-26 16:30 ` [PATCH 1/2] [MTD] Move mtd_bdi_*mappable to mtdcore.c Jörn Engel
2010-04-26 16:31 ` [PATCH 2/2] [MTD] Call bdi_init() and bdi_register() Jörn Engel
2010-04-26 17:02 ` Jens Axboe
2010-04-26 17:12 ` Jörn Engel
2010-04-27 7:52 ` Jens Axboe
2010-04-27 8:11 ` Paolo Minazzi
2010-04-27 8:16 ` Jens Axboe
2010-04-27 11:29 ` Jörn Engel
2010-04-27 11:33 ` Jens Axboe
2010-04-27 9:01 ` Paolo Minazzi
2010-04-27 9:16 ` Jens Axboe
2010-04-27 9:26 ` Paolo Minazzi
2010-04-27 9:29 ` Jens Axboe
2010-04-27 9:36 ` Paolo Minazzi
2010-04-27 11:17 ` Jörn Engel
2010-04-27 11:31 ` Paolo Minazzi
2010-04-27 11:40 ` Jörn Engel
2010-04-27 11:48 ` [PATCH] [LogFS] Return -EINVAL if filesystem image doesn't match Jörn Engel
2010-04-27 12:53 ` Paolo Minazzi
2010-04-27 11:54 ` [PATCH 2/2] [MTD] Call bdi_init() and bdi_register() Paolo Minazzi
2010-04-27 12:05 ` Jörn Engel
2010-04-26 17:01 ` [PATCH 1/2] [MTD] Move mtd_bdi_*mappable to mtdcore.c Jens Axboe
2010-04-26 17:08 ` Jörn Engel
2010-04-26 17:10 ` Jens Axboe
2010-04-22 9:03 ` [PATCH] [MTD] Fix JFFS2 sync silent failure Jens Axboe
2010-04-22 10:39 ` Jens Axboe
2010-04-22 10:58 ` David Woodhouse
2010-04-22 11:05 ` Jens Axboe
2010-04-22 11:55 ` Jörn Engel
2010-04-22 12:08 ` Jens Axboe
2010-04-22 12:17 ` Jörn Engel
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=20100422203358.GB30749@logfs.org \
--to=joern@logfs.org \
--cc=dwmw2@infradead.org \
--cc=hch@infradead.org \
--cc=jens.axboe@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mtd@lists.infradead.org \
--cc=torvalds@linux-foundation.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).