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
4fe6f1f0
Unverified
Commit
4fe6f1f0
authored
Dec 13, 2023
by
Nils Goroll
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Reimplement logbuffer dsk block pool using BUDDY_POOL()
parent
e89ff1ee
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
19 additions
and
52 deletions
+19
-52
fellow_log.c
src/fellow_log.c
+19
-52
No files found.
src/fellow_log.c
View file @
4fe6f1f0
...
@@ -420,8 +420,8 @@ assert_lbuf_dsk_resv(void)
...
@@ -420,8 +420,8 @@ assert_lbuf_dsk_resv(void)
assert
(
LBUF_DSK_RSV_REQS
<=
BUDDY_REQS_MAX
);
assert
(
LBUF_DSK_RSV_REQS
<=
BUDDY_REQS_MAX
);
}
}
// dsk
request
// dsk
block pool
BUDDY_
REQS
(
lbuf_dskpool_s
,
LBUF_DSK_RSV_REQS
);
BUDDY_
POOL
(
lbuf_dskpool
,
LBUF_DSK_RSV_REQS
);
// this is the memory request for dskpool
// this is the memory request for dskpool
BUDDY_REQS
(
lbuf_dskpool_mem_s
,
1
);
BUDDY_REQS
(
lbuf_dskpool_mem_s
,
1
);
// memory for flush_finish
// memory for flush_finish
...
@@ -467,8 +467,7 @@ struct fellow_logbuffer {
...
@@ -467,8 +467,7 @@ struct fellow_logbuffer {
struct
fellow_logbuffer_ff
*
ff
;
struct
fellow_logbuffer_ff
*
ff
;
struct
lbuf_ff_mem_s
ff_mem
;
struct
lbuf_ff_mem_s
ff_mem
;
struct
lbuf_dskpool_mem_s
dskpool_mem
;
struct
lbuf_dskpool_mem_s
dskpool_mem
;
struct
lbuf_dskpool_s
(
*
dskpool
)[
2
];
struct
lbuf_dskpool
*
dskpool
;
unsigned
active_reqs
;
};
};
#define LBUF_OK(lbuf) ( \
#define LBUF_OK(lbuf) ( \
...
@@ -2015,8 +2014,8 @@ logbuffer_fini_dskpool(struct fellow_logbuffer *lbuf)
...
@@ -2015,8 +2014,8 @@ logbuffer_fini_dskpool(struct fellow_logbuffer *lbuf)
size_t
sz
;
size_t
sz
;
if
(
lbuf
->
dskpool
!=
NULL
)
{
if
(
lbuf
->
dskpool
!=
NULL
)
{
buddy_alloc_wait_done
(
&
(
*
lbuf
->
dskpool
)[
0
].
reqs
);
BUDDY_POOL_FINI
(
lbuf
->
dskpool
);
buddy_alloc_wait_done
(
&
(
*
lbuf
->
dskpool
)[
1
].
reqs
);
sz
=
buddy_rndup
(
lbuf
->
membuddy
,
sizeof
*
lbuf
->
dskpool
);
sz
=
buddy_rndup
(
lbuf
->
membuddy
,
sizeof
*
lbuf
->
dskpool
);
alloc
=
BUDDY_PTR_EXTENT
(
lbuf
->
dskpool
,
sz
);
alloc
=
BUDDY_PTR_EXTENT
(
lbuf
->
dskpool
,
sz
);
buddy_return1_ptr_extent
(
lbuf
->
membuddy
,
&
alloc
);
buddy_return1_ptr_extent
(
lbuf
->
membuddy
,
&
alloc
);
...
@@ -2291,14 +2290,14 @@ log_blocks_alloc_from_reqs(struct buddy_reqs *reqs,
...
@@ -2291,14 +2290,14 @@ log_blocks_alloc_from_reqs(struct buddy_reqs *reqs,
}
}
static
void
static
void
logbuffer_fill_dsk
req
(
const
struct
fellow_logbuffer
*
lbuf
,
logbuffer_fill_dsk
pool
(
struct
buddy_reqs
*
reqs
,
const
void
*
priv
)
struct
buddy_reqs
*
reqs
)
{
{
unsigned
i
;
const
struct
fellow_logbuffer
*
lbuf
;
uint8_t
pri
;
uint8_t
pri
;
unsigned
u
;
CHECK_OBJ_NOTNULL
(
lbuf
,
FELLOW_LOGBUFFER_MAGIC
);
CHECK_OBJ_NOTNULL
(
reqs
,
BUDDY_REQS_MAGIC
);
CHECK_OBJ_NOTNULL
(
reqs
,
BUDDY_REQS_MAGIC
);
buddy_alloc_wait_done
(
reqs
);
CAST_OBJ_NOTNULL
(
lbuf
,
priv
,
FELLOW_LOGBUFFER_MAGIC
);
if
(
lbuf
->
regions_to_free
&&
if
(
lbuf
->
regions_to_free
&&
regionlist_used
(
lbuf
->
regions_to_free
))
regionlist_used
(
lbuf
->
regions_to_free
))
...
@@ -2308,45 +2307,18 @@ logbuffer_fill_dskreq(const struct fellow_logbuffer *lbuf,
...
@@ -2308,45 +2307,18 @@ logbuffer_fill_dskreq(const struct fellow_logbuffer *lbuf,
BUDDY_REQS_PRI
(
reqs
,
pri
);
BUDDY_REQS_PRI
(
reqs
,
pri
);
for
(
i
=
0
;
i
<
reqs
->
space
;
i
++
)
for
(
u
=
0
;
u
<
reqs
->
space
;
u
++
)
AN
(
buddy_req_page
(
reqs
,
MIN_FELLOW_BITS
,
0
));
AN
(
buddy_req_page
(
reqs
,
MIN_FELLOW_BITS
,
0
));
(
void
)
buddy_alloc_async
(
reqs
);
CHECK_OBJ_NOTNULL
(
reqs
,
BUDDY_REQS_MAGIC
);
}
}
static
struct
buddy_reqs
*
// defines lbuf_dskpool_get()
logbuffer_get_dskpool
(
struct
fellow_logbuffer
*
lbuf
)
BUDDY_POOL_GET_FUNC
(
lbuf_dskpool
,
static
)
{
struct
buddy_reqs
*
reqs
;
int
i
;
AN
(
lbuf
->
dskpool
);
/* i < 3: If both reqs are empty, at iteration 3 we
* must hit the first filled alloc
*/
for
(
i
=
0
;
i
<
3
;
i
++
)
{
AZ
(
lbuf
->
active_reqs
&
~
1
);
reqs
=
&
(
*
lbuf
->
dskpool
)[
lbuf
->
active_reqs
].
reqs
;
CHECK_OBJ_NOTNULL
(
reqs
,
BUDDY_REQS_MAGIC
);
if
(
buddy_reqs_next_ready
(
reqs
))
return
(
reqs
);
(
void
)
buddy_alloc_async_wait
(
reqs
);
if
(
buddy_reqs_next_ready
(
reqs
))
return
(
reqs
);
// ret2
logbuffer_fill_dskreq
(
lbuf
,
reqs
);
lbuf
->
active_reqs
=
!
lbuf
->
active_reqs
;
}
WRONG
(
"Expected ret2 to return"
);
//NEEDLESS(return(NULL));
}
static
void
static
void
logbuffer_prep_dskpool
(
struct
fellow_logbuffer
*
lbuf
,
unsigned
urgent
)
logbuffer_prep_dskpool
(
struct
fellow_logbuffer
*
lbuf
,
unsigned
urgent
)
{
{
struct
lbuf_dskpool
_s
(
*
dskpool
)[
2
]
;
struct
lbuf_dskpool
*
dskpool
;
struct
buddy_ptr_extent
alloc
;
struct
buddy_ptr_extent
alloc
;
unsigned
i
;
if
(
lbuf
->
dskpool
!=
NULL
)
if
(
lbuf
->
dskpool
!=
NULL
)
return
;
return
;
...
@@ -2386,10 +2358,8 @@ logbuffer_prep_dskpool(struct fellow_logbuffer *lbuf, unsigned urgent)
...
@@ -2386,10 +2358,8 @@ logbuffer_prep_dskpool(struct fellow_logbuffer *lbuf, unsigned urgent)
assert
(
alloc
.
size
>=
sizeof
*
lbuf
->
dskpool
);
assert
(
alloc
.
size
>=
sizeof
*
lbuf
->
dskpool
);
dskpool
=
alloc
.
ptr
;
dskpool
=
alloc
.
ptr
;
for
(
i
=
0
;
i
<
2
;
i
++
)
{
BUDDY_POOL_INIT
(
dskpool
,
lbuf
->
dskbuddy
,
BUDDY_REQS_INIT
(
&
(
*
dskpool
)[
i
],
lbuf
->
dskbuddy
);
logbuffer_fill_dskpool
,
lbuf
);
logbuffer_fill_dskreq
(
lbuf
,
&
(
*
dskpool
)[
i
].
reqs
);
}
lbuf
->
dskpool
=
dskpool
;
lbuf
->
dskpool
=
dskpool
;
}
}
}
}
...
@@ -2432,7 +2402,7 @@ logbuffer_alloc_some(struct fellow_logbuffer *lbuf,
...
@@ -2432,7 +2402,7 @@ logbuffer_alloc_some(struct fellow_logbuffer *lbuf,
while
(
n
>
0
)
{
while
(
n
>
0
)
{
log_blocks_alloc_from_reqs
(
log_blocks_alloc_from_reqs
(
l
ogbuffer_get_dskpool
(
lbuf
),
l
buf_dskpool_get
(
lbuf
->
dskpool
,
lbuf
),
&
arr
,
&
n
);
&
arr
,
&
n
);
}
}
...
@@ -3187,12 +3157,9 @@ logbuffer_availblks(const struct fellow_logbuffer *lbuf)
...
@@ -3187,12 +3157,9 @@ logbuffer_availblks(const struct fellow_logbuffer *lbuf)
if
(
lbuf
->
logreg
!=
NULL
)
if
(
lbuf
->
logreg
!=
NULL
)
avail
+=
lbuf
->
logreg
->
free_n
;
avail
+=
lbuf
->
logreg
->
free_n
;
if
(
lbuf
->
dskpool
!=
NULL
)
{
if
(
lbuf
->
dskpool
!=
NULL
)
avail
+=
buddy_reqs_next_ready
(
&
(
*
lbuf
->
dskpool
)[
0
].
reqs
);
avail
+=
buddy_reqs_next_ready
(
avail
+=
buddy_reqs_next_ready
(
&
(
*
lbuf
->
dskpool
)[
1
].
reqs
);
lbuf_dskpool_get
(
lbuf
->
dskpool
,
lbuf
));
}
return
(
avail
);
return
(
avail
);
}
}
static
void
static
void
...
...
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