From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pbs-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 2B2571FF2CF for <inbox@lore.proxmox.com>; Thu, 11 Jul 2024 19:11:12 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 9C74D37A2D; Thu, 11 Jul 2024 19:11:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1720717855; x=1721322655; darn=lists.proxmox.com; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=BJXEFhQ2l9gP0DnIKN6qtIiSl2wOBXV71tv6kFZkcVg=; b=FLB0u+3D7bRKJyWEqRXgnVRjuLx1tHrI+J75hO/f0VWNL6cOP5iIrJ0RCZ/uWL8UHq alFD6Pm7LWOf9GF+cRV1ASlFZk1a3dX4CI/p9JB2kx4v0NL+2V7TRM+An0+YtYx8nNVu cZ48LP287oho2xudOXFSUP0hsFDeqn2no5I7PF7rQiulvSJbNoMWqTXpIrifnMs2KQqS KwsSzCOdgrKrVCP4sHVvB9WInfspuMMaBjWjFo1afnWPvymti02KL6X/SVbtNdwkg1v4 jDb4SMBIPpEjiUuBc+mNDQGnLFjwqv/Z3UyLwvTUV722ByY3lH5O4dEmFsh43p6SDmLn EGkg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1720717855; x=1721322655; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=BJXEFhQ2l9gP0DnIKN6qtIiSl2wOBXV71tv6kFZkcVg=; b=Iq5aeHMo/jxT1RTZ7Y9ifRvOnWkNfZHvciiWeQ9LJ6+FScT6X9cjedGtv7XVZNYIiY opCsV8L8QqSajc+f59oNHwNCVtM8y9L3kGMvPIGgD+sr0OtT44+3cb992576FcoDNKJm ofBPceplIHWYDY1kqHd/Y703ibg09wHC+hmfmImZtqafTaJgMX7wVBA0rBV1T9iklb3I c8iS6JDpM6m5MCuHhhNCEdaI34tdqNK3p66+sye5VAmR4wuSY/pRFheWqvs3LQIDWvMK yBWgHwao7lhWQZpC68/jUdhU+fnmNG5AV0yl7R47ONIoGiz5EqkYJzb2b+QIPT4Zi/cC /ASQ== X-Gm-Message-State: AOJu0YwFAUzFMrMUz3M/brUfPVb7REAi9ipXHPdYKGzhlN68SC9cSrx7 k7vEMbXD3gLeYR8KdAR+i+Vx1jC0EatGiF+6DBHT0SaHMMjELKuHeMkIA09SxnRY2/AZvS4YEwC Ka1lfJXVYeuzE/2jcys5g9eJmk3VDoA78NGPKng== X-Google-Smtp-Source: AGHT+IFXQCCU+B56f1rUQcYtY+J8qtiJrbRnf6Q6tPJaVb2LzKNb/uwcenr/u7A3rtqw9P+SBKzs4Y9lSN0H/HdxBNY= X-Received: by 2002:a17:90a:c386:b0:2c9:7aea:2188 with SMTP id 98e67ed59e1d1-2ca35be79a2mr7264819a91.2.1720717854806; Thu, 11 Jul 2024 10:10:54 -0700 (PDT) MIME-Version: 1.0 References: <20240711170723.1115046-1-c.heiss@proxmox.com> In-Reply-To: <20240711170723.1115046-1-c.heiss@proxmox.com> From: Turkijan <turkijan083@gmail.com> Date: Thu, 11 Jul 2024 13:11:12 -0400 Message-ID: <CAFtnzVeytCY22pYY96eXio54JvhdfUpZ8UQw7MH2YAVAcwTgdQ@mail.gmail.com> To: Proxmox Backup Server development discussion <pbs-devel@lists.proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL 0.147 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain DMARC_PASS -0.1 DMARC pass policy FREEMAIL_ENVFROM_END_DIGIT 0.25 Envelope-from freemail username ends in digit FREEMAIL_FROM 0.001 Sender email is commonly abused enduser mail provider GB_FREEMAIL_NUM 1 Freemail spammy address HTML_MESSAGE 0.001 HTML included in message POISEN_SPAM_PILL_4 0.1 random spam to be learned in bayes RCVD_IN_DNSWL_NONE -0.0001 Sender listed at https://www.dnswl.org/, no trust SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: Re: [pbs-devel] [PATCH proxmox] sys: file: use renameat2() from `nix` crate X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion <pbs-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pbs-devel>, <mailto:pbs-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pbs-devel/> List-Post: <mailto:pbs-devel@lists.proxmox.com> List-Help: <mailto:pbs-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel>, <mailto:pbs-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox Backup Server development discussion <pbs-devel@lists.proxmox.com> Content-Type: multipart/mixed; boundary="===============0501817387647147305==" Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" <pbs-devel-bounces@lists.proxmox.com> --===============0501817387647147305== Content-Type: multipart/alternative; boundary="0000000000007e9c55061cfbd84e" --0000000000007e9c55061cfbd84e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Have you changed dev package? On Thu, Jul 11, 2024 at 1:08=E2=80=AFPM Christoph Heiss <c.heiss@proxmox.co= m> wrote: > Saves us from converting the paths to raw C strings ourselves, thus > simplifying it quite a bit. > > No functional changes. > > Signed-off-by: Christoph Heiss <c.heiss@proxmox.com> > --- > proxmox-sys/src/fs/file.rs | 51 ++++++++++++++++---------------------- > 1 file changed, 22 insertions(+), 29 deletions(-) > > diff --git a/proxmox-sys/src/fs/file.rs b/proxmox-sys/src/fs/file.rs > index ac513891..3b20c4ea 100644 > --- a/proxmox-sys/src/fs/file.rs > +++ b/proxmox-sys/src/fs/file.rs > @@ -10,7 +10,6 @@ use nix::errno::Errno; > use nix::fcntl::OFlag; > use nix::sys::stat; > use nix::unistd; > -use nix::NixPath; > use serde_json::Value; > > use proxmox_lang::try_block; > @@ -266,30 +265,32 @@ pub fn atomic_open_or_create_file<P: AsRef<Path>>( > > // rotate the file into place, but use `RENAME_NOREPLACE`, so in cas= e > 2 processes race against > // the initialization, the first one wins! > - let rename_result =3D temp_file_name.with_nix_path(|c_file_name| { > - path.with_nix_path(|new_path| unsafe { > - // This also works on file systems which don't support > hardlinks (eg. vfat) > - match Errno::result(libc::renameat2( > - libc::AT_FDCWD, > - c_file_name.as_ptr(), > - libc::AT_FDCWD, > - new_path.as_ptr(), > - libc::RENAME_NOREPLACE, > - )) { > - Err(Errno::EINVAL) =3D> (), // dumb file system, try > `link`+`unlink` > - other =3D> return other, > - }; > - // but some file systems don't support `RENAME_NOREPLACE` > + let rename_result =3D match nix::fcntl::renameat2( > + None, // AT_FDCWD > + &temp_file_name, > + None, // AT_FDCWD > + path, > + nix::fcntl::RenameFlags::RENAME_NOREPLACE, > + ) { > + Err(Errno::EINVAL) =3D> { > + // some file systems don't support `RENAME_NOREPLACE` > // so we just use `link` + `unlink` instead > - let result =3D Errno::result(libc::link(c_file_name.as_ptr()= , > new_path.as_ptr())); > - let _ =3D libc::unlink(c_file_name.as_ptr()); > + let result =3D nix::unistd::linkat( > + None, > + &temp_file_name, > + None, > + &path.to_path_buf(), > + nix::unistd::LinkatFlags::NoSymlinkFollow, > + ); > + let _ =3D nix::unistd::unlink(&temp_file_name); > result > - }) > - }); > + } > + other =3D> other, > + }; > > match rename_result { > - Ok(Ok(Ok(_))) =3D> Ok(file), > - Ok(Ok(Err(err))) =3D> { > + Ok(_) =3D> Ok(file), > + Err(err) =3D> { > // if another process has already raced ahead and created > // the file, let's just open theirs instead: > let _ =3D nix::unistd::unlink(&temp_file_name); > @@ -308,14 +309,6 @@ pub fn atomic_open_or_create_file<P: AsRef<Path>>( > ); > } > } > - Ok(Err(err)) =3D> { > - let _ =3D nix::unistd::unlink(&temp_file_name); > - bail!("with_nix_path {:?} failed - {}", path, err); > - } > - Err(err) =3D> { > - let _ =3D nix::unistd::unlink(&temp_file_name); > - bail!("with_nix_path {:?} failed - {}", temp_file_name, err)= ; > - } > } > } > > -- > 2.45.1 > > > > _______________________________________________ > pbs-devel mailing list > pbs-devel@lists.proxmox.com > https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel > > --0000000000007e9c55061cfbd84e Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr">Have you changed dev package?<div><br></div></div><br><div= class=3D"gmail_quote"><div dir=3D"ltr" class=3D"gmail_attr">On Thu, Jul 11= , 2024 at 1:08=E2=80=AFPM Christoph Heiss <<a href=3D"mailto:c.heiss@pro= xmox.com">c.heiss@proxmox.com</a>> wrote:<br></div><blockquote class=3D"= gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(20= 4,204,204);padding-left:1ex">Saves us from converting the paths to raw C st= rings ourselves, thus<br> simplifying it quite a bit.<br> <br> No functional changes.<br> <br> Signed-off-by: Christoph Heiss <<a href=3D"mailto:c.heiss@proxmox.com" t= arget=3D"_blank">c.heiss@proxmox.com</a>><br> ---<br> =C2=A0proxmox-sys/src/fs/<a href=3D"http://file.rs" rel=3D"noreferrer" targ= et=3D"_blank">file.rs</a> | 51 ++++++++++++++++----------------------<br> =C2=A01 file changed, 22 insertions(+), 29 deletions(-)<br> <br> diff --git a/proxmox-sys/src/fs/<a href=3D"http://file.rs" rel=3D"noreferre= r" target=3D"_blank">file.rs</a> b/proxmox-sys/src/fs/<a href=3D"http://fil= e.rs" rel=3D"noreferrer" target=3D"_blank">file.rs</a><br> index ac513891..3b20c4ea 100644<br> --- a/proxmox-sys/src/fs/<a href=3D"http://file.rs" rel=3D"noreferrer" targ= et=3D"_blank">file.rs</a><br> +++ b/proxmox-sys/src/fs/<a href=3D"http://file.rs" rel=3D"noreferrer" targ= et=3D"_blank">file.rs</a><br> @@ -10,7 +10,6 @@ use nix::errno::Errno;<br> =C2=A0use nix::fcntl::OFlag;<br> =C2=A0use nix::sys::stat;<br> =C2=A0use nix::unistd;<br> -use nix::NixPath;<br> =C2=A0use serde_json::Value;<br> <br> =C2=A0use proxmox_lang::try_block;<br> @@ -266,30 +265,32 @@ pub fn atomic_open_or_create_file<P: AsRef<Path= >>(<br> <br> =C2=A0 =C2=A0 =C2=A0// rotate the file into place, but use `RENAME_NOREPLAC= E`, so in case 2 processes race against<br> =C2=A0 =C2=A0 =C2=A0// the initialization, the first one wins!<br> -=C2=A0 =C2=A0 let rename_result =3D temp_file_name.with_nix_path(|c_file_n= ame| {<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 path.with_nix_path(|new_path| unsafe {<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 // This also works on file syste= ms which don't support hardlinks (eg. vfat)<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 match Errno::result(libc::rename= at2(<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 libc::AT_FDCWD,<br= > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 c_file_name.as_ptr= (),<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 libc::AT_FDCWD,<br= > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 new_path.as_ptr(),= <br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 libc::RENAME_NOREP= LACE,<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 )) {<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Err(Errno::EINVAL)= =3D> (), // dumb file system, try `link`+`unlink`<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 other =3D> retu= rn other,<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 };<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 // but some file systems don'= ;t support `RENAME_NOREPLACE`<br> +=C2=A0 =C2=A0 let rename_result =3D match nix::fcntl::renameat2(<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 None, // AT_FDCWD<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 &temp_file_name,<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 None, // AT_FDCWD<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 path,<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 nix::fcntl::RenameFlags::RENAME_NOREPLACE,<br> +=C2=A0 =C2=A0 ) {<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 Err(Errno::EINVAL) =3D> {<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 // some file systems don't s= upport `RENAME_NOREPLACE`<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0// so we just use `link` + = `unlink` instead<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 let result =3D Errno::result(lib= c::link(c_file_name.as_ptr(), new_path.as_ptr()));<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 let _ =3D libc::unlink(c_file_na= me.as_ptr());<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 let result =3D nix::unistd::link= at(<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 None,<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &temp_file_nam= e,<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 None,<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &path.to_path_= buf(),<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 nix::unistd::Linka= tFlags::NoSymlinkFollow,<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 );<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 let _ =3D nix::unistd::unlink(&a= mp;temp_file_name);<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0result<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 })<br> -=C2=A0 =C2=A0 });<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 other =3D> other,<br> +=C2=A0 =C2=A0 };<br> <br> =C2=A0 =C2=A0 =C2=A0match rename_result {<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 Ok(Ok(Ok(_))) =3D> Ok(file),<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 Ok(Ok(Err(err))) =3D> {<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 Ok(_) =3D> Ok(file),<br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 Err(err) =3D> {<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0// if another process has a= lready raced ahead and created<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0// the file, let's just= open theirs instead:<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0let _ =3D nix::unistd::unli= nk(&temp_file_name);<br> @@ -308,14 +309,6 @@ pub fn atomic_open_or_create_file<P: AsRef<Path&= gt;>(<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0);<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0}<br> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0}<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 Ok(Err(err)) =3D> {<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 let _ =3D nix::unistd::unlink(&a= mp;temp_file_name);<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 bail!("with_nix_path {:?} f= ailed - {}", path, err);<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 Err(err) =3D> {<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 let _ =3D nix::unistd::unlink(&a= mp;temp_file_name);<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 bail!("with_nix_path {:?} f= ailed - {}", temp_file_name, err);<br> -=C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br> =C2=A0 =C2=A0 =C2=A0}<br> =C2=A0}<br> <br> -- <br> 2.45.1<br> <br> <br> <br> _______________________________________________<br> pbs-devel mailing list<br> <a href=3D"mailto:pbs-devel@lists.proxmox.com" target=3D"_blank">pbs-devel@= lists.proxmox.com</a><br> <a href=3D"https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel" re= l=3D"noreferrer" target=3D"_blank">https://lists.proxmox.com/cgi-bin/mailma= n/listinfo/pbs-devel</a><br> <br> </blockquote></div> --0000000000007e9c55061cfbd84e-- --===============0501817387647147305== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ pbs-devel mailing list pbs-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel --===============0501817387647147305==--