HEX
Server: LiteSpeed
System: Linux srv1.dhviews.com 5.14.0-570.23.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Jun 24 11:27:16 EDT 2025 x86_64
User: bdedition (1723)
PHP: 7.4.33
Disabled: NONE
Upload Files
File: //proc/thread-self/root/usr/local/apps/dovecot/include/dovecot/nfs-workarounds.h
#ifndef NFS_WORKAROUNDS_H
#define NFS_WORKAROUNDS_H

/* Note that some systems (Solaris) may use a macro to redefine struct stat */
#include <sys/stat.h>

/* When syscall fails with ESTALE error, how many times to try reopening the
   file and retrying the operation. */
#define NFS_ESTALE_RETRY_COUNT 10

/* Same as open(), but try to handle ESTALE errors. */
int nfs_safe_open(const char *path, int flags);
/* Same as stat(), but try to handle ESTALE errors.
   Doesn't flush attribute cache. */
int nfs_safe_stat(const char *path, struct stat *buf);
int nfs_safe_lstat(const char *path, struct stat *buf);
/* Same as link(), but handle problems with link() by verifying the file's
   link count changes. If links1=TRUE, assume the original file's link count
   is 1, otherwise stat() first to find it out. */
int nfs_safe_link(const char *oldpath, const char *newpath, bool links1);

/* Flush attribute cache for given path. The file must not be fcntl locked or
   the locks may get dropped. */
void nfs_flush_attr_cache_unlocked(const char *path);
/* Flush attribute cache for given path. The file may be fcntl locked. */
void nfs_flush_attr_cache_maybe_locked(const char *path);
/* Flush attribute cache for a fcntl locked file descriptor. If locking flushes
   the attribute cache with the running OS, this function does nothing.
   The given path is used only for logging. */
void nfs_flush_attr_cache_fd_locked(const char *path, int fd);
/* Flush file handle cache for given file. */
void nfs_flush_file_handle_cache(const char *path);

/* Flush read cache for fd that was just fcntl locked. If the OS flushes
   read cache when fcntl locking file, this function does nothing. */
void nfs_flush_read_cache_locked(const char *path, int fd);
/* Flush read cache for fd that doesn't have fcntl locks. */
void nfs_flush_read_cache_unlocked(const char *path, int fd);

#endif