From: Evgeniy Dushistov <dushistov@mail.ru>
To: Al Viro <viro@ftp.linux.org.uk>
Cc: Andrew Morton <akpm@osdl.org>,
linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org
Subject: Re: [PATCH 1/5]: ufs: missed brelse and wrong baseblk
Date: Mon, 19 Jun 2006 17:17:50 +0400 [thread overview]
Message-ID: <20060619131750.GA14770@rain.homenetwork> (raw)
In-Reply-To: <20060619073229.GI27946@ftp.linux.org.uk>
On Mon, Jun 19, 2006 at 08:32:29AM +0100, Al Viro wrote:
> On Mon, Jun 19, 2006 at 10:47:21AM +0400, Evgeniy Dushistov wrote:
> > On Sun, Jun 18, 2006 at 06:50:45PM +0100, Al Viro wrote:
> > > * block may be bigger than page. That can cause all sorts of fun
> > > problems in interaction with our VM, since allocation can affect more than
> > > one page and that has to be taken into account.
> >
> > In fact this is not a problem. Blocks in terms of linux VFS
> > is fragments in terms of UFS.
>
> And?
>
> > And if fragment >4096 we just don't mount such file system.
> >
> > So we can easily support 32K blocks.
>
> .... Which means that we have allocation unit (aka UFS block) covering
> several in-core pages. Which means that if you have a file with 8Kb
> hole in the beginning, mmap it shared and dirty the first couple of
> pages, you will get the situation when parallel writeout on those two
> pages will cause trouble. Both times you'll allocate full block (file
> is couple of megabytes long, so forget about partial blocks, relocations,
> etc.) And both will try to put the reference to what they'd allocated
> into the same inode as the first direct block. Do you see the problem?
No, I don't see, can you explain in detail how this affect current
implementation?
In case of 1k fragments, msync of two pages
cause 8 calls of ufs's get_block_t with create == 1,
they will be consequent because of synchronization.
Only the first one allocate block,
all other check if reference to block not 0, and just return
appropriate value. See for example ufs_inode_getblock:
p = (__fs32 *) bh->b_data + block;
tmp = fs32_to_cpu(sb, *p);
if (tmp) {
*phys = tmp + blockoff;
goto out;
and that's all, nothing will be allocated.
So this is abstract theory about some abstract implementation of UFS,
or you see some problems in code?
--
/Evgeniy
next prev parent reply other threads:[~2006-06-19 13:12 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-06-17 10:14 [PATCH 1/5]: ufs: missed brelse and wrong baseblk Evgeniy Dushistov
2006-06-18 16:20 ` Al Viro
2006-06-18 17:50 ` Al Viro
2006-06-19 6:47 ` Evgeniy Dushistov
2006-06-19 7:32 ` Al Viro
2006-06-19 13:17 ` Evgeniy Dushistov [this message]
2006-06-19 18:28 ` Al Viro
2006-06-19 18:58 ` Evgeniy Dushistov
2006-06-19 19:13 ` Al Viro
2006-06-20 16:30 ` Evgeniy Dushistov
2006-06-20 16:30 ` Evgeniy Dushistov
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=20060619131750.GA14770@rain.homenetwork \
--to=dushistov@mail.ru \
--cc=akpm@osdl.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=viro@ftp.linux.org.uk \
/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).