]> git.ipfire.org Git - thirdparty/squid.git/blob - src/DiskIO/DiskThreads/DiskThreads.h
64-bit disk I/O, using off_t / size_t where appropriate
[thirdparty/squid.git] / src / DiskIO / DiskThreads / DiskThreads.h
1 /*
2 * DiskThreads.h
3 *
4 * Internal declarations for the DiskThreads routines
5 */
6
7 #ifndef __DISKTHREADS_H__
8 #define __DISKTHREADS_H__
9
10 #ifdef AUFS_IO_THREADS
11 #define NUMTHREADS AUFS_IO_THREADS
12 #else
13 #define NUMTHREADS (Config.cacheSwap.n_configured*16)
14 #endif
15
16 /* Queue limit where swapouts are deferred (load calculation) */
17 #define MAGIC1 (NUMTHREADS*Config.cacheSwap.n_configured*5)
18 /* Queue limit where swapins are deferred (open/create fails) */
19 #define MAGIC2 (NUMTHREADS*Config.cacheSwap.n_configured*20)
20
21 /* Which operations to run async */
22 #define ASYNC_OPEN 1
23 #define ASYNC_CLOSE 0
24 #define ASYNC_CREATE 1
25 #define ASYNC_WRITE 0
26 #define ASYNC_READ 1
27
28 enum _squidaio_request_type {
29 _AIO_OP_NONE = 0,
30 _AIO_OP_OPEN,
31 _AIO_OP_READ,
32 _AIO_OP_WRITE,
33 _AIO_OP_CLOSE,
34 _AIO_OP_UNLINK,
35 _AIO_OP_OPENDIR,
36 _AIO_OP_STAT
37 };
38 typedef enum _squidaio_request_type squidaio_request_type;
39
40 typedef void AIOCB(int fd, void *cbdata, const char *buf, int aio_return, int aio_errno);
41
42 struct squidaio_result_t
43 {
44 int aio_return;
45 int aio_errno;
46 enum _squidaio_request_type result_type;
47 void *_data; /* Internal housekeeping */
48 void *data; /* Available to the caller */
49 };
50
51 struct squidaio_ctrl_t
52 {
53
54 struct squidaio_ctrl_t *next;
55 int fd;
56 int operation;
57 AIOCB *done_handler;
58 void *done_handler_data;
59 squidaio_result_t result;
60 int len;
61 char *bufp;
62 FREE *free_func;
63 dlink_node node;
64 };
65
66 void squidaio_init(void);
67 void squidaio_shutdown(void);
68 int squidaio_cancel(squidaio_result_t *);
69 int squidaio_open(const char *, int, mode_t, squidaio_result_t *);
70 int squidaio_read(int, char *, size_t, off_t, int, squidaio_result_t *);
71 int squidaio_write(int, char *, size_t, off_t, int, squidaio_result_t *);
72 int squidaio_close(int, squidaio_result_t *);
73
74 int squidaio_stat(const char *, struct stat *, squidaio_result_t *);
75 int squidaio_unlink(const char *, squidaio_result_t *);
76 int squidaio_opendir(const char *, squidaio_result_t *);
77 squidaio_result_t *squidaio_poll_done(void);
78 int squidaio_operations_pending(void);
79 int squidaio_sync(void);
80 int squidaio_get_queue_len(void);
81 void *squidaio_xmalloc(int size);
82 void squidaio_xfree(void *p, int size);
83 void squidaio_stats(StoreEntry *);
84
85 void aioInit(void);
86 void aioDone(void);
87 void aioCancel(int);
88 void aioOpen(const char *, int, mode_t, AIOCB *, void *);
89 void aioClose(int);
90 void aioWrite(int, off_t offset, char *, size_t size, AIOCB *, void *, FREE *);
91 void aioRead(int, off_t offset, size_t size, AIOCB *, void *);
92
93 void aioStat(char *, struct stat *, AIOCB *, void *);
94 void aioUnlink(const char *, AIOCB *, void *);
95 int aioQueueSize(void);
96
97 #include "DiskIO/DiskFile.h"
98
99 class DiskThreadsIOStrategy;
100
101 struct AIOCounts
102 {
103 int open_start;
104 int open_finish;
105 int close_start;
106 int close_finish;
107 int cancel;
108 int write_start;
109 int write_finish;
110 int read_start;
111 int read_finish;
112 int stat_start;
113 int stat_finish;
114 int unlink_start;
115 int unlink_finish;
116 int check_callback;
117 };
118
119 extern AIOCounts squidaio_counts;
120 extern dlink_list used_list;
121
122
123 #endif