lkml.org 
[lkml]   [2023]   [Dec]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 07/16] block: Pass blk_queue_get_max_sectors() a request pointer
    Date
    Currently blk_queue_get_max_sectors() is passed a enum req_op, which does
    not work for atomic writes. This is because an atomic write has a different
    max sectors values to a regular write, and we need the rq->cmd_flags
    to know that we have an atomic write, so pass the request pointer, which
    has all information available.

    Also use rq->cmd_flags instead of rq->bio->bi_opf when possible.

    Signed-off-by: John Garry <john.g.garry@oracle.com>
    ---
    block/blk-merge.c | 3 ++-
    block/blk-mq.c | 2 +-
    block/blk.h | 6 ++++--
    3 files changed, 7 insertions(+), 4 deletions(-)

    diff --git a/block/blk-merge.c b/block/blk-merge.c
    index 65e75efa9bd3..0ccc251e22ff 100644
    --- a/block/blk-merge.c
    +++ b/block/blk-merge.c
    @@ -596,7 +596,8 @@ static inline unsigned int blk_rq_get_max_sectors(struct request *rq,
    if (blk_rq_is_passthrough(rq))
    return q->limits.max_hw_sectors;

    - max_sectors = blk_queue_get_max_sectors(q, req_op(rq));
    + max_sectors = blk_queue_get_max_sectors(rq);
    +
    if (!q->limits.chunk_sectors ||
    req_op(rq) == REQ_OP_DISCARD ||
    req_op(rq) == REQ_OP_SECURE_ERASE)
    diff --git a/block/blk-mq.c b/block/blk-mq.c
    index ac18f802c027..58bacf9029b3 100644
    --- a/block/blk-mq.c
    +++ b/block/blk-mq.c
    @@ -3027,7 +3027,7 @@ void blk_mq_submit_bio(struct bio *bio)
    blk_status_t blk_insert_cloned_request(struct request *rq)
    {
    struct request_queue *q = rq->q;
    - unsigned int max_sectors = blk_queue_get_max_sectors(q, req_op(rq));
    + unsigned int max_sectors = blk_queue_get_max_sectors(rq);
    unsigned int max_segments = blk_rq_get_max_segments(rq);
    blk_status_t ret;

    diff --git a/block/blk.h b/block/blk.h
    index 08a358bc0919..94e330e9c853 100644
    --- a/block/blk.h
    +++ b/block/blk.h
    @@ -166,9 +166,11 @@ static inline unsigned int blk_rq_get_max_segments(struct request *rq)
    return queue_max_segments(rq->q);
    }

    -static inline unsigned int blk_queue_get_max_sectors(struct request_queue *q,
    - enum req_op op)
    +static inline unsigned int blk_queue_get_max_sectors(struct request *rq)
    {
    + struct request_queue *q = rq->q;
    + enum req_op op = req_op(rq);
    +
    if (unlikely(op == REQ_OP_DISCARD || op == REQ_OP_SECURE_ERASE))
    return min(q->limits.max_discard_sectors,
    UINT_MAX >> SECTOR_SHIFT);
    --
    2.35.3
    \
     
     \ /
      Last update: 2023-12-12 12:10    [W:4.137 / U:0.112 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site