code: static long limitExpiryToMaxLinger(long now, long _maxLinger, long _requestedExpiryTime, boolean _sharpExpiryEnabled) {
      if (_sharpExpiryEnabled && _requestedExpiryTime > ExpiryPolicy.REFRESH && _requestedExpiryTime < ExpiryPolicy.ETERNAL) {
        _requestedExpiryTime = -_requestedExpiryTime;
      }
      return Expiry.mixTimeSpanAndPointInTime(now, _maxLinger, _requestedExpiryTime);
    }
docs: Ignore the value of the expiry policy if later then the maximum expiry time.
  If max linger takes over, we do not request sharp expiry.
  
  <p>The situation becomes messy if the point in time for the maximum expiry is
  close to the requested expiry time and sharp expiry is requested. The expiry or
  a reload (with refresh ahead) may come to late and overlap the expiry time. As
  incomplete fix we use the safety gap, but if loaders are taking longer then the
  safety gap a value becomes visible that should be expired. The solutions would
  be to pass on two times from here: a refresh time and the point in time for sharp
  expiry, and expiry correctly while a concurrent load is proceeding.