mirror of
https://github.com/torvalds/linux.git
synced 2026-10-16 21:00:02 +02:00
liveupdate: Extract luo_file_deserialize_one helper
Extract the logic for deserializing single entries for files into separate helper functions. In preparation to a linked-block serialization for files. This is a pure code movement, no other changes intended. Acked-by: Mike Rapoport (Microsoft) <rppt@kernel.org> Reviewed-by: Pratyush Yadav (Google) <pratyush@kernel.org> Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com> Link: https://patch.msgid.link/20260603154402.468928-6-pasha.tatashin@soleen.com Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
This commit is contained in:
parent
cf071b3536
commit
51b71af922
|
|
@ -753,6 +753,46 @@ int luo_file_finish(struct luo_file_set *file_set)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int luo_file_deserialize_one(struct luo_file_set *file_set,
|
||||
struct luo_file_ser *ser)
|
||||
{
|
||||
struct liveupdate_file_handler *fh;
|
||||
bool handler_found = false;
|
||||
struct luo_file *luo_file;
|
||||
|
||||
down_read(&luo_register_rwlock);
|
||||
list_private_for_each_entry(fh, &luo_file_handler_list, list) {
|
||||
if (!strcmp(fh->compatible, ser->compatible)) {
|
||||
if (try_module_get(fh->ops->owner))
|
||||
handler_found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
up_read(&luo_register_rwlock);
|
||||
|
||||
if (!handler_found) {
|
||||
pr_warn("No registered handler for compatible '%.*s'\n",
|
||||
(int)sizeof(ser->compatible),
|
||||
ser->compatible);
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
luo_file = kzalloc_obj(*luo_file);
|
||||
if (!luo_file) {
|
||||
module_put(fh->ops->owner);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
luo_file->fh = fh;
|
||||
luo_file->file = NULL;
|
||||
luo_file->serialized_data = ser->data;
|
||||
luo_file->token = ser->token;
|
||||
mutex_init(&luo_file->mutex);
|
||||
list_add_tail(&luo_file->list, &file_set->files_list);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* luo_file_deserialize - Reconstructs the list of preserved files in the new kernel.
|
||||
* @file_set: The incoming file_set to fill with deserialized data.
|
||||
|
|
@ -782,6 +822,7 @@ int luo_file_deserialize(struct luo_file_set *file_set,
|
|||
struct luo_file_set_ser *file_set_ser)
|
||||
{
|
||||
struct luo_file_ser *file_ser;
|
||||
int err;
|
||||
u64 i;
|
||||
|
||||
if (!file_set_ser->files) {
|
||||
|
|
@ -809,39 +850,9 @@ int luo_file_deserialize(struct luo_file_set *file_set,
|
|||
*/
|
||||
file_ser = file_set->files;
|
||||
for (i = 0; i < file_set->count; i++) {
|
||||
struct liveupdate_file_handler *fh;
|
||||
bool handler_found = false;
|
||||
struct luo_file *luo_file;
|
||||
|
||||
down_read(&luo_register_rwlock);
|
||||
list_private_for_each_entry(fh, &luo_file_handler_list, list) {
|
||||
if (!strcmp(fh->compatible, file_ser[i].compatible)) {
|
||||
if (try_module_get(fh->ops->owner))
|
||||
handler_found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
up_read(&luo_register_rwlock);
|
||||
|
||||
if (!handler_found) {
|
||||
pr_warn("No registered handler for compatible '%.*s'\n",
|
||||
(int)sizeof(file_ser[i].compatible),
|
||||
file_ser[i].compatible);
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
luo_file = kzalloc_obj(*luo_file);
|
||||
if (!luo_file) {
|
||||
module_put(fh->ops->owner);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
luo_file->fh = fh;
|
||||
luo_file->file = NULL;
|
||||
luo_file->serialized_data = file_ser[i].data;
|
||||
luo_file->token = file_ser[i].token;
|
||||
mutex_init(&luo_file->mutex);
|
||||
list_add_tail(&luo_file->list, &file_set->files_list);
|
||||
err = luo_file_deserialize_one(file_set, &file_ser[i]);
|
||||
if (err)
|
||||
return err;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user