mirror of
https://github.com/versity/scoutfs.git
synced 2026-09-26 09:54:31 +00:00
Currently the server's recovery timeout work synchronously reclaims resources for each client whose recovery timed out. scoutfs_recov_next_pending() can always return the head of the pending list because its caller will always remove it from the list as it iterates. As we move to real fencing the server will be creating fence requests for all the timed out clients concurrently. It will need to iterate over all the rids for clients in recovery. So we sort recovery's pending list by rid and change _recov_next_pending to return the next pending rid after a rid argument. This lets the server iterate over all the pending rids at once. Signed-off-by: Zach Brown <zab@versity.com>
24 lines
796 B
C
24 lines
796 B
C
#ifndef _SCOUTFS_RECOV_H_
|
|
#define _SCOUTFS_RECOV_H_
|
|
|
|
enum {
|
|
SCOUTFS_RECOV_GREETING = ( 1 << 0),
|
|
SCOUTFS_RECOV_LOCKS = ( 1 << 1),
|
|
|
|
SCOUTFS_RECOV_INVALID = (~0 << 2),
|
|
SCOUTFS_RECOV_ALL = (~SCOUTFS_RECOV_INVALID),
|
|
};
|
|
|
|
int scoutfs_recov_prepare(struct super_block *sb, u64 rid, int which);
|
|
int scoutfs_recov_begin(struct super_block *sb, void (*timeout_fn)(struct super_block *),
|
|
unsigned int timeout_ms);
|
|
int scoutfs_recov_finish(struct super_block *sb, u64 rid, int which);
|
|
bool scoutfs_recov_is_pending(struct super_block *sb, u64 rid, int which);
|
|
u64 scoutfs_recov_next_pending(struct super_block *sb, u64 rid, int which);
|
|
void scoutfs_recov_shutdown(struct super_block *sb);
|
|
|
|
int scoutfs_recov_setup(struct super_block *sb);
|
|
void scoutfs_recov_destroy(struct super_block *sb);
|
|
|
|
#endif
|