On Mon, Nov 19, 2018 at 12:51:31PM +0900, Damien Le Moal wrote: > For the synchronous I/O path case (read(), write() etc system calls), a > BIO I/O priority is not initialized until the execution of > blk_init_request_from_bio() when the BIO is submitted and a request > initialized for the BIO execution. This is due to the ki_ioprio field of > the struct kiocb defined on stack being always initialized to > IOPRIO_CLASS_NONE, regardless of the calling process I/O context ioprio > value set with ioprio_set(). This late initialization can result in the > BIO being merged to pending requests even when the I/O priorities > differ. > > Fix this by initializing the ki_iopriority field of on stack struct > kiocb using the get_current_ioprio() helper, ensuring that all BIOs > allocated and submitted for the system call execution see the correct > intended I/O priority early. With this, since a BIO I/O priority is > always set to the intended effective value for both the sync and async > path, blk_init_request_from_bio() can be simplified. > > Signed-off-by: Damien Le Moal <damien.lemoal@xxxxxxx> Looks good, Reviewed-by: Christoph Hellwig <hch@xxxxxx>