From: Niklas Cassel <Niklas.Cassel@wdc.com>
To: Kanchan Joshi <joshi.k@samsung.com>
Cc: Bart Van Assche <bvanassche@acm.org>,
Jens Axboe <axboe@kernel.dk>,
"linux-block@vger.kernel.org" <linux-block@vger.kernel.org>,
"linux-scsi@vger.kernel.org" <linux-scsi@vger.kernel.org>,
"linux-fsdevel@vger.kernel.org" <linux-fsdevel@vger.kernel.org>,
"Martin K . Petersen" <martin.petersen@oracle.com>,
Christoph Hellwig <hch@lst.de>, Avri Altman <Avri.Altman@wdc.com>,
Bean Huo <huobean@gmail.com>,
Daejun Park <daejun7.park@samsung.com>,
Damien Le Moal <dlemoal@kernel.org>
Subject: Re: [PATCH v2 01/15] block: Make bio_set_ioprio() modify fewer bio->bi_ioprio bits
Date: Thu, 12 Oct 2023 14:03:26 +0000 [thread overview]
Message-ID: <ZSf8rcBYG/8aEcGi@x1-carbon> (raw)
In-Reply-To: <fdf765a0-54a0-a9e9-fffa-3e733c2535b0@samsung.com>
On Thu, Oct 12, 2023 at 02:19:02PM +0530, Kanchan Joshi wrote:
> On 10/11/2023 10:22 PM, Bart Van Assche wrote:
> >>> @@ -2926,7 +2926,8 @@ static void bio_set_ioprio(struct bio *bio)
> >>> {
> >>> /* Nobody set ioprio so far? Initialize it based on task's
> >>> nice value */
> >>> if (IOPRIO_PRIO_CLASS(bio->bi_ioprio) == IOPRIO_CLASS_NONE)
> >>> - bio->bi_ioprio = get_current_ioprio();
> >>> + ioprio_set_class_and_level(&bio->bi_ioprio,
> >>> + get_current_ioprio());
> >>> blkcg_set_ioprio(bio);
> >>> }
> >>> diff --git a/include/linux/ioprio.h b/include/linux/ioprio.h
> >>> index 7578d4f6a969..f2e768ab4b35 100644
> >>> --- a/include/linux/ioprio.h
> >>> +++ b/include/linux/ioprio.h
> >>> @@ -71,4 +71,14 @@ static inline int ioprio_check_cap(int ioprio)
> >>> }
> >>> #endif /* CONFIG_BLOCK */
> >>> +#define IOPRIO_CLASS_LEVEL_MASK ((IOPRIO_CLASS_MASK <<
> >>> IOPRIO_CLASS_SHIFT) | \
> >>> + (IOPRIO_LEVEL_MASK << 0))
> >>> +
> >>> +static inline void ioprio_set_class_and_level(u16 *prio, u16
> >>> class_level)
> >>> +{
> >>> + WARN_ON_ONCE(class_level & ~IOPRIO_CLASS_LEVEL_MASK);
> >>> + *prio &= ~IOPRIO_CLASS_LEVEL_MASK;
> >>> + *prio |= class_level;
> >>
> >> Return of get_current_ioprio() will touch all 16 bits here. So
> >> user-defined value can alter whatever was set in bio by F2FS (patch 4 in
> >> this series). Is that not an issue?
> >
> > The above is incomprehensible to me. Anyway, I will try to answer.
> >
> > It is not clear to me why it is claimed that "get_current_ioprio() will
> > touch all 16 bits here"? The return value of get_current_ioprio() is
> > passed to ioprio_set_class_and_level() and that function clears the hint
> > bits from the get_current_ioprio() return value.
>
> Function does OR bio->bi_ioprio with whatever is the return of
> get_current_ioprio(). So if lifetime bits were set in
> get_current_ioprio(), you will end up setting that in bio->bi_ioprio too.
>
>
> > ioprio_set_class_and_level() preserves the hint bits set by F2FS.
> >
> >> And what is the user interface you have in mind. Is it ioprio based, or
> >> write-hint based or mix of both?
> >
> > Since the data lifetime is encoded in the hint bits, the hint bits need
> > to be set by user space to set a data lifetime.
>
> I asked because more than one way seems to emerge here. Parts of this
> series (Patch 4) are taking inode->i_write_hint (and not ioprio value)
> and putting that into bio.
> I wonder what to expect if application get to send one lifetime with
> fcntl (write-hints) and different one with ioprio. Is that not racy?
Hello Kanchan,
The fcntl F_SET_RW_HINT still exists, which sets inode->i_write_hint.
This is currently only used by f2fs.
The usage of inode->i_write_hint was removed from all filesystems
(except f2fs) in:
c75e707fe1aa ("block: remove the per-bio/request write hint").
This commit also removed bi_write_hint from struct bio.
The fcntl F_SET_FILE_RW_HINT, which used to set f->f_write_hint was removed
in:
7b12e49669c9 ("fs: remove fs.f_write_hint")
This commit also removed f_write_hint from struct file.
My thinking when suggesting to reuse ioprio hints, was that we don't need
to readd write_hint struct members to struct bio and struct request.
SCSI can just reuse the hints bits in ioprio.
Note that my filesystem knowledge is not the best...
But for f2fs, I guess it just needs to set the bio->ioprio hint bits
correctly.
I guess the confusion is if an application does both:
ioprio_set() and fcntl(.., F_SET_RW_HINT, ..), what should the filesystem
use?
Or.. if you use e.g. io_uring to write to a file stored on f2fs...
io_uring has sqe->ioprio, which can contain a write hint, does this get
propagated to the filesystem?
And if so, what if you also did fcntl(.., F_SET_RW_HINT, ..) to set
i_write_hint? Which should the filesystem use to set bio->ioprio?
Kind regards,
Niklas
next prev parent reply other threads:[~2023-10-12 14:03 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-05 19:40 [PATCH v2 00/15] Pass data temperature information to UFS devices Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 01/15] block: Make bio_set_ioprio() modify fewer bio->bi_ioprio bits Bart Van Assche
2023-10-06 6:28 ` Kanchan Joshi
2023-10-06 18:20 ` Bart Van Assche
2023-10-10 5:22 ` Kanchan Joshi
2023-10-11 16:52 ` Bart Van Assche
2023-10-12 8:49 ` Kanchan Joshi
2023-10-12 14:03 ` Niklas Cassel [this message]
2023-10-12 17:42 ` Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 02/15] blk-ioprio: Modify " Bart Van Assche
2023-10-06 6:36 ` Kanchan Joshi
2023-10-06 18:25 ` Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 03/15] block: Support data lifetime in the I/O priority bitfield Bart Van Assche
2023-10-06 6:42 ` Kanchan Joshi
2023-10-06 8:19 ` Damien Le Moal
2023-10-06 9:53 ` Niklas Cassel
2023-10-06 18:07 ` Bart Van Assche
2023-10-11 20:51 ` Bart Van Assche
2023-10-12 1:02 ` Damien Le Moal
2023-10-12 18:00 ` Bart Van Assche
2023-10-13 1:08 ` Damien Le Moal
2023-10-13 9:33 ` Niklas Cassel
2023-10-13 21:20 ` Bart Van Assche
2023-10-16 9:20 ` Niklas Cassel
2023-10-16 16:36 ` Bart Van Assche
2023-10-13 20:18 ` Bart Van Assche
2023-10-15 22:22 ` Damien Le Moal
2023-10-16 16:31 ` Bart Van Assche
2023-10-16 6:17 ` Christoph Hellwig
2023-10-16 16:32 ` Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 04/15] fs: Restore write hint support Bart Van Assche
2023-10-10 5:42 ` Kanchan Joshi
2023-10-11 16:56 ` Bart Van Assche
2023-10-16 6:20 ` Christoph Hellwig
2023-10-05 19:40 ` [PATCH v2 05/15] fs/f2fs: Restore the whint_mode mount option Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 06/15] scsi: core: Query the Block Limits Extension VPD page Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 07/15] scsi_proto: Add structures and constants related to I/O groups and streams Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 08/15] sd: Translate data lifetime information Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 09/15] scsi_debug: Reduce code duplication Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 10/15] scsi_debug: Support the block limits extension VPD page Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 11/15] scsi_debug: Rework page code error handling Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 12/15] scsi_debug: Rework subpage " Bart Van Assche
2023-10-05 19:40 ` [PATCH v2 13/15] scsi_debug: Implement the IO Advice Hints Grouping mode page Bart Van Assche
2023-10-05 19:41 ` [PATCH v2 14/15] scsi_debug: Implement GET STREAM STATUS Bart Van Assche
2023-10-05 19:41 ` [PATCH v2 15/15] scsi_debug: Maintain write statistics per group number Bart Van Assche
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=ZSf8rcBYG/8aEcGi@x1-carbon \
--to=niklas.cassel@wdc.com \
--cc=Avri.Altman@wdc.com \
--cc=axboe@kernel.dk \
--cc=bvanassche@acm.org \
--cc=daejun7.park@samsung.com \
--cc=dlemoal@kernel.org \
--cc=hch@lst.de \
--cc=huobean@gmail.com \
--cc=joshi.k@samsung.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=martin.petersen@oracle.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.