From: Mingming Cao <cmm@us.ibm.com>
To: Andrew Morton <akpm@osdl.org>, pbadari@us.ibm.com
Cc: suparna@in.ibm.com, sct@redhat.com, linux-kernel@vger.kernel.org,
ext2-devel@lists.sourceforge.net, linux-fsdevel@vger.kernel.org
Subject: Re: [Ext2-devel] [RFC] Adding multiple block allocation
Date: Fri, 29 Apr 2005 14:12:19 -0700 [thread overview]
Message-ID: <1114809139.10473.70.camel@localhost.localdomain> (raw)
In-Reply-To: <20050429135705.3f4831bd.akpm@osdl.org>
On Fri, 2005-04-29 at 13:57 -0700, Andrew Morton wrote:
> Mingming Cao <cmm@us.ibm.com> wrote:
> >
> > If we do direct write(block allocation) to a hole, I found that the
> > "create" flag passed to ext3_direct_io_get_blocks() is 0 if we are
> > trying to _write_ to a file hole. Is this expected?
>
> Nope. The code in get_more_blocks() is pretty explicit.
>
> > But if it try to allocating blocks in the hole (with direct IO), blocks
> > are allocated one by one. I am looking at it right now.
> >
>
> Please see the comment over get_more_blocks().
>
I went to look at get_more_blocks, the create flag is cleared if the
file offset is less than the i_size. (see code below).
static int get_more_blocks(struct dio *dio)
{
..........
.........
create = dio->rw == WRITE;
if (dio->lock_type == DIO_LOCKING) {
if (dio->block_in_file < (i_size_read(dio->inode) >>
dio->blkbits))
create = 0;
} else if (dio->lock_type == DIO_NO_LOCKING) {
create = 0;
ret = (*dio->get_blocks)(dio->inode, fs_startblk, fs_count,
map_bh, create);
}
When it is trying to direct writing to a hole, the create flag is
cleared so that the underlying filesystem get_blocks() function will
only do a block look up(look up will be failed and no block allocation).
do_direct_IO -> get_more_blocks -> ext3_direct_io_get_blocks. In
get_more_blocks(), do_direct_IO() handles the write to hole situation
by simply return an error of ENOTBLK. In direct_io_worker() it detects
this error then just simply return the size of written byte to 0. The
real write is handled by the buffered I/O. In
__generic_file_aio_write_nolock(), generic_file_buffered_write() will be
called if written by generic_file_direct_write() is 0.
Could you confirm my observation above? Hope I understand this right:
right now direct io write to a hole is actually handled by buffered IO.
If so, there must be some valid reason that I could not see now.
Thanks,
Mingming
WARNING: multiple messages have this Message-ID (diff)
From: Mingming Cao <cmm@us.ibm.com>
To: Andrew Morton <akpm@osdl.org>, pbadari@us.ibm.com
Cc: suparna@in.ibm.com, sct@redhat.com, linux-kernel@vger.kernel.org,
ext2-devel@lists.sourceforge.net, linux-fsdevel@vger.kernel.org
Subject: Re: [RFC] Adding multiple block allocation
Date: Fri, 29 Apr 2005 14:12:19 -0700 [thread overview]
Message-ID: <1114809139.10473.70.camel@localhost.localdomain> (raw)
In-Reply-To: <20050429135705.3f4831bd.akpm@osdl.org>
On Fri, 2005-04-29 at 13:57 -0700, Andrew Morton wrote:
> Mingming Cao <cmm@us.ibm.com> wrote:
> >
> > If we do direct write(block allocation) to a hole, I found that the
> > "create" flag passed to ext3_direct_io_get_blocks() is 0 if we are
> > trying to _write_ to a file hole. Is this expected?
>
> Nope. The code in get_more_blocks() is pretty explicit.
>
> > But if it try to allocating blocks in the hole (with direct IO), blocks
> > are allocated one by one. I am looking at it right now.
> >
>
> Please see the comment over get_more_blocks().
>
I went to look at get_more_blocks, the create flag is cleared if the
file offset is less than the i_size. (see code below).
static int get_more_blocks(struct dio *dio)
{
..........
.........
create = dio->rw == WRITE;
if (dio->lock_type == DIO_LOCKING) {
if (dio->block_in_file < (i_size_read(dio->inode) >>
dio->blkbits))
create = 0;
} else if (dio->lock_type == DIO_NO_LOCKING) {
create = 0;
ret = (*dio->get_blocks)(dio->inode, fs_startblk, fs_count,
map_bh, create);
}
When it is trying to direct writing to a hole, the create flag is
cleared so that the underlying filesystem get_blocks() function will
only do a block look up(look up will be failed and no block allocation).
do_direct_IO -> get_more_blocks -> ext3_direct_io_get_blocks. In
get_more_blocks(), do_direct_IO() handles the write to hole situation
by simply return an error of ENOTBLK. In direct_io_worker() it detects
this error then just simply return the size of written byte to 0. The
real write is handled by the buffered I/O. In
__generic_file_aio_write_nolock(), generic_file_buffered_write() will be
called if written by generic_file_direct_write() is 0.
Could you confirm my observation above? Hope I understand this right:
right now direct io write to a hole is actually handled by buffered IO.
If so, there must be some valid reason that I could not see now.
Thanks,
Mingming
-------------------------------------------------------
This SF.Net email is sponsored by: NEC IT Guy Games.
Get your fingers limbered up and give it your best shot. 4 great events, 4
opportunities to win big! Highest score wins.NEC IT Guy Games. Play to
win an NEC 61 plasma display. Visit http://www.necitguy.com/?r=20
next prev parent reply other threads:[~2005-04-29 21:13 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-04-05 3:51 ext3 allocate-with-reservation latencies Lee Revell
2005-04-05 4:13 ` Ingo Molnar
2005-04-05 6:10 ` Mingming Cao
2005-04-05 16:38 ` Lee Revell
2005-04-06 5:35 ` Mingming Cao
2005-04-06 9:51 ` Stephen C. Tweedie
2005-04-06 16:53 ` Mingming Cao
2005-04-06 18:22 ` Stephen C. Tweedie
2005-04-06 19:03 ` Mingming Cao
2005-04-07 8:14 ` Ingo Molnar
2005-04-07 13:08 ` Stephen C. Tweedie
2005-04-07 19:16 ` Mingming Cao
2005-04-07 23:37 ` Mingming Cao
2005-04-08 14:40 ` Stephen C. Tweedie
2005-04-08 16:06 ` Arjan van de Ven
2005-04-08 18:10 ` Mingming Cao
2005-04-08 18:12 ` Lee Revell
2005-04-11 11:48 ` Stephen C. Tweedie
2005-04-11 18:38 ` Mingming Cao
2005-04-11 19:12 ` Lee Revell
2005-04-11 19:22 ` Lee Revell
2005-04-11 19:57 ` Stephen C. Tweedie
2005-04-12 6:41 ` Mingming Cao
2005-04-12 11:18 ` Stephen C. Tweedie
2005-04-12 23:27 ` Mingming Cao
2005-04-13 10:29 ` Stephen C. Tweedie
[not found] ` <1113597161.3899.80.camel@localhost.localdomain>
2005-04-18 18:00 ` Stephen C. Tweedie
2005-04-18 21:56 ` [Ext2-devel] " Mingming Cao
2005-04-22 22:10 ` [RFC][PATCH] Reduce ext3 allocate-with-reservation lock latencies Mingming Cao
2005-04-28 3:45 ` Lee Revell
2005-04-28 7:37 ` Mingming Cao
2005-04-28 16:12 ` Lee Revell
2005-04-28 18:34 ` Mingming Cao
2005-04-29 6:18 ` Mingming Cao
2005-04-28 19:14 ` [RFC] Adding multiple block allocation to current ext3 Mingming Cao
2005-04-29 13:52 ` [Ext2-devel] [RFC] Adding multiple block allocation Suparna Bhattacharya
2005-04-29 17:10 ` Mingming Cao
2005-04-29 19:42 ` Mingming Cao
2005-04-29 20:57 ` Andrew Morton
2005-04-29 20:57 ` Andrew Morton
2005-04-29 21:12 ` Mingming Cao [this message]
2005-04-29 21:12 ` Mingming Cao
2005-04-29 21:34 ` [Ext2-devel] " Andrew Morton
2005-04-29 21:34 ` Andrew Morton
2005-04-30 16:00 ` [Ext2-devel] " Suparna Bhattacharya
2005-04-29 18:45 ` Badari Pulavarty
2005-04-29 23:22 ` Mingming Cao
2005-04-30 16:10 ` Suparna Bhattacharya
2005-04-30 16:10 ` Suparna Bhattacharya
2005-04-30 17:11 ` [Ext2-devel] " Suparna Bhattacharya
2005-04-30 18:07 ` Mingming Cao
2005-05-02 4:46 ` Suparna Bhattacharya
2005-04-30 16:52 ` Suparna Bhattacharya
2005-04-30 0:33 ` Mingming Cao
2005-04-30 0:33 ` Mingming Cao
2005-04-30 0:44 ` [Ext2-devel] " Mingming Cao
2005-04-30 0:44 ` Mingming Cao
2005-04-30 17:03 ` [Ext2-devel] " Suparna Bhattacharya
2006-01-10 23:26 ` [PATCH 0/5] multiple block allocation to current ext3 Mingming Cao
2006-01-11 5:25 ` Andrew Morton
2006-01-11 19:17 ` Mingming Cao
2006-01-11 19:43 ` Andrew Morton
2006-01-11 21:31 ` Mingming Cao
2006-01-14 1:12 ` Fall back io scheduler for 2.6.15? Mingming Cao
2006-01-14 1:49 ` Andrew Morton
2006-01-14 5:22 ` Dave Jones
2006-01-16 8:43 ` Jens Axboe
2006-01-16 19:45 ` [PATCH] Fall back io scheduler ( Re: [Ext2-devel] Re: Fall back io scheduler for 2.6.15?) Mingming Cao
2006-01-16 19:49 ` Jens Axboe
2006-01-16 19:57 ` Mingming Cao
2006-01-19 19:37 ` Fall back io scheduler for 2.6.15? Nate Diller
2006-01-20 8:10 ` Jens Axboe
2006-01-16 19:38 ` [Ext2-devel] " Mingming Cao
2005-04-29 6:28 ` [PATCH] Reduce ext3 allocate-with-reservation lock latencies Mingming Cao
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=1114809139.10473.70.camel@localhost.localdomain \
--to=cmm@us.ibm.com \
--cc=akpm@osdl.org \
--cc=ext2-devel@lists.sourceforge.net \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbadari@us.ibm.com \
--cc=sct@redhat.com \
--cc=suparna@in.ibm.com \
/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.