Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
slash
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
uplex-varnish
slash
Commits
1883ee5b
Unverified
Commit
1883ee5b
authored
Dec 21, 2023
by
Nils Goroll
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
logbuffer: When we need a regionlist under the logmtx, check the pool for memory
parent
9d7406ea
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
35 additions
and
12 deletions
+35
-12
fellow_log.c
src/fellow_log.c
+22
-6
fellow_regionlist.h
src/fellow_regionlist.h
+13
-6
No files found.
src/fellow_log.c
View file @
1883ee5b
...
@@ -2598,6 +2598,26 @@ logbuffer_flush_finish(struct fellow_fd *ffd,
...
@@ -2598,6 +2598,26 @@ logbuffer_flush_finish(struct fellow_fd *ffd,
static
void
static
void
logbuffer_flush_finish_work
(
struct
worker
*
wrk
,
void
*
priv
);
logbuffer_flush_finish_work
(
struct
worker
*
wrk
,
void
*
priv
);
/*
* for use under the lock. Uses the mempool if possible
*/
static
void
logbuffer_need_regions_to_free
(
struct
fellow_logbuffer
*
lbuf
)
{
if
(
lbuf
->
regions_to_free
!=
NULL
)
return
;
if
(
lbuf_mempool_avail
(
lbuf
->
mempool
))
{
lbuf
->
regions_to_free
=
regionlist_init
(
buddy_get_next_ptr_page
(
lbuf_mempool_get
(
lbuf
->
mempool
,
lbuf
)),
lbuf
->
membuddy
);
}
else
lbuf
->
regions_to_free
=
regionlist_alloc
(
lbuf
->
membuddy
);
}
static
void
static
void
logbuffer_flush
(
struct
fellow_fd
*
ffd
,
logbuffer_flush
(
struct
fellow_fd
*
ffd
,
struct
fellow_logbuffer
*
lbuf
,
unsigned
doclose
,
unsigned
can
)
struct
fellow_logbuffer
*
lbuf
,
unsigned
doclose
,
unsigned
can
)
...
@@ -2654,9 +2674,7 @@ logbuffer_flush(struct fellow_fd *ffd,
...
@@ -2654,9 +2674,7 @@ logbuffer_flush(struct fellow_fd *ffd,
return
;
return
;
}
}
if
(
lbuf
->
regions_to_free
==
NULL
)
{
logbuffer_need_regions_to_free
(
lbuf
);
lbuf
->
regions_to_free
=
regionlist_alloc
(
ffd
->
membuddy
);
}
if
(
lbuf
->
head
.
block
==
NULL
)
{
if
(
lbuf
->
head
.
block
==
NULL
)
{
if
(
!
cap
(
can
,
LBUF_CAN_REF
)
||
lbuf
->
ff
!=
NULL
)
if
(
!
cap
(
can
,
LBUF_CAN_REF
)
||
lbuf
->
ff
!=
NULL
)
...
@@ -4349,9 +4367,7 @@ fellow_log_entries_add(struct fellow_fd *ffd,
...
@@ -4349,9 +4367,7 @@ fellow_log_entries_add(struct fellow_fd *ffd,
AN
(
entry
);
AN
(
entry
);
if
(
prep
->
tofree
.
n
)
{
if
(
prep
->
tofree
.
n
)
{
if
(
lbuf
->
regions_to_free
==
NULL
)
logbuffer_need_regions_to_free
(
lbuf
);
lbuf
->
regions_to_free
=
regionlist_alloc
(
ffd
->
membuddy
);
prep
->
tofree
.
regionlist
=
lbuf
->
regions_to_free
;
prep
->
tofree
.
regionlist
=
lbuf
->
regions_to_free
;
regionlist_stk_flush
(
prep
->
tofree
);
regionlist_stk_flush
(
prep
->
tofree
);
}
}
...
...
src/fellow_regionlist.h
View file @
1883ee5b
...
@@ -182,17 +182,12 @@ regl_init(const struct buddy_ptr_page alloc, size_t off)
...
@@ -182,17 +182,12 @@ regl_init(const struct buddy_ptr_page alloc, size_t off)
}
}
static
struct
regionlist
*
static
struct
regionlist
*
regionlist_
alloc
(
buddy_t
*
membuddy
)
regionlist_
init
(
struct
buddy_ptr_page
alloc
,
buddy_t
*
membuddy
)
{
{
struct
buddy_ptr_page
alloc
;
struct
regionlist
*
rl
;
struct
regionlist
*
rl
;
struct
regl
*
r
;
struct
regl
*
r
;
size_t
sz
;
size_t
sz
;
alloc
=
buddy_alloc1_ptr_page_wait
(
membuddy
,
FEP_MEM_FREE
,
regl_bits
,
regl_bits_cram
);
AN
(
alloc
.
ptr
);
sz
=
(
size_t
)
1
<<
alloc
.
bits
;
sz
=
(
size_t
)
1
<<
alloc
.
bits
;
assert
(
sz
>=
(
2
*
sizeof
*
r
+
sizeof
*
rl
));
assert
(
sz
>=
(
2
*
sizeof
*
r
+
sizeof
*
rl
));
...
@@ -209,6 +204,18 @@ regionlist_alloc(buddy_t *membuddy)
...
@@ -209,6 +204,18 @@ regionlist_alloc(buddy_t *membuddy)
return
(
rl
);
return
(
rl
);
}
}
static
struct
regionlist
*
regionlist_alloc
(
buddy_t
*
membuddy
)
{
struct
buddy_ptr_page
alloc
;
alloc
=
buddy_alloc1_ptr_page_wait
(
membuddy
,
FEP_MEM_FREE
,
regl_bits
,
regl_bits_cram
);
AN
(
alloc
.
ptr
);
return
(
regionlist_init
(
alloc
,
membuddy
));
}
static
unsigned
static
unsigned
regionlist_used
(
const
struct
regionlist
*
rl
)
regionlist_used
(
const
struct
regionlist
*
rl
)
{
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment