]> git.ipfire.org Git - thirdparty/squid.git/blame - src/DiskIO/DiskThreads/DiskThreads.h
Copyright: add some missing blurbs and contributor details
[thirdparty/squid.git] / src / DiskIO / DiskThreads / DiskThreads.h
CommitLineData
bbc27441 1/*
ef57eb7b 2 * Copyright (C) 1996-2016 The Squid Software Foundation and contributors
bbc27441
AJ
3 *
4 * Squid software is distributed under GPLv2+ license and includes
5 * contributions from numerous individuals and organizations.
6 * Please see the COPYING and CONTRIBUTORS files for details.
7 */
8
cd748f27 9/*
b9ae18aa 10 * DiskThreads.h
cd748f27 11 *
b9ae18aa 12 * Internal declarations for the DiskThreads routines
cd748f27 13 */
14
b9ae18aa 15#ifndef __DISKTHREADS_H__
16#define __DISKTHREADS_H__
cd748f27 17
02529124 18#include "dlink.h"
6f5dc9e4 19#include "mem/forward.h"
02529124 20
1de2b87d
FC
21/* this non-standard-conformant include is needed in order to have stat(2) and struct stat
22 properly defined on some systems (e.g. OpenBSD 5.4) */
23#if HAVE_SYS_STAT_H
24#include <sys/stat.h>
25#endif
26
32d002cb 27#if AUFS_IO_THREADS
f85c88f3 28#define NUMTHREADS AUFS_IO_THREADS
cd748f27 29#else
55f0e6f7 30#define NUMTHREADS (Config.cacheSwap.n_configured*16)
cd748f27 31#endif
32
55f0e6f7 33/* Queue limit where swapouts are deferred (load calculation) */
34#define MAGIC1 (NUMTHREADS*Config.cacheSwap.n_configured*5)
35/* Queue limit where swapins are deferred (open/create fails) */
36#define MAGIC2 (NUMTHREADS*Config.cacheSwap.n_configured*20)
37
38/* Which operations to run async */
39#define ASYNC_OPEN 1
40#define ASYNC_CLOSE 0
41#define ASYNC_CREATE 1
42#define ASYNC_WRITE 0
43#define ASYNC_READ 1
cd748f27 44
12e137b0 45enum _squidaio_request_type {
46 _AIO_OP_NONE = 0,
47 _AIO_OP_OPEN,
48 _AIO_OP_READ,
49 _AIO_OP_WRITE,
50 _AIO_OP_CLOSE,
51 _AIO_OP_UNLINK,
12e137b0 52 _AIO_OP_OPENDIR,
53 _AIO_OP_STAT
54};
55typedef enum _squidaio_request_type squidaio_request_type;
56
b9ae18aa 57typedef void AIOCB(int fd, void *cbdata, const char *buf, int aio_return, int aio_errno);
58
91ea1911
FC
59class squidaio_result_t {
60public:
61 squidaio_result_t() : aio_return(0), aio_errno(0), result_type(_AIO_OP_NONE), _data(nullptr), data(nullptr) {}
cd748f27 62 int aio_return;
63 int aio_errno;
12e137b0 64 enum _squidaio_request_type result_type;
f53969cc
SM
65 void *_data; /* Internal housekeeping */
66 void *data; /* Available to the caller */
cd748f27 67};
68
91ea1911
FC
69class squidaio_ctrl_t {
70 MEMPROXY_CLASS(squidaio_ctrl_t);
71public:
72 squidaio_ctrl_t() : next(nullptr), fd(0), operation(0), done_handler(nullptr), done_handler_data(nullptr), len(0), bufp(0), free_func(nullptr) {}
b9ae18aa 73 struct squidaio_ctrl_t *next;
74 int fd;
75 int operation;
76 AIOCB *done_handler;
77 void *done_handler_data;
78 squidaio_result_t result;
79 int len;
80 char *bufp;
81 FREE *free_func;
82 dlink_node node;
83};
cd748f27 84
d06925a4 85void squidaio_init(void);
86void squidaio_shutdown(void);
c04d4f40 87int squidaio_cancel(squidaio_result_t *);
88int squidaio_open(const char *, int, mode_t, squidaio_result_t *);
ee139403 89int squidaio_read(int, char *, size_t, off_t, int, squidaio_result_t *);
90int squidaio_write(int, char *, size_t, off_t, int, squidaio_result_t *);
c04d4f40 91int squidaio_close(int, squidaio_result_t *);
62e76326 92
c04d4f40 93int squidaio_stat(const char *, struct stat *, squidaio_result_t *);
94int squidaio_unlink(const char *, squidaio_result_t *);
c04d4f40 95int squidaio_opendir(const char *, squidaio_result_t *);
96squidaio_result_t *squidaio_poll_done(void);
97int squidaio_operations_pending(void);
98int squidaio_sync(void);
99int squidaio_get_queue_len(void);
211f1d0b 100void *squidaio_xmalloc(int size);
101void squidaio_xfree(void *p, int size);
b0465494 102void squidaio_stats(StoreEntry *);
cd748f27 103
104void aioInit(void);
105void aioDone(void);
a4b8110e 106void aioCancel(int);
107void aioOpen(const char *, int, mode_t, AIOCB *, void *);
cd748f27 108void aioClose(int);
ee139403 109void aioWrite(int, off_t offset, char *, size_t size, AIOCB *, void *, FREE *);
110void aioRead(int, off_t offset, size_t size, AIOCB *, void *);
62e76326 111
cd748f27 112void aioStat(char *, struct stat *, AIOCB *, void *);
113void aioUnlink(const char *, AIOCB *, void *);
a4b8110e 114int aioQueueSize(void);
cd748f27 115
b9ae18aa 116#include "DiskIO/DiskFile.h"
d3b3ab85 117
b9ae18aa 118class DiskThreadsIOStrategy;
62e76326 119
26ac0430 120struct AIOCounts {
22cec59e
AJ
121 uint64_t open_start;
122 uint64_t open_finish;
123 uint64_t close_start;
124 uint64_t close_finish;
125 uint64_t cancel;
126 uint64_t write_start;
127 uint64_t write_finish;
128 uint64_t read_start;
129 uint64_t read_finish;
130 uint64_t stat_start;
131 uint64_t stat_finish;
132 uint64_t unlink_start;
133 uint64_t unlink_finish;
134 uint64_t check_callback;
d3b3ab85 135};
136
b9ae18aa 137extern AIOCounts squidaio_counts;
138extern dlink_list used_list;
cd748f27 139
140#endif
f53969cc 141