# Copyright 2022 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

description     "Start the disc control daemon"
author          "chromium-os-dev@chromium.org"

oom score -100

start on started boot-services
stop on stopping boot-services

respawn

pre-start script
  setup_sysfs_acls() {
    local root_drive="$(rootdev -s -d)"
    local drive_name="$(basename ${root_drive})"
    local device_node="$(readlink -f /sys/block/${drive_name})"

    if [ ! -d "${device_node}/device/unit_descriptor" ]; then
      exit 0
    fi

    # Device node is <controller_node>/host*/target*/*/block/<drive_name>
    local controller_node=${device_node}/../../../../../
    wb_node=${controller_node}/wb_on

    chown disco:disco ${wb_node}  # croslint: disable
  }

  setup_sysfs_acls
end script

exec minijail0 --config /usr/share/minijail/discod.conf \
  -- /usr/sbin/discod --log_level=-1

post-start exec minijail0 -u disco -g disco /usr/bin/gdbus \
    wait --system --timeout 15 org.chromium.Discod
