mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
tools/xenstore: add current connection to domain_memory_add() parameters
In order to enable switching memory accounting to the generic array based accounting, add the current connection to the parameters of domain_memory_add(). This requires to add the connection to some other functions, too. Signed-off-by: Juergen Gross <jgross@suse.com> Acked-by: Julien Grall <jgrall@amazon.com>
This commit is contained in:
1 parent
a4ffaa0824
commit
d0740236fd
4 files changed
+33
-23
No files matched your search
@@ -246,7 +246,8 @@ static void free_buffered_data(struct buffered_data *out,
|
||||
}
|
||||
}
|
||||
|
||||
domain_memory_add_nochk(conn->id, -out->hdr.msg.len - sizeof(out->hdr));
|
||||
domain_memory_add_nochk(conn, conn->id,
|
||||
-out->hdr.msg.len - sizeof(out->hdr));
|
||||
|
||||
if (out->hdr.msg.type == XS_WATCH_EVENT) {
|
||||
req = out->pend.req;
|
||||
@@ -631,24 +632,25 @@ int do_tdb_write(struct connection *conn, TDB_DATA *key, TDB_DATA *data,
|
||||
* nodes to new owners.
|
||||
*/
|
||||
if (old_acc.memory)
|
||||
domain_memory_add_nochk(old_domid,
|
||||
domain_memory_add_nochk(conn, old_domid,
|
||||
-old_acc.memory - key->dsize);
|
||||
ret = domain_memory_add(new_domid, data->dsize + key->dsize,
|
||||
no_quota_check);
|
||||
ret = domain_memory_add(conn, new_domid,
|
||||
data->dsize + key->dsize, no_quota_check);
|
||||
if (ret) {
|
||||
/* Error path, so no quota check. */
|
||||
if (old_acc.memory)
|
||||
domain_memory_add_nochk(old_domid,
|
||||
domain_memory_add_nochk(conn, old_domid,
|
||||
old_acc.memory + key->dsize);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* TDB should set errno, but doesn't even set ecode AFAICT. */
|
||||
if (tdb_store(tdb_ctx, *key, *data, TDB_REPLACE) != 0) {
|
||||
domain_memory_add_nochk(new_domid, -data->dsize - key->dsize);
|
||||
domain_memory_add_nochk(conn, new_domid,
|
||||
-data->dsize - key->dsize);
|
||||
/* Error path, so no quota check. */
|
||||
if (old_acc.memory)
|
||||
domain_memory_add_nochk(old_domid,
|
||||
domain_memory_add_nochk(conn, old_domid,
|
||||
old_acc.memory + key->dsize);
|
||||
errno = EIO;
|
||||
return errno;
|
||||
@@ -683,7 +685,7 @@ int do_tdb_delete(struct connection *conn, TDB_DATA *key,
|
||||
|
||||
if (acc->memory) {
|
||||
domid = get_acc_domid(conn, key, acc->domid);
|
||||
domain_memory_add_nochk(domid, -acc->memory - key->dsize);
|
||||
domain_memory_add_nochk(conn, domid, -acc->memory - key->dsize);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -1055,11 +1057,13 @@ void send_reply(struct connection *conn, enum xsd_sockmsg_type type,
|
||||
if (len <= DEFAULT_BUFFER_SIZE) {
|
||||
bdata->buffer = bdata->default_buffer;
|
||||
/* Don't check quota, path might be used for returning error. */
|
||||
domain_memory_add_nochk(conn->id, len + sizeof(bdata->hdr));
|
||||
domain_memory_add_nochk(conn, conn->id,
|
||||
len + sizeof(bdata->hdr));
|
||||
} else {
|
||||
bdata->buffer = talloc_array(bdata, char, len);
|
||||
if (!bdata->buffer ||
|
||||
domain_memory_add_chk(conn->id, len + sizeof(bdata->hdr))) {
|
||||
domain_memory_add_chk(conn, conn->id,
|
||||
len + sizeof(bdata->hdr))) {
|
||||
send_error(conn, ENOMEM);
|
||||
return;
|
||||
}
|
||||
@@ -1124,7 +1128,7 @@ void send_event(struct buffered_data *req, struct connection *conn,
|
||||
}
|
||||
}
|
||||
|
||||
if (domain_memory_add_chk(conn->id, len + sizeof(bdata->hdr))) {
|
||||
if (domain_memory_add_chk(conn, conn->id, len + sizeof(bdata->hdr))) {
|
||||
talloc_free(bdata);
|
||||
return;
|
||||
}
|
||||
@@ -3332,7 +3336,7 @@ static void add_buffered_data(struct buffered_data *bdata,
|
||||
* be smaller. So ignore it. The limit will be applied for any resource
|
||||
* after the state has been fully restored.
|
||||
*/
|
||||
domain_memory_add_nochk(conn->id, len + sizeof(bdata->hdr));
|
||||
domain_memory_add_nochk(conn, conn->id, len + sizeof(bdata->hdr));
|
||||
}
|
||||
|
||||
void read_state_buffered_data(const void *ctx, struct connection *conn,
|
||||
|
||||
@@ -1235,7 +1235,8 @@ static bool domain_chk_quota(struct domain *domain, int mem)
|
||||
return false;
|
||||
}
|
||||
|
||||
int domain_memory_add(unsigned int domid, int mem, bool no_quota_check)
|
||||
int domain_memory_add(struct connection *conn, unsigned int domid, int mem,
|
||||
bool no_quota_check)
|
||||
{
|
||||
struct domain *domain;
|
||||
|
||||
|
||||
@@ -81,25 +81,29 @@ int domain_nbentry_inc(struct connection *conn, unsigned int domid);
|
||||
int domain_nbentry_dec(struct connection *conn, unsigned int domid);
|
||||
int domain_nbentry_fix(unsigned int domid, int num, bool update);
|
||||
unsigned int domain_nbentry(struct connection *conn);
|
||||
int domain_memory_add(unsigned int domid, int mem, bool no_quota_check);
|
||||
int domain_memory_add(struct connection *conn, unsigned int domid, int mem,
|
||||
bool no_quota_check);
|
||||
|
||||
/*
|
||||
* domain_memory_add_chk(): to be used when memory quota should be checked.
|
||||
* Not to be used when specifying a negative mem value, as lowering the used
|
||||
* memory should always be allowed.
|
||||
*/
|
||||
static inline int domain_memory_add_chk(unsigned int domid, int mem)
|
||||
static inline int domain_memory_add_chk(struct connection *conn,
|
||||
unsigned int domid, int mem)
|
||||
{
|
||||
return domain_memory_add(domid, mem, false);
|
||||
return domain_memory_add(conn, domid, mem, false);
|
||||
}
|
||||
|
||||
/*
|
||||
* domain_memory_add_nochk(): to be used when memory quota should not be
|
||||
* checked, e.g. when lowering memory usage, or in an error case for undoing
|
||||
* a previous memory adjustment.
|
||||
*/
|
||||
static inline void domain_memory_add_nochk(unsigned int domid, int mem)
|
||||
static inline void domain_memory_add_nochk(struct connection *conn,
|
||||
unsigned int domid, int mem)
|
||||
{
|
||||
domain_memory_add(domid, mem, true);
|
||||
domain_memory_add(conn, domid, mem, true);
|
||||
}
|
||||
void domain_watch_inc(struct connection *conn);
|
||||
void domain_watch_dec(struct connection *conn);
|
||||
|
||||
@@ -199,7 +199,7 @@ static struct watch *add_watch(struct connection *conn, char *path, char *token,
|
||||
watch->token = talloc_strdup(watch, token);
|
||||
if (!watch->node || !watch->token)
|
||||
goto nomem;
|
||||
if (domain_memory_add(conn->id, strlen(path) + strlen(token),
|
||||
if (domain_memory_add(conn, conn->id, strlen(path) + strlen(token),
|
||||
no_quota_check))
|
||||
goto nomem;
|
||||
|
||||
@@ -274,8 +274,9 @@ int do_unwatch(const void *ctx, struct connection *conn,
|
||||
list_for_each_entry(watch, &conn->watches, list) {
|
||||
if (streq(watch->node, node) && streq(watch->token, vec[1])) {
|
||||
list_del(&watch->list);
|
||||
domain_memory_add_nochk(conn->id, -strlen(watch->node) -
|
||||
strlen(watch->token));
|
||||
domain_memory_add_nochk(conn, conn->id,
|
||||
-strlen(watch->node) -
|
||||
strlen(watch->token));
|
||||
talloc_free(watch);
|
||||
domain_watch_dec(conn);
|
||||
send_ack(conn, XS_UNWATCH);
|
||||
@@ -291,8 +292,8 @@ void conn_delete_all_watches(struct connection *conn)
|
||||
|
||||
while ((watch = list_top(&conn->watches, struct watch, list))) {
|
||||
list_del(&watch->list);
|
||||
domain_memory_add_nochk(conn->id, -strlen(watch->node) -
|
||||
strlen(watch->token));
|
||||
domain_memory_add_nochk(conn, conn->id, -strlen(watch->node) -
|
||||
strlen(watch->token));
|
||||
talloc_free(watch);
|
||||
domain_watch_dec(conn);
|
||||
}
|
||||
|
||||