• A
    rbd: split up rbd_get_segment() · 65ccfe21
    Alex Elder 提交于
    There are two places where rbd_get_segment() is called.  One, in
    rbd_rq_fn(), only needs to know the length within a segment that an
    I/O request should be.  The other, in rbd_do_op(), also needs the
    name of the object and the offset within it for the I/O request.
    
    Split out rbd_segment_name() into three dedicated functions:
        - rbd_segment_name() allocates and formats the name of the
          object for a segment containing a given rbd image offset
        - rbd_segment_offset() computes the offset within a segment for
          a given rbd image offset
        - rbd_segment_length() computes the length to use for I/O within
          a segment for a request, not to exceed the end of a segment
          object.
    
    In the new functions be a bit more careful, checking for possible
    error conditions:
        - watch for errors or overflows returned by snprintf()
        - catch (using BUG_ON()) potential overflow conditions
          when computing segment length
    Signed-off-by: NAlex Elder <elder@inktank.com>
    Reviewed-by: NYehuda Sadeh <yehuda@inktank.com>
    65ccfe21
rbd.c 63.5 KB