Am 12.03.2013 um 09:30 hat Wenchao Xia geschrieben: > I redesigned the structure, Following is the fake code: > > typedef struct BdrvActionOps { > /* check the request's validation, allocate p_opaque if needed */ > int (*check)(BlockdevAction *action, void **p_opaque, Error **errp); > /* take the action */ > int (*submit)(BlockdevAction *action, void *opaque, Error **errp); > /* update emulator */ > int (*commit)(BlockdevAction *action, void *opaque, Error **errp); > /* cancel the action */ > int (*rollback)(BlockdevAction *action, void *opaque, Error **errp); > } BdrvActionOps;
Why do you need the split of prepare into check/submit? If you have prepare/commit/abort, everybody will recognise this as the standard transaction pattern because this is just how it's done. Deviating from it needs a good justification in my opinion. Kevin