All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jens Axboe <axboe@fb.com>
To: Ming Lin-SSI <ming.l@ssi.samsung.com>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>
Cc: "david@fromorbit.com" <david@fromorbit.com>
Subject: Re: [PATCH 4/7] Add stream ID support for buffered mpage/__block_write_full_page()
Date: Wed, 25 Mar 2015 17:08:02 -0600	[thread overview]
Message-ID: <55133FD2.2040406@fb.com> (raw)
In-Reply-To: <3A47B4705F6BE24CBB43C61AA7328621506980@SSIEXCH-MB3.ssi.samsung.com>

On 03/25/2015 04:42 PM, Ming Lin-SSI wrote:
>> -----Original Message-----
>> From: Jens Axboe [mailto:axboe@fb.com]
>> Sent: Wednesday, March 25, 2015 8:08 AM
>> To: linux-kernel@vger.kernel.org; linux-fsdevel@vger.kernel.org
>> Cc: Ming Lin-SSI; david@fromorbit.com; Jens Axboe
>> Subject: [PATCH 4/7] Add stream ID support for buffered
>> mpage/__block_write_full_page()
>>
>> Pass on the inode stream ID to the bio allocation.
>>
>> Signed-off-by: Jens Axboe <axboe@fb.com>
>> ---
>>   fs/buffer.c | 4 ++--
>>   fs/mpage.c  | 1 +
>>   2 files changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/fs/buffer.c b/fs/buffer.c
>> index 20805db2c987..0220925ff26d 100644
>> --- a/fs/buffer.c
>> +++ b/fs/buffer.c
>> @@ -1774,7 +1774,7 @@ static int __block_write_full_page(struct inode
>> *inode, struct page *page,
>>   	do {
>>   		struct buffer_head *next = bh->b_this_page;
>>   		if (buffer_async_write(bh)) {
>> -			submit_bh(write_op, bh);
>> +			_submit_bh(write_op, bh,
>> streamid_to_flags(inode_streamid(inode)));
>>   			nr_underway++;
>>   		}
>>   		bh = next;
>> @@ -1828,7 +1828,7 @@ recover:
>>   		struct buffer_head *next = bh->b_this_page;
>>   		if (buffer_async_write(bh)) {
>>   			clear_buffer_dirty(bh);
>> -			submit_bh(write_op, bh);
>> +			_submit_bh(write_op, bh,
>> streamid_to_flags(inode_streamid(inode)));
>>   			nr_underway++;
>>   		}
>>   		bh = next;
>> diff --git a/fs/mpage.c b/fs/mpage.c
>> index 3e79220babac..fba13f4b981d 100644
>> --- a/fs/mpage.c
>> +++ b/fs/mpage.c
>> @@ -605,6 +605,7 @@ alloc_new:
>>   				bio_get_nr_vecs(bdev),
>> GFP_NOFS|__GFP_HIGH);
>>   		if (bio == NULL)
>>   			goto confused;
>> +		bio_set_streamid(bio, inode_streamid(inode));
>
> This will not work when multiple processes write to the same raw disk.
> Let's say 2 process concurrently pwrite to /dev/nvme0n1 with different stream_id.
>
> Process 1:
> fd = open("/dev/nvme0n1", ...);
> posix_fadvise(fd, stream_id_1, 0, POSIX_FADV_STREAMID);
> pwrite( fd, buf1, count1, offset1);
>
> Process 2:
> fd = open("/dev/nvme0n1", ...);
> posix_fadvise(fd, stream_id_2, 0, POSIX_FADV_STREAMID);
> pwrite(fd, buf2, count2, offset2);
>
> One stream_id will overwrite the other one because "inode" is same.

Well, that's how buffered writeback works... There's no file available 
at that point in time, in fact it could be long gone. So the only 
reliable part we have here is the inode.

If you want the above scenario to work, you have to use O_DIRECT. Then 
it will work.

-- 
Jens Axboe


  reply	other threads:[~2015-03-25 23:08 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-25 15:07 [PATCH RFC v2] Support for write stream IDs Jens Axboe
2015-03-25 15:07 ` [PATCH 1/7] block: add support for carrying a stream ID in a bio Jens Axboe
2015-04-09 22:46   ` Andreas Dilger
2015-04-18 19:53     ` Jens Axboe
2015-03-25 15:07 ` [PATCH 2/7] Add support for per-file stream ID Jens Axboe
2015-04-09  9:30   ` Dmitry Monakhov
2015-04-09 16:28     ` Jens Axboe
2015-04-09 23:22   ` Andreas Dilger
2015-04-18 19:51     ` Jens Axboe
2015-03-25 15:07 ` [PATCH 3/7] direct-io: add support for write stream IDs Jens Axboe
2015-03-25 15:07 ` [PATCH 4/7] Add stream ID support for buffered mpage/__block_write_full_page() Jens Axboe
2015-03-25 22:42   ` Ming Lin-SSI
2015-03-25 23:08     ` Jens Axboe [this message]
2015-03-25 15:07 ` [PATCH 5/7] btrfs: add support for write stream IDs Jens Axboe
2015-03-25 16:00   ` Chris Mason
2015-03-25 15:07 ` [PATCH 6/7] xfs: add support for buffered writeback stream ID Jens Axboe
2015-03-25 15:07 ` [PATCH 7/7] ext4: add support for write stream IDs Jens Axboe
2015-03-26 20:34   ` Ming Lin-SSI
2015-03-26 20:39     ` Jens Axboe
2015-03-25 16:05 ` [PATCH RFC v2] Support " Jeff Moyer
2015-03-25 16:46   ` Jens Axboe
2015-04-18 20:03 [PATCH " Jens Axboe
2015-04-18 20:03 ` [PATCH 4/7] Add stream ID support for buffered mpage/__block_write_full_page() Jens Axboe
2015-05-05 20:02 [PATCH v2] Support for write stream IDs Jens Axboe
2015-05-05 20:02 ` [PATCH 4/7] Add stream ID support for buffered mpage/__block_write_full_page() Jens Axboe

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=55133FD2.2040406@fb.com \
    --to=axboe@fb.com \
    --cc=david@fromorbit.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=ming.l@ssi.samsung.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.