• Ilya Dryomov's avatar
    libceph: move away from global osd_req_flags · 22d2cfdf
    Ilya Dryomov authored
    osd_req_flags is overly general and doesn't suit its only user
    (read_from_replica option) well:
    
    - applying osd_req_flags in account_request() affects all OSD
      requests, including linger (i.e. watch and notify).  However,
      linger requests should always go to the primary even though
      some of them are reads (e.g. notify has side effects but it
      is a read because it doesn't result in mutation on the OSDs).
    
    - calls to class methods that are reads are allowed to go to
      the replica, but most such calls issued for "rbd map" and/or
      exclusive lock transitions are requested to be resent to the
      primary via EAGAIN, doubling the latency.
    
    Get rid of global osd_req_flags and set read_from_replica flag
    only on specific OSD requests instead.
    
    Fixes: 8ad44d5e ("libceph: read_from_replica option")
    Signed-off-by: default avatarIlya Dryomov <idryomov@gmail.com>
    Reviewed-by: default avatarJeff Layton <jlayton@kernel.org>
    22d2cfdf
rbd.c 185 KB