]> git.ipfire.org Git - thirdparty/squid.git/blob - src/store_io.cc
Source Format Enforcement (#763)
[thirdparty/squid.git] / src / store_io.cc
1 /*
2 * Copyright (C) 1996-2021 The Squid Software Foundation and contributors
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
9 #include "squid.h"
10 #include "MemObject.h"
11 #include "SquidConfig.h"
12 #include "Store.h"
13 #include "store/Disk.h"
14 #include "store/Disks.h"
15
16 StoreIoStats store_io_stats;
17
18 /*
19 * submit a request to create a cache object for writing.
20 * The StoreEntry structure is sent as a hint to the filesystem
21 * to what will be stored in this object, to allow the filesystem
22 * to select different polices depending on object size or type.
23 */
24 StoreIOState::Pointer
25 storeCreate(StoreEntry * e, StoreIOState::STFNCB * file_callback, StoreIOState::STIOCB * close_callback, void *callback_data)
26 {
27 assert (e);
28
29 ++store_io_stats.create.calls;
30
31 /*
32 * Pick the swapdir
33 * We assume that the header has been packed by now ..
34 */
35 const auto sd = Store::Disks::SelectSwapDir(e);
36
37 if (!sd) {
38 debugs(20, 2, "storeCreate: no swapdirs for " << *e);
39 ++store_io_stats.create.select_fail;
40 return NULL;
41 }
42
43 /* Now that we have a fs to use, call its storeCreate function */
44 StoreIOState::Pointer sio = sd->createStoreIO(*e, file_callback, close_callback, callback_data);
45
46 if (sio == NULL)
47 ++store_io_stats.create.create_fail;
48 else
49 ++store_io_stats.create.success;
50
51 return sio;
52 }
53
54 /*
55 * storeOpen() is purely for reading ..
56 */
57 StoreIOState::Pointer
58 storeOpen(StoreEntry * e, StoreIOState::STFNCB * file_callback, StoreIOState::STIOCB * callback,
59 void *callback_data)
60 {
61 return e->disk().openStoreIO(*e, file_callback, callback, callback_data);
62 }
63
64 void
65 storeClose(StoreIOState::Pointer sio, int how)
66 {
67 if (sio->flags.closing) {
68 debugs(20,3,HERE << "storeClose: flags.closing already set, bailing");
69 return;
70 }
71
72 sio->flags.closing = true;
73
74 debugs(20,3,HERE << "storeClose: calling sio->close(" << how << ")");
75 sio->close(how);
76 }
77
78 void
79 storeRead(StoreIOState::Pointer sio, char *buf, size_t size, off_t offset, StoreIOState::STRCB * callback, void *callback_data)
80 {
81 sio->read_(buf, size, offset, callback, callback_data);
82 }
83
84 void
85 storeIOWrite(StoreIOState::Pointer sio, char const *buf, size_t size, off_t offset, FREE * free_func)
86 {
87 sio->write(buf,size,offset,free_func);
88 }
89