26#if _SQUID_WINDOWS_ || _SQUID_OS2_
28diskWriteIsComplete(
int fd)
30 return fd_table[fd].disk.write_q ? 0 : 1;
73 auto fd =
xopen(path, mode, 0644);
79 debugs(50, 3,
"error opening file " << path <<
": " <<
xstrerr(xerrno));
105#if _SQUID_WINDOWS_ || _SQUID_OS2_
110 while (!diskWriteIsComplete(fd))
114 debugs(6, 2,
"file_close: FD " << fd <<
", delaying close");
155 size_t wantCapacity = 0;
158 wantCapacity += q->len - q->buf_offset;
160 const auto wq =
new dwrite_q(wantCapacity);
161 while (
const auto q = fdd->
write_q) {
162 const auto len = q->len - q->buf_offset;
163 memcpy(wq->buf + wq->len, q->buf + q->buf_offset, len);
189 debugs(6, 3,
"diskHandleWrite: FD " << fd);
197 debugs(6, 3,
"diskHandleWrite: FD " << fd <<
" writing " <<
215 const auto xerrno = errno;
217 debugs(6, 3,
"diskHandleWrite: FD " << fd <<
" len = " << len);
239 fatal(
"Write failure -- check your disk space and cache.log");
250 while (
const auto q = fdd->
write_q) {
259 if (
const auto q = fdd->
write_q) {
263 if (q->buf_offset > q->len)
265 q <<
"," << (
int) q->buf_offset <<
", " << q->len <<
", " <<
266 len <<
" FD " << fd <<
")");
268 assert(q->buf_offset <= q->len);
270 if (q->buf_offset == q->len) {
295 callback(fd, status, len,
cbdata);
315 void const *ptr_to_buf,
325 const auto wq =
new dwrite_q(len,
static_cast<char *
>(
const_cast<void *
>(ptr_to_buf)), free_func);
326 wq->file_offset = file_offset;
370#if WRITES_MAINTAIN_DISK_OFFSET
375 debugs(6, 3,
"diskHandleRead: FD " << fd <<
" seeking to offset " << ctrl_dat->
offset);
377 if (lseek(fd, ctrl_dat->
offset, SEEK_SET) == -1) {
407 }
else if (len == 0) {
424file_read(
int fd,
char *buf,
int req_len, off_t offset,
DRCB * handler,
void *client_data)
436 if (unlink(s) < 0 && !quiet) {
445 debugs(21, 2,
"renaming " << from <<
" to " << to);
452#if _SQUID_OS2_ || _SQUID_WINDOWS_
460 debugs(21, (xerrno == ENOENT ? 2 :
DBG_IMPORTANT),
"ERROR: Cannot rename " << from <<
" to " << to <<
": " <<
xstrerr(xerrno));
486#define fsbtoblk(num, fsbs, bs) \
487 (((fsbs) != 0 && (fsbs) < (bs)) ? \
488 (num) / ((bs) / (fsbs)) : (num) * ((fsbs) / (bs)))
490fsStats(
const char *path,
int *totl_kb,
int *free_kb,
int *totl_in,
int *free_in)
int cbdataReferenceValid(const void *p)
#define cbdataReferenceDone(var)
#define cbdataReference(var)
#define cbdataReferenceValidDone(var, ptr)
const char * rawContent() const
size_type length() const
Returns the number of bytes stored in SBuf.
struct StatCounters::@112 syscalls
struct StatCounters::@112::@116 disk
dwrite_q(const size_t wantCapacity)
size_t len
length of content in buf
FREE * free_func
when set, gets called upon object destruction to free buf
struct fde::_fde_flags flags
void fd_open(const int fd, unsigned int, const char *description)
void fd_close(const int fd)
void commSetCloseOnExec(int fd)
int ignoreErrno(int ierrno)
#define debugs(SECTION, LEVEL, CONTENT)
#define COMM_SELECT_WRITE
#define DISK_NO_SPACE_LEFT
static int do_close(diomsg *r, int)
void fatal(const char *message)
void fd_bytes(const int fd, const int len, const IoDirection direction)
int FD_READ_METHOD(int fd, char *buf, int len)
int FD_WRITE_METHOD(int fd, const char *buf, int len)
int file_open(const char *path, int mode)
#define fsbtoblk(num, fsbs, bs)
static void diskCombineWrites(_fde_disk *fdd)
bool FileRename(const SBuf &from, const SBuf &to)
void safeunlink(const char *s, int quiet)
void file_read(int fd, char *buf, int req_len, off_t offset, DRCB *handler, void *client_data)
int fsBlockSize(const char *path, int *blksize)
static PF diskHandleWrite
static void cxx_xfree(void *ptr)
int fsStats(const char *path, int *totl_kb, int *free_kb, int *totl_in, int *free_in)
void file_write(int fd, off_t file_offset, void const *ptr_to_buf, int len, DWCB *handle, void *handle_data, FREE *free_func)
void SetSelect(int, unsigned int, PF *, void *, time_t)
Mark an FD to be watched for its IO status.
int xstatvfs(const char *path, struct statvfs *sfs)
bool close_request
true if file_ or comm_close has been called
void DRCB(int, const char *buf, int size, int errflag, void *data)
void DWCB(int, int, size_t, void *)
int xclose(int fd)
POSIX close(2) equivalent.
int xopen(const char *filename, int oflag, int pmode=0)
POSIX open(2) equivalent.
const char * xstrerr(int error)