[sheepdog] [PATCH] sheep/md: fix guest file system read-only error
Liu Yuan
namei.unix at gmail.com
Wed Jul 2 11:36:22 CEST 2014
On Mon, Jun 30, 2014 at 08:53:36PM +0800, Ruoyu wrote:
> If using md, it is easy to re-produce the error when sheepdog is
> doing recovery. The error message is just like as below.
>
> ERROR [io 30895] md_move_object(630) failed to create
> /mnt/sheepdog/obj2/0082aba600000056
> ERROR [io 30895] md_check_and_move(661) move old
> /mnt/sheepdog/obj/0082aba600000056 to new
> /mnt/sheepdog/obj2/0082aba600000056 failed
>
> If the above target object is being written unfortunately by other
> thread at that time, atomic_create_and_write return -1, and then,
> md_exist return false so that guest file system catch it.
>
> Therefore, I think we should check errno if atomic_create_and_write
> is failure. If the temp file exist, in another word, someone is
> writting it, just return success to avoid the error.
>
> Signed-off-by: Ruoyu <liangry at ucweb.com>
> ---
> sheep/md.c | 8 +++++---
> 1 file changed, 5 insertions(+), 3 deletions(-)
>
> diff --git a/sheep/md.c b/sheep/md.c
> index 538f696..a1c950e 100644
> --- a/sheep/md.c
> +++ b/sheep/md.c
> @@ -627,9 +627,11 @@ static int md_move_object(uint64_t oid, const char *old, const char *new)
> }
>
> if (atomic_create_and_write(new, buf.buf, buf.len, false) < 0) {
> - sd_err("failed to create %s", new);
> - ret = -1;
> - goto out_close;
> + if (errno != EEXIST) {
> + sd_err("failed to create %s", new);
> + ret = -1;
> + goto out_close;
> + }
> }
> unlink(old);
> ret = 0;
> --
> 1.8.3.2
>
>
> --
> sheepdog mailing list
> sheepdog at lists.wpkg.org
> http://lists.wpkg.org/mailman/listinfo/sheepdog
Applied thanks
Yuan
More information about the sheepdog
mailing list