unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#56880] [PATCH] gnu: system: file-systems: Add shared flag.
@ 2022-08-02 11:23 Oleg Pykhalov
  2022-08-03 15:21 ` Ludovic Courtès
  0 siblings, 1 reply; 5+ messages in thread
From: Oleg Pykhalov @ 2022-08-02 11:23 UTC (permalink / raw)
  To: 56880; +Cc: Oleg Pykhalov

* gnu/build/file-systems.scm (mount-flags->bit-mask, mount-file-system):
Handle shared flag.
* gnu/system/file-systems.scm (invalid-file-system-flags): Add shared to known
flags.
* guix/build/syscalls.scm (MS_SHARED): New variable.
(option-string->mount-flags): Handle shared flag.
* doc/guix.texi (File Systems): Document shared flag.
---
 doc/guix.texi               | 5 +++--
 gnu/build/file-systems.scm  | 6 ++++++
 gnu/system/file-systems.scm | 4 +++-
 guix/build/syscalls.scm     | 6 +++++-
 4 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/doc/guix.texi b/doc/guix.texi
index 9d17050ffc..106ab428d9 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -16376,8 +16376,9 @@ include @code{read-only}, @code{bind-mount}, @code{no-dev} (disallow
 access to special files), @code{no-suid} (ignore setuid and setgid
 bits), @code{no-atime} (do not update file access times),
 @code{strict-atime} (update file access time), @code{lazy-time} (only
-update time on the in-memory version of the file inode), and
-@code{no-exec} (disallow program execution).
+update time on the in-memory version of the file inode),
+@code{no-exec} (disallow program execution), and @code{shared} (make the
+mount shared).
 @xref{Mount-Unmount-Remount,,, libc, The GNU C Library Reference
 Manual}, for more information on these flags.
 
diff --git a/gnu/build/file-systems.scm b/gnu/build/file-systems.scm
index 1d3b33e7bd..b9d46c9350 100644
--- a/gnu/build/file-systems.scm
+++ b/gnu/build/file-systems.scm
@@ -6,6 +6,7 @@
 ;;; Copyright © 2019–2021 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2019 David C. Trudgian <dave@trudgian.net>
 ;;; Copyright © 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
+;;; Copyright © 2022 Oleg Pykhalov <go.wigust@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1123,6 +1124,8 @@ (define (mount-flags->bit-mask flags)
        (logior MS_STRICTATIME (loop rest)))
       (('lazy-time rest ...)
        (logior MS_LAZYTIME (loop rest)))
+      (('shared rest ...)
+       (loop rest))
       (()
        0))))
 
@@ -1186,6 +1189,9 @@ (define (mount-nfs source mount-point type flags options)
         (cond
          ((string-prefix? "nfs" type)
           (mount-nfs source target type flags options))
+         ((memq 'shared (file-system-flags fs))
+          (mount source target type flags options)
+          (mount "none" target #f MS_SHARED))
          (else
           (mount source target type flags options)))
 
diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm
index f8f4276283..464b76a2ca 100644
--- a/gnu/system/file-systems.scm
+++ b/gnu/system/file-systems.scm
@@ -4,6 +4,7 @@
 ;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
 ;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2022 Oleg Pykhalov <go.wigust@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -121,7 +122,8 @@ (define invalid-file-system-flags
     ;; Note: Keep in sync with 'mount-flags->bit-mask'.
     (let ((known-flags '(read-only
                          bind-mount no-suid no-dev no-exec
-                         no-atime strict-atime lazy-time)))
+                         no-atime strict-atime lazy-time
+                         shared)))
       (lambda (flags)
         "Return the subset of FLAGS that is invalid."
         (remove (cut memq <> known-flags) flags))))
diff --git a/guix/build/syscalls.scm b/guix/build/syscalls.scm
index a7401fd73f..ef0b1d67fd 100644
--- a/guix/build/syscalls.scm
+++ b/guix/build/syscalls.scm
@@ -8,6 +8,7 @@
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2021 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2021 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2022 Oleg Pykhalov <go.wigust@gmail.com>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -49,6 +50,7 @@ (define-module (guix build syscalls)
             MS_RELATIME
             MS_BIND
             MS_MOVE
+            MS_SHARED
             MS_LAZYTIME
             MNT_FORCE
             MNT_DETACH
@@ -537,6 +539,7 @@ (define MS_REMOUNT           32)
 (define MS_NOATIME         1024)
 (define MS_BIND            4096)
 (define MS_MOVE            8192)
+(define MS_SHARED       1048576)
 (define MS_RELATIME     2097152)
 (define MS_STRICTATIME 16777216)
 (define MS_LAZYTIME    33554432)
@@ -637,7 +640,8 @@ (define lst
                         ("nodev"      => MS_NODEV)
                         ("noexec"     => MS_NOEXEC)
                         ("relatime"   => MS_RELATIME)
-                        ("noatime"    => MS_NOATIME)))))))
+                        ("noatime"    => MS_NOATIME)
+                        ("shared"     => MS_SHARED)))))))
 
 (define (mount-flags mount)
   "Return the mount flags of MOUNT, a <mount> record, as an inclusive or of
-- 
2.37.0





^ permalink raw reply	[flat|nested] 5+ messages in thread

* [bug#56880] [PATCH] gnu: system: file-systems: Add shared flag.
  2022-08-02 11:23 [bug#56880] [PATCH] gnu: system: file-systems: Add shared flag Oleg Pykhalov
@ 2022-08-03 15:21 ` Ludovic Courtès
  2022-08-04 13:20   ` Oleg Pykhalov
  0 siblings, 1 reply; 5+ messages in thread
From: Ludovic Courtès @ 2022-08-03 15:21 UTC (permalink / raw)
  To: Oleg Pykhalov; +Cc: 56880

Hi Oleg,

Oleg Pykhalov <go.wigust@gmail.com> skribis:

> * gnu/build/file-systems.scm (mount-flags->bit-mask, mount-file-system):
> Handle shared flag.
> * gnu/system/file-systems.scm (invalid-file-system-flags): Add shared to known
> flags.
> * guix/build/syscalls.scm (MS_SHARED): New variable.
> (option-string->mount-flags): Handle shared flag.
> * doc/guix.texi (File Systems): Document shared flag.

LGTM, thanks!

Ludo’.




^ permalink raw reply	[flat|nested] 5+ messages in thread

* [bug#56880] [PATCH] gnu: system: file-systems: Add shared flag.
  2022-08-03 15:21 ` Ludovic Courtès
@ 2022-08-04 13:20   ` Oleg Pykhalov
  2022-08-05  9:41     ` Ludovic Courtès
  0 siblings, 1 reply; 5+ messages in thread
From: Oleg Pykhalov @ 2022-08-04 13:20 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 56880

[-- Attachment #1: Type: text/plain, Size: 978 bytes --]

Hi Ludovic,

Thank you for the review.

Ludovic Courtès <ludo@gnu.org> writes:

[…]

>> (option-string->mount-flags): Handle shared flag.

I looked again on this procedure before merge.  With applied patch it
will return a wrong bitmask according to the manual page:

mount(2)

    The  only other flags that can be specified while changing the propaga‐
    tion type are MS_REC (described below)  and  MS_SILENT  (which  is  ig‐
    nored).

Also I tried to invoke 'mount' from C code, if MS_SHARED specified and
mountpoint does not exist (not mounted without MS_SHARED before), then
nothing will happen.
 
The procedure is out of the scope adding a shared flag support to
file-system record.  I see two variants:

1. Remove the modification from option-string->mount-flags and merge,
someone will add when required.

2. Modify option-string->mount-flags in such way, that it will return
multiple bitmasks or in some other way.


Oleg.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 861 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [bug#56880] [PATCH] gnu: system: file-systems: Add shared flag.
  2022-08-04 13:20   ` Oleg Pykhalov
@ 2022-08-05  9:41     ` Ludovic Courtès
  2022-08-10  4:19       ` bug#56880: " Oleg Pykhalov
  0 siblings, 1 reply; 5+ messages in thread
From: Ludovic Courtès @ 2022-08-05  9:41 UTC (permalink / raw)
  To: Oleg Pykhalov; +Cc: 56880

Hi,

Oleg Pykhalov <go.wigust@gmail.com> skribis:

> Ludovic Courtès <ludo@gnu.org> writes:
>
> […]
>
>>> (option-string->mount-flags): Handle shared flag.
>
> I looked again on this procedure before merge.  With applied patch it
> will return a wrong bitmask according to the manual page:
>
> mount(2)
>
>     The  only other flags that can be specified while changing the propaga‐
>     tion type are MS_REC (described below)  and  MS_SILENT  (which  is  ig‐
>     nored).
>
> Also I tried to invoke 'mount' from C code, if MS_SHARED specified and
> mountpoint does not exist (not mounted without MS_SHARED before), then
> nothing will happen.

Hmm not sure I follow.

> The procedure is out of the scope adding a shared flag support to
> file-system record.  I see two variants:
>
> 1. Remove the modification from option-string->mount-flags and merge,
> someone will add when required.
>
> 2. Modify option-string->mount-flags in such way, that it will return
> multiple bitmasks or in some other way.

I understand option #1 and it sounds reasonable to me.

I’m not sure what option #2 means concretely?

Thanks,
Ludo’.




^ permalink raw reply	[flat|nested] 5+ messages in thread

* bug#56880: [PATCH] gnu: system: file-systems: Add shared flag.
  2022-08-05  9:41     ` Ludovic Courtès
@ 2022-08-10  4:19       ` Oleg Pykhalov
  0 siblings, 0 replies; 5+ messages in thread
From: Oleg Pykhalov @ 2022-08-10  4:19 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 56880-done

[-- Attachment #1: Type: text/plain, Size: 1001 bytes --]

Ludovic Courtès <ludo@gnu.org> writes:

[…]

>> I looked again on this procedure before merge.  With applied patch it
>> will return a wrong bitmask according to the manual page:
>>
>> mount(2)
>>
>>     The  only other flags that can be specified while changing the propaga‐
>>     tion type are MS_REC (described below)  and  MS_SILENT  (which  is  ig‐
>>     nored).
>>
>> Also I tried to invoke 'mount' from C code, if MS_SHARED specified and
>> mountpoint does not exist (not mounted without MS_SHARED before), then
>> nothing will happen.
>
> Hmm not sure I follow.

[…]

>> 2. Modify option-string->mount-flags in such way, that it will return
>> multiple bitmasks or in some other way.

[…]

> I’m not sure what option #2 means concretely?

We need to call mount(2) two times, which is not handled by
option-string->mount-flags which returns only one mount(2) bitmask.

I pushed #1 as 4b494878380920c8c7eecccd1f299164dd4a2c3f to master.


Oleg.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 861 bytes --]

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-08-10  4:20 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-02 11:23 [bug#56880] [PATCH] gnu: system: file-systems: Add shared flag Oleg Pykhalov
2022-08-03 15:21 ` Ludovic Courtès
2022-08-04 13:20   ` Oleg Pykhalov
2022-08-05  9:41     ` Ludovic Courtès
2022-08-10  4:19       ` bug#56880: " Oleg Pykhalov

Code repositories for project(s) associated with this inbox:

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).