From: Ryusuke Konishi <konishi.ryusuke-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
To: Andreas Rohner <andreas.rohner-hi6Y0CQ0nG0@public.gmane.org>
Cc: linux-nilfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 1/2] nilfs2: add nilfs_sufile_trim_fs to trim clean segs
Date: Mon, 17 Feb 2014 22:28:11 +0900 (JST) [thread overview]
Message-ID: <20140217.222811.27809410.konishi.ryusuke@lab.ntt.co.jp> (raw)
In-Reply-To: <5301F852.8010105-hi6Y0CQ0nG0@public.gmane.org>
On Mon, 17 Feb 2014 12:53:54 +0100, Andreas Rohner wrote:
> On 2014-02-17 12:21, Ryusuke Konishi wrote:
>> On Mon, 17 Feb 2014 11:34:16 +0100, Andreas Rohner wrote:
>>> On 2014-02-17 11:06, Ryusuke Konishi wrote:
>>>> On Mon, 17 Feb 2014 10:17:57 +0100, Andreas Rohner wrote:
>>>>> On 2014-02-17 04:00, Ryusuke Konishi wrote:
>>>>>>> + if (end > nilfs->ns_nsegments)
>>>>>>> + end = nilfs->ns_nsegments;
>>>>>>
>>>>>> Yes, this adjustment is what we should do here, but 'end' segnum was
>>>>>> rounded down to segment alighment before. So, it should be:
>>>>>>
>>>>>> if (end >= nilfs->ns_nsegments)
>>>>>> end = nilfs->ns_nsegments - 1;
>>>>>>
>>>>>>> + if (end == segnum)
>>>>>>> + goto out;
>>>>>>
>>>>>> and
>>>>>>
>>>>>> if (end < segnum)
>>>>>> goto out;
>>>>>>
>>>>>>> +
>>>>>>> + down_read(&NILFS_MDT(sufile)->mi_sem);
>>>>>>> +
>>>>>>> + while (segnum < end) {
>>>>>>
>>>>>> and
>>>>>>
>>>>>> while (segnum <= end) {
>>>>>>
>>>>>>> + n = min_t(unsigned long,
>>>>>>> + segusages_per_block -
>>>>>>> + nilfs_sufile_get_offset(sufile, segnum),
>>>>>>> + end - segnum);
>>>>>>
>>>>>> Then, we can reuse nilfs_sufile_segment_usages_in_block() to calculate
>>>>>> 'n'.
>>>>>
>>>>> Actually I don't think that is correct. What if range->start = 0 and
>>>>> range->end = 8MB. Then segnum = 0 and end = 1. Your code would discard
>>>>> segment 0 and segment 1, whereas my version would discard only segment
>>>>> 0, which seems to be more reasonable.
>>>>
>>>> The problem seems that 'end' is not calculated properly.
>>>> I think it should be
>>>>
>>>> end = nilfs_get_segnum_of_block(
>>>> nilfs,
>>>> (range->start + range->len + <segment-size-in-bytes> - 1)
>>>> >> nilfs->ns_blocksize_bits) - 1;
>>>>
>>>> or can be simplified to
>>>>
>>>> end = nilfs_get_segnum_of_block(
>>>> nilfs,
>>>> (range->start + range->len - 1) >> nilfs->ns_blocksize_bits);
>>>>
>>>> if range->len > 0 is guaranteed.
>>>>
>>>>
>>>> The calculation of segnum extends the range to be discarded since it
>>>> is rounded down to segment alignment, but that of the current
>>>> implementation for 'end' truncates the range. Both should be
>>>> extended.
>>>
>>> Then shouldn't both be truncated? The user expects that less bytes than
>>> range->len are discarded but not more. Maybe I am wrong and it is
>>> defined somewhere...
>>
>> Uum, xfs looks to be truncating both. This seems to be authentic
>> when we think the original meaning of the fitrim range.
>>
>> I first thought truncating the range can generate gaps between
>> consecutive calls of FITRIM (if we use FITRIM like that).
>
> Hmm good point I didn't think of that. Then by extending both sides the
> overlapping segments would get discarded twice with consecutive calls,
> which shouldn't be a problem.
>
>> But now I'm
>> tempted to take the xfs approach. Let's take this semantics.
>>
>> So, we now have to round up range->start to calculate (start) segnum.
>
> Ok. I think in the end it doesn't really matter, because most users will
> use the default values:
>
> range->start = 0
> range->minlen = 0
> range->len = ULLONG_MAX
Or, we have the third option to avoid this issue. It's simply
truncating both to sector boundary. In this case, the gap problem
will not arise since userland programs usually separate the range
considering sector boundary or file system block size boundary. I
think this is more preferable than truncating it to segment size.
How do you think of this ?
Regards,
Ryusuke Konishi
--
To unsubscribe from this list: send the line "unsubscribe linux-nilfs" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2014-02-17 13:28 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-02-15 13:34 [PATCH 0/2] nilfs2: add support for FITRIM ioctl Andreas Rohner
[not found] ` <cover.1392470644.git.andreas.rohner-hi6Y0CQ0nG0@public.gmane.org>
2014-02-15 13:34 ` [PATCH 1/2] nilfs2: add nilfs_sufile_trim_fs to trim clean segs Andreas Rohner
[not found] ` <02d463460388a9bdc1413aa4d6fdfa5a402b9452.1392470644.git.andreas.rohner-hi6Y0CQ0nG0@public.gmane.org>
2014-02-17 3:00 ` Ryusuke Konishi
[not found] ` <20140217.120000.397306175.konishi.ryusuke-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
2014-02-17 4:27 ` Ryusuke Konishi
2014-02-17 9:06 ` Andreas Rohner
[not found] ` <5301D130.9050000-hi6Y0CQ0nG0@public.gmane.org>
2014-02-17 10:42 ` Ryusuke Konishi
[not found] ` <20140217.194200.431478798.konishi.ryusuke-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
2014-02-17 11:04 ` Andreas Rohner
[not found] ` <5301ECD4.5070200-hi6Y0CQ0nG0@public.gmane.org>
2014-02-17 11:39 ` Ryusuke Konishi
2014-02-17 9:17 ` Andreas Rohner
[not found] ` <5301D3C5.6040704-hi6Y0CQ0nG0@public.gmane.org>
2014-02-17 10:06 ` Ryusuke Konishi
[not found] ` <20140217.190610.135800072.konishi.ryusuke-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
2014-02-17 10:34 ` Andreas Rohner
[not found] ` <5301E5A8.3080701-hi6Y0CQ0nG0@public.gmane.org>
2014-02-17 11:21 ` Ryusuke Konishi
[not found] ` <20140217.202143.05344630.konishi.ryusuke-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
2014-02-17 11:53 ` Andreas Rohner
[not found] ` <5301F852.8010105-hi6Y0CQ0nG0@public.gmane.org>
2014-02-17 13:28 ` Ryusuke Konishi [this message]
[not found] ` <20140217.222811.27809410.konishi.ryusuke-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
2014-02-17 13:51 ` Andreas Rohner
2014-02-15 13:34 ` [PATCH 2/2] nilfs2: add FITRIM ioctl support for nilfs2 Andreas Rohner
[not found] ` <c1b713f94e9ebdb093c539a4c79a0426c45639a9.1392470644.git.andreas.rohner-hi6Y0CQ0nG0@public.gmane.org>
2014-02-17 3:01 ` Ryusuke Konishi
-- strict thread matches above, loose matches on Subject: below --
2014-02-17 22:39 [PATCH 0/2] nilfs2: add support for FITRIM ioctl Andreas Rohner
[not found] ` <cover.1392676472.git.andreas.rohner-hi6Y0CQ0nG0@public.gmane.org>
2014-02-17 22:39 ` [PATCH 1/2] nilfs2: add nilfs_sufile_trim_fs to trim clean segs Andreas Rohner
[not found] ` <0ba40f9a0504b2a228e0714032f82556e03b927e.1392676472.git.andreas.rohner-hi6Y0CQ0nG0@public.gmane.org>
2014-02-18 18:37 ` Ryusuke Konishi
[not found] ` <20140219.033733.321498615.konishi.ryusuke-Zyj7fXuS5i5L9jVzuh4AOg@public.gmane.org>
2014-02-19 6:36 ` Andreas Rohner
[not found] ` <5304510A.8080006-hi6Y0CQ0nG0@public.gmane.org>
2014-02-20 8:12 ` Ryusuke Konishi
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=20140217.222811.27809410.konishi.ryusuke@lab.ntt.co.jp \
--to=konishi.ryusuke-zyj7fxus5i5l9jvzuh4aog@public.gmane.org \
--cc=andreas.rohner-hi6Y0CQ0nG0@public.gmane.org \
--cc=linux-nilfs-u79uwXL29TY76Z2rM5mHXA@public.gmane.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