snapraid/cmdline/bw.h
Andrea Mazzoleni fdac6fb7f5
Some checks are pending
Build / build-mac (push) Waiting to run
Build / build-linux (push) Waiting to run
Build / build-arm32 (push) Waiting to run
Build / build-win (push) Waiting to run
Build / build-freebsd (push) Waiting to run
Build / build-musl (push) Waiting to run
CodeQL Advanced / Analyze (c-cpp) (push) Waiting to run
CodeQL Advanced / Analyze (actions) (push) Waiting to run
Remove leading double underscores from header include guards
2026-10-14 15:37:03 +02:00

40 lines
890 B
C

// SPDX-License-Identifier: GPL-3.0-or-later
// Copyright (C) 2016 Andrea Mazzoleni
#ifndef BW_H
#define BW_H
#include "state.h"
#include "support.h"
/**
* Bandwidth limiting
*/
struct snapraid_bw {
uint64_t limit; /**< Bandwidth limit in bytes per second */
uint64_t total; /**< Remaining bytes allowed in current second */
uint64_t start; /**< Time when to reset the bandwidth counter */
#if HAVE_THREAD
thread_mutex_t lock; /**< Mutex protecting bw fields */
#endif
};
/**
* Initialize the bandwidth limit
*/
void bw_init(struct snapraid_bw* bw, uint64_t limit);
/**
* Destroy the bandwidth limit
*/
void bw_done(struct snapraid_bw* bw);
/**
* Limit IO bandwidth to stay within the configured limit.
* If no limit is set, returns immediately.
* Otherwise sleeps as needed to maintain the rate limit.
*/
void bw_limit(struct snapraid_bw* bw, uint64_t bytes);
#endif