[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 062/104] virtiofsd: Handle hard reboot
From: |
Misono Tomohiro |
Subject: |
Re: [PATCH 062/104] virtiofsd: Handle hard reboot |
Date: |
Mon, 20 Jan 2020 15:46:56 +0900 |
> From: "Dr. David Alan Gilbert" <address@hidden>
>
> Handle a
> mount
> hard reboot (without unmount)
> mount
>
> we get another 'init' which FUSE doesn't normally expect.
>
> Signed-off-by: Dr. David Alan Gilbert <address@hidden>
> ---
> tools/virtiofsd/fuse_lowlevel.c | 16 +++++++++++++++-
> 1 file changed, 15 insertions(+), 1 deletion(-)
>
> diff --git a/tools/virtiofsd/fuse_lowlevel.c b/tools/virtiofsd/fuse_lowlevel.c
> index 2d1d1a2e59..45125ef66a 100644
> --- a/tools/virtiofsd/fuse_lowlevel.c
> +++ b/tools/virtiofsd/fuse_lowlevel.c
> @@ -2436,7 +2436,21 @@ void fuse_session_process_buf_int(struct fuse_session
> *se,
> goto reply_err;
> }
> } else if (in->opcode == FUSE_INIT || in->opcode == CUSE_INIT) {
> - goto reply_err;
> + if (fuse_lowlevel_is_virtio(se)) {
> + /*
> + * TODO: This is after a hard reboot typically, we need to do
> + * a destroy, but we can't reply to this request yet so
> + * we can't use do_destroy
> + */
Hi,
I wonder what is the TODO actually. Is this just to provide a common
function for both here and do_destroy() or more than that?
Thanks
Misono
> + fuse_log(FUSE_LOG_DEBUG, "%s: reinit\n", __func__);
> + se->got_destroy = 1;
> + se->got_init = 0;
> + if (se->op.destroy) {
> + se->op.destroy(se->userdata);
> + }
> + } else {
> + goto reply_err;
> + }
> }
>
> err = EACCES;
> --
> 2.23.0