def override_default_workload_params(default_params, user_params):
    """
    Reconciles default FIO parameters with incompatible user-specified
    parameters.
    Returns a dict.
    Example:
      >>> default_params = {"bssplit": "4k/10:8k/90",
      ...                   "iodepth": "16", "numjobs": "1"}
      >>> user_params = {"bs": "1M"}
      >>> override_default_workload_params(default_params, user_params)
      {'bs': '1M', 'iodepth': '16', 'numjobs': '1'}
    """
    if default_params is None:
        default_params = {}
    if user_params is None:
        user_params = {}
    if not user_params:
        return default_params

    # Modify the default params to remove anything which conflicts with
    # what the user wants
    default_params = default_params.copy()  # modifiable copy
    if 'bs' in user_params:
        for conflicting_param in ['bssplit', 'bsrange']:
            if conflicting_param in default_params:
                default_params.pop(conflicting_param)
    if 'bssplit' in user_params:
        for conflicting_param in ['bs', 'bsrange']:
            if conflicting_param in default_params:
                default_params.pop(conflicting_param)
    if 'bsrange' in user_params:
        for conflicting_param in ['bssplit', 'bs']:
            if conflicting_param in default_params:
                default_params.pop(conflicting_param)

    workload_params = default_params.copy()
    workload_params.update(user_params)
    return workload_params