notify: pass error to notifier with return
Pass an error object as the third parameter to "notifier with return" notifiers, so clients no longer need to bundle an error object in the opaque data. The new parameter is used in a later patch. Signed-off-by: Steve Sistare <steven.sistare@oracle.com> Reviewed-by: Peter Xu <peterx@redhat.com> Reviewed-by: David Hildenbrand <david@redhat.com> Link: https://lore.kernel.org/r/1708622920-68779-2-git-send-email-steven.sistare@oracle.com Signed-off-by: Peter Xu <peterx@redhat.com>
This commit is contained in:
parent
c9a7e83c9d
commit
be19d836cd
@ -2084,7 +2084,7 @@ static int vhost_user_postcopy_end(struct vhost_dev *dev, Error **errp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int vhost_user_postcopy_notifier(NotifierWithReturn *notifier,
|
static int vhost_user_postcopy_notifier(NotifierWithReturn *notifier,
|
||||||
void *opaque)
|
void *opaque, Error **errp)
|
||||||
{
|
{
|
||||||
struct PostcopyNotifyData *pnd = opaque;
|
struct PostcopyNotifyData *pnd = opaque;
|
||||||
struct vhost_user *u = container_of(notifier, struct vhost_user,
|
struct vhost_user *u = container_of(notifier, struct vhost_user,
|
||||||
|
@ -633,7 +633,8 @@ static void virtio_balloon_free_page_done(VirtIOBalloon *s)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
virtio_balloon_free_page_hint_notify(NotifierWithReturn *n, void *data)
|
virtio_balloon_free_page_hint_notify(NotifierWithReturn *n, void *data,
|
||||||
|
Error **errp)
|
||||||
{
|
{
|
||||||
VirtIOBalloon *dev = container_of(n, VirtIOBalloon, free_page_hint_notify);
|
VirtIOBalloon *dev = container_of(n, VirtIOBalloon, free_page_hint_notify);
|
||||||
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
|
VirtIODevice *vdev = VIRTIO_DEVICE(dev);
|
||||||
|
@ -45,12 +45,15 @@ bool notifier_list_empty(NotifierList *list);
|
|||||||
/* Same as Notifier but allows .notify() to return errors */
|
/* Same as Notifier but allows .notify() to return errors */
|
||||||
typedef struct NotifierWithReturn NotifierWithReturn;
|
typedef struct NotifierWithReturn NotifierWithReturn;
|
||||||
|
|
||||||
|
typedef int (*NotifierWithReturnFunc)(NotifierWithReturn *notifier, void *data,
|
||||||
|
Error **errp);
|
||||||
|
|
||||||
struct NotifierWithReturn {
|
struct NotifierWithReturn {
|
||||||
/**
|
/**
|
||||||
* Return 0 on success (next notifier will be invoked), otherwise
|
* Return 0 on success (next notifier will be invoked), otherwise
|
||||||
* notifier_with_return_list_notify() will stop and return the value.
|
* notifier_with_return_list_notify() will stop and return the value.
|
||||||
*/
|
*/
|
||||||
int (*notify)(NotifierWithReturn *notifier, void *data);
|
NotifierWithReturnFunc notify;
|
||||||
QLIST_ENTRY(NotifierWithReturn) node;
|
QLIST_ENTRY(NotifierWithReturn) node;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -69,6 +72,6 @@ void notifier_with_return_list_add(NotifierWithReturnList *list,
|
|||||||
void notifier_with_return_remove(NotifierWithReturn *notifier);
|
void notifier_with_return_remove(NotifierWithReturn *notifier);
|
||||||
|
|
||||||
int notifier_with_return_list_notify(NotifierWithReturnList *list,
|
int notifier_with_return_list_notify(NotifierWithReturnList *list,
|
||||||
void *data);
|
void *data, Error **errp);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -80,7 +80,7 @@ int postcopy_notify(enum PostcopyNotifyReason reason, Error **errp)
|
|||||||
pnd.errp = errp;
|
pnd.errp = errp;
|
||||||
|
|
||||||
return notifier_with_return_list_notify(&postcopy_notifier_list,
|
return notifier_with_return_list_notify(&postcopy_notifier_list,
|
||||||
&pnd);
|
&pnd, errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -428,7 +428,7 @@ int precopy_notify(PrecopyNotifyReason reason, Error **errp)
|
|||||||
pnd.reason = reason;
|
pnd.reason = reason;
|
||||||
pnd.errp = errp;
|
pnd.errp = errp;
|
||||||
|
|
||||||
return notifier_with_return_list_notify(&precopy_notifier_list, &pnd);
|
return notifier_with_return_list_notify(&precopy_notifier_list, &pnd, errp);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t ram_bytes_remaining(void)
|
uint64_t ram_bytes_remaining(void)
|
||||||
|
@ -61,13 +61,14 @@ void notifier_with_return_remove(NotifierWithReturn *notifier)
|
|||||||
QLIST_REMOVE(notifier, node);
|
QLIST_REMOVE(notifier, node);
|
||||||
}
|
}
|
||||||
|
|
||||||
int notifier_with_return_list_notify(NotifierWithReturnList *list, void *data)
|
int notifier_with_return_list_notify(NotifierWithReturnList *list, void *data,
|
||||||
|
Error **errp)
|
||||||
{
|
{
|
||||||
NotifierWithReturn *notifier, *next;
|
NotifierWithReturn *notifier, *next;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
QLIST_FOREACH_SAFE(notifier, &list->notifiers, node, next) {
|
QLIST_FOREACH_SAFE(notifier, &list->notifiers, node, next) {
|
||||||
ret = notifier->notify(notifier, data);
|
ret = notifier->notify(notifier, data, errp);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user