Refer to constraint for failover
P1 P2
------------ --------------
cachefiles_ondemand_daemon_read cachefiles_ondemand_fd_release
xa_lock
# pick one request
xa_unlock
xa_lock
object->ondemand_id = CACHEFILES_ONDEMAND_ID_CLOSED, i.e. -1
xa_unlock
msg->object_id = object->ondemand_id (oops, invalid ondemand_id,i.e. -1)
When daemon finishes cachefiles_ondemand_daemon_read() and returns to user space, don't close anonfd before CACHEFILES_IOC_READ_COMPLETE is replied.
P1 P2
------------ --------------
cachefiles_ondemand_daemon_read
xa_lock
# pick one request, e.g. READ request
xa_unlock
msg->object_id = object->ondemand_id
# return to user space
cachefiles_ondemand_fd_release
# free ondemand_id
# later ondemand_id is reused for another new object
# start to handle this READ request
oops, msg->object_id now is reused for another new object