unofficial mirror of bug-guix@gnu.org 
 help / color / mirror / code / Atom feed
* bug#38435: BTRFS open_ctree failed
@ 2019-11-30 13:45 raingloom
  2019-11-30 14:53 ` Guillaume Le Vaillant
  0 siblings, 1 reply; 7+ messages in thread
From: raingloom @ 2019-11-30 13:45 UTC (permalink / raw)
  To: 38435

This is what I get after a recent `guix system reconfigure` :
Scanning for Btrfs filesystems
[    2.342790] BTRFS error (device sda1): open_ctree failed

Previous profiles work, I haven't modified anything about my config.scm
between them.

Full output from kernel (taken by booting it from QEMU and redirecting
ttyS0 to stdio):
```
qemu-system-x86_64 -enable-kvm -cpu host -smp 2 -hda /dev/sda -m 1G
-serial stdio WARNING: Image format was not specified for '/dev/sda'
and probing guessed raw. Automatically detecting the format is
dangerous for raw images, write operations on block 0 will be
restricted. Specify the 'raw' format explicitly to remove the
restrictions. GC Warning: pthread_getattr_np or pthread_attr_getstack
failed for main thread GC Warning: Couldn't read /proc/stat Welcome,
this is GNU's early boot Guile. Use '--repl' for an initrd REPL.

loading kernel modules...
Scanning for Btrfs filesystems
[    2.342790] BTRFS error (device sda1): open_ctree failed
ERROR: In procedure mount:
In procedure mount: Invalid argument

Entering a new prompt.  Type `,bt' for a backtrace or `,q' to continue.
GNU Guile 2.2.6
Copyright (C) 1995-2019 Free Software Foundation, Inc.

Guile comes with ABSOLUTELY NO WARRANTY; for details type `,show w'.
This program is free software, and you are welcome to redistribute it
under certain conditions; type `,show c' for details.

Enter `,help' for help.
scheme@(guile-user)> ,bt
In gnu/build/linux-boot.scm:
   533:14  2 (_)
    387:8  1 (mount-root-file-system _ _ #:volatile-root? _ #:options …)
In unknown file:
           0 (mount "/dev/sda1" "/root" "btrfs" 0 "lazytime,compress")
scheme@(guile-user)> ,q  
[   42.345826] Kernel panic - not syncing: Attempted to kill init!
```
(rest of stack trace snipped for brevity's sake)

output of `guix describe` as root:
```
Generation 26	Nov 29 2019 21:22:41	(current)
  nonguix 2df6923
    repository URL: https://gitlab.com/nonguix/nonguix.git
    branch: master
    commit: 2df692312100ac5bea9ed8e8bf0032e6db100e91
  guix dac7928
    repository URL: https://git.savannah.gnu.org/git/guix.git
    branch: master
    commit: dac7928d502d9ba4fc6a9621e5b2b15019d92d5b
```

Contents of /etc/profile.scm:

```
(define use-proprietary-crap? #f)

(use-modules (gnu)
	     (gnu system nss)
	     (gnu packages shells)
	     (gnu packages package-management)
	     (gnu packages gnome))

(if use-proprietary-crap?
    (use-modules (nongnu packages linux))
    (use-modules (gnu packages linux)))

(use-service-modules desktop ssh nix)
(use-package-modules
 bootloaders
 certs
 ratpoison
 suckless
 wm)

(operating-system
  (host-name "bingobongo")
  (timezone "Europe/Budapest")
  (locale "en_US.utf8")
  (kernel
   (if use-proprietary-crap?
       linux
       linux-libre))
  (firmware (append
	     (if use-proprietary-crap?
		 (list iwlwifi-firmware)
		 '())
	     %base-firmware))

  ;; Use the UEFI variant of GRUB with the EFI System
  ;; Partition mounted on /boot/efi.
  (bootloader (bootloader-configuration
                (bootloader grub-bootloader)
                (target "/dev/sda")))

  ;; Assume the target root file system is labelled "my-root",
  ;; and the EFI System Partition has UUID 1234-ABCD.
  (file-systems (cons* (file-system
                         (device (file-system-label "GUIX"))
                         (mount-point "/")
			 (options "lazytime,compress")
                         (type "btrfs"))
                       ;(file-system
                       ;  (device (uuid "1234-ABCD" 'fat))
                       ;  (mount-point "/boot/efi")
                       ;  (type "vfat"))
                       %base-file-systems))

  (users (append (list
		  (user-account
		   (name "raingloom")
		   (comment "your friendly localhost admin")
		   (group "users")
		   (shell "/run/current-system/profile/bin/zsh")
		   (supplementary-groups '("wheel" "netdev" "audio"
  "video" "kvm")) (home-directory "/home/raingloom")))
               %base-user-accounts))

  ;; Add a bunch of window managers; we can choose one at
  ;; the log-in screen with F1.
  (packages (cons* i3-wm i3status dmenu ;window managers
                   nss-certs            ;for HTTPS access
                   zsh                  ;nicer login shell
                   gvfs
                   nix
                   gnome
                   orca
                   %base-packages))

  ;; Use the "desktop" services, which include the X11
  ;; log-in service, networking with NetworkManager, and more.
  (services
   (append (list (service nix-service-type) (service
  openssh-service-type (openssh-configuration (x11-forwarding? #t))))
  (modify-services %desktop-services
	    (elogind-service-type config =>
				  (elogind-configuration
				   (inherit config)
				   (handle-lid-switch 'ignore))))))

  ;; Allow resolution of '.local' host names with mDNS.
  (name-service-switch %mdns-host-lookup-nss))
```

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

* bug#38435: BTRFS open_ctree failed
  2019-11-30 13:45 bug#38435: BTRFS open_ctree failed raingloom
@ 2019-11-30 14:53 ` Guillaume Le Vaillant
  2019-11-30 16:01   ` Guillaume Le Vaillant
                     ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Guillaume Le Vaillant @ 2019-11-30 14:53 UTC (permalink / raw)
  To: 38435


raingloom skribis:

> This is what I get after a recent `guix system reconfigure` :
> Scanning for Btrfs filesystems
> [    2.342790] BTRFS error (device sda1): open_ctree failed
>
> Previous profiles work, I haven't modified anything about my config.scm
> between them.
>
> [...]
>
>
> Contents of /etc/profile.scm:
>
> [...]
>
>   (file-systems (cons* (file-system
>                          (device (file-system-label "GUIX"))
>                          (mount-point "/")
> 			 (options "lazytime,compress")
>                          (type "btrfs"))
>                        ;(file-system
>                        ;  (device (uuid "1234-ABCD" 'fat))
>                        ;  (mount-point "/boot/efi")
>                        ;  (type "vfat"))
>                        %base-file-systems))
>

I just tried adding the 'lazytime' option to my root file system, and
I got the same error as you when booting. Could you try removing it and
see if it works?

Until recently, the options declared in 'file-system' records were
always ignored when mounting the root file system. Now they are taken
into consideration, and I think it reveals a bug in the way file systems
are mounted. If some options like 'lazytime' or 'defaults' are declared
in a 'file-system' record (root file system or not), mounting it fails.
However some other options like 'compress' or 'autodefrag' work fine.

I suspect Guix adds some options by default when trying to mount file
systems, and maybe we end up with conflicting options or doubled options
that cause problems.

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

* bug#38435: BTRFS open_ctree failed
  2019-11-30 14:53 ` Guillaume Le Vaillant
@ 2019-11-30 16:01   ` Guillaume Le Vaillant
  2019-12-01 11:02   ` raingloom
  2020-02-18 16:29   ` Maxim Cournoyer
  2 siblings, 0 replies; 7+ messages in thread
From: Guillaume Le Vaillant @ 2019-11-30 16:01 UTC (permalink / raw)
  To: 38435


Guillaume Le Vaillant skribis:

> raingloom skribis:
>
>> This is what I get after a recent `guix system reconfigure` :
>> Scanning for Btrfs filesystems
>> [    2.342790] BTRFS error (device sda1): open_ctree failed
>>
>> Previous profiles work, I haven't modified anything about my config.scm
>> between them.
>>
>> [...]
>>
>>
>> Contents of /etc/profile.scm:
>>
>> [...]
>>
>>   (file-systems (cons* (file-system
>>                          (device (file-system-label "GUIX"))
>>                          (mount-point "/")
>> 			 (options "lazytime,compress")
>>                          (type "btrfs"))
>>                        ;(file-system
>>                        ;  (device (uuid "1234-ABCD" 'fat))
>>                        ;  (mount-point "/boot/efi")
>>                        ;  (type "vfat"))
>>                        %base-file-systems))
>>
>
> I just tried adding the 'lazytime' option to my root file system, and
> I got the same error as you when booting. Could you try removing it and
> see if it works?
>
> Until recently, the options declared in 'file-system' records were
> always ignored when mounting the root file system. Now they are taken
> into consideration, and I think it reveals a bug in the way file systems
> are mounted. If some options like 'lazytime' or 'defaults' are declared
> in a 'file-system' record (root file system or not), mounting it fails.
> However some other options like 'compress' or 'autodefrag' work fine.
>
> I suspect Guix adds some options by default when trying to mount file
> systems, and maybe we end up with conflicting options or doubled options
> that cause problems.

Apparently, Guix uses the 'mount' system call directly to mount file
systems (c.f. 'guix/build/syscalls.scm'), and passes all the options
declared in the 'file-system' records in the 'data' argument.

However the man page for mount(2) indicates:

--8<---------------cut here---------------start------------->8---
int mount(const char *source, const char *target,
                const char *filesystemtype, unsigned long mountflags,
                const void *data);

[...]

The data argument is interpreted by the different filesystems.
Typically it is a string of comma-separated options understood by this
filesystem.  See mount(8) for details of the options available for each
filesystem type.
--8<---------------cut here---------------end--------------->8---

If I understand correcly, the generic options (e.g. 'lazytime') must be
passed in 'mountflags', and the options specific to the file system
(e.g. 'compress') must be passed in 'data'.

This would mean that before calling the 'mount' system call, we must
remove the generic options from the 'options' variable (which is then
passed in 'data'), and add their corresponding flags to the 'flags'
variable (which is then passed in 'mountflags').

What do you think?

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

* bug#38435: BTRFS open_ctree failed
  2019-11-30 14:53 ` Guillaume Le Vaillant
  2019-11-30 16:01   ` Guillaume Le Vaillant
@ 2019-12-01 11:02   ` raingloom
  2019-12-03  9:47     ` Guillaume Le Vaillant
  2020-02-18 16:29   ` Maxim Cournoyer
  2 siblings, 1 reply; 7+ messages in thread
From: raingloom @ 2019-12-01 11:02 UTC (permalink / raw)
  To: 38435

On Sat, 30 Nov 2019 15:53:11 +0100
Guillaume Le Vaillant <glv@posteo.net> wrote:

> raingloom skribis:
> 
> > This is what I get after a recent `guix system reconfigure` :
> > Scanning for Btrfs filesystems
> > [    2.342790] BTRFS error (device sda1): open_ctree failed
> >
> > Previous profiles work, I haven't modified anything about my
> > config.scm between them.
> >
> > [...]
> >
> >
> > Contents of /etc/profile.scm:
> >
> > [...]
> >
> >   (file-systems (cons* (file-system
> >                          (device (file-system-label "GUIX"))
> >                          (mount-point "/")
> > 			 (options "lazytime,compress")
> >                          (type "btrfs"))
> >                        ;(file-system
> >                        ;  (device (uuid "1234-ABCD" 'fat))
> >                        ;  (mount-point "/boot/efi")
> >                        ;  (type "vfat"))
> >                        %base-file-systems))
> >  
> 
> I just tried adding the 'lazytime' option to my root file system, and
> I got the same error as you when booting. Could you try removing it
> and see if it works?
> 
> Until recently, the options declared in 'file-system' records were
> always ignored when mounting the root file system. Now they are taken
> into consideration, and I think it reveals a bug in the way file
> systems are mounted. If some options like 'lazytime' or 'defaults'
> are declared in a 'file-system' record (root file system or not),
> mounting it fails. However some other options like 'compress' or
> 'autodefrag' work fine.
> 
> I suspect Guix adds some options by default when trying to mount file
> systems, and maybe we end up with conflicting options or doubled
> options that cause problems.
> 
> 
> 

I removed it and ran reconfigure and now it works.

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

* bug#38435: BTRFS open_ctree failed
  2019-12-01 11:02   ` raingloom
@ 2019-12-03  9:47     ` Guillaume Le Vaillant
  2021-02-01 19:16       ` Maxim Cournoyer
  0 siblings, 1 reply; 7+ messages in thread
From: Guillaume Le Vaillant @ 2019-12-03  9:47 UTC (permalink / raw)
  To: raingloom; +Cc: 38435


raingloom skribis:

> On Sat, 30 Nov 2019 15:53:11 +0100
> Guillaume Le Vaillant <glv@posteo.net> wrote:
>
>> raingloom skribis:
>> 
>> > This is what I get after a recent `guix system reconfigure` :
>> > Scanning for Btrfs filesystems
>> > [    2.342790] BTRFS error (device sda1): open_ctree failed
>> >
>> > Previous profiles work, I haven't modified anything about my
>> > config.scm between them.
>> >
>> > [...]
>> >
>> >
>> > Contents of /etc/profile.scm:
>> >
>> > [...]
>> >
>> >   (file-systems (cons* (file-system
>> >                          (device (file-system-label "GUIX"))
>> >                          (mount-point "/")
>> > 			 (options "lazytime,compress")
>> >                          (type "btrfs"))
>> >                        ;(file-system
>> >                        ;  (device (uuid "1234-ABCD" 'fat))
>> >                        ;  (mount-point "/boot/efi")
>> >                        ;  (type "vfat"))
>> >                        %base-file-systems))
>> >  
>> 
>> I just tried adding the 'lazytime' option to my root file system, and
>> I got the same error as you when booting. Could you try removing it
>> and see if it works?
>> 
>> Until recently, the options declared in 'file-system' records were
>> always ignored when mounting the root file system. Now they are taken
>> into consideration, and I think it reveals a bug in the way file
>> systems are mounted. If some options like 'lazytime' or 'defaults'
>> are declared in a 'file-system' record (root file system or not),
>> mounting it fails. However some other options like 'compress' or
>> 'autodefrag' work fine.
>> 
>> I suspect Guix adds some options by default when trying to mount file
>> systems, and maybe we end up with conflicting options or doubled
>> options that cause problems.
>> 
>> 
>> 
>
> I removed it and ran reconfigure and now it works.

Applying patches #38462 and #38468 and changing the file system
definition to the following should allow you to mount the root file
system with the 'lazytime' option:

--8<---------------cut here---------------start------------->8---
(file-system
  (device (file-system-label "GUIX"))
  (mount-point "/")
  (flags '(lazy-time))
  (options "compress")
  (type "btrfs"))
--8<---------------cut here---------------end--------------->8---

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

* bug#38435: BTRFS open_ctree failed
  2019-11-30 14:53 ` Guillaume Le Vaillant
  2019-11-30 16:01   ` Guillaume Le Vaillant
  2019-12-01 11:02   ` raingloom
@ 2020-02-18 16:29   ` Maxim Cournoyer
  2 siblings, 0 replies; 7+ messages in thread
From: Maxim Cournoyer @ 2020-02-18 16:29 UTC (permalink / raw)
  To: Guillaume Le Vaillant; +Cc: 38435

Hello,

Guillaume Le Vaillant <glv@posteo.net> writes:

> raingloom skribis:
>
>> This is what I get after a recent `guix system reconfigure` :
>> Scanning for Btrfs filesystems
>> [    2.342790] BTRFS error (device sda1): open_ctree failed
>>
>> Previous profiles work, I haven't modified anything about my config.scm
>> between them.
>>
>> [...]
>>
>>
>> Contents of /etc/profile.scm:
>>
>> [...]
>>
>>   (file-systems (cons* (file-system
>>                          (device (file-system-label "GUIX"))
>>                          (mount-point "/")
>> 			 (options "lazytime,compress")
>>                          (type "btrfs"))
>>                        ;(file-system
>>                        ;  (device (uuid "1234-ABCD" 'fat))
>>                        ;  (mount-point "/boot/efi")
>>                        ;  (type "vfat"))
>>                        %base-file-systems))
>>
>
> I just tried adding the 'lazytime' option to my root file system, and
> I got the same error as you when booting. Could you try removing it and
> see if it works?
>
> Until recently, the options declared in 'file-system' records were
> always ignored when mounting the root file system. Now they are taken
> into consideration, and I think it reveals a bug in the way file systems
> are mounted. If some options like 'lazytime' or 'defaults' are declared
> in a 'file-system' record (root file system or not), mounting it fails.
> However some other options like 'compress' or 'autodefrag' work fine.
>
> I suspect Guix adds some options by default when trying to mount file
> systems, and maybe we end up with conflicting options or doubled options
> that cause problems.

The problem here is that "lazytime" is a file system independent mount
options (see FILESYSTEM-INDEPENDENT MOUNT OPTIONS in 'man 8 mount'),
which is not understood by the Btrfs file system driver itself.

Currently Guix targets mount(2) through its file-system record API,
although this could be easily abused before (because the options were
not passed to the `mount-file-system' calls that the init RAM disk
uses).

This leaves some work to be done though, as if we target mount(2), we
need some glue code to translate mount(2) flags into mount(8) file
system independent mount options (otherwise you wouldn't be able to have
'lazytime' in your /etc/fstab).

I have a partial solution posted for review here:
https://lists.gnu.org/archive/html/guix-patches/2020-02/msg00382.html,
in the patch:
https://lists.gnu.org/archive/html/guix-patches/2020-02/msg00382.html.
Currently it filters out the file system independent mount options
before passing the options to `mount-file-system'.

Comments or patches welcome!

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

* bug#38435: BTRFS open_ctree failed
  2019-12-03  9:47     ` Guillaume Le Vaillant
@ 2021-02-01 19:16       ` Maxim Cournoyer
  0 siblings, 0 replies; 7+ messages in thread
From: Maxim Cournoyer @ 2021-02-01 19:16 UTC (permalink / raw)
  To: Guillaume Le Vaillant; +Cc: 38435-done

Hello,

Guillaume Le Vaillant <glv@posteo.net> writes:

[...]

>>> >   (file-systems (cons* (file-system
>>> >                          (device (file-system-label "GUIX"))
>>> >                          (mount-point "/")
>>> > 			 (options "lazytime,compress")
>>> >                          (type "btrfs"))
>>> >                        ;(file-system
>>> >                        ;  (device (uuid "1234-ABCD" 'fat))
>>> >                        ;  (mount-point "/boot/efi")
>>> >                        ;  (type "vfat"))
>>> >                        %base-file-systems))
>>> >  
>>> 
>>> I just tried adding the 'lazytime' option to my root file system, and
>>> I got the same error as you when booting. Could you try removing it
>>> and see if it works?
>>> 
>>> Until recently, the options declared in 'file-system' records were
>>> always ignored when mounting the root file system. Now they are taken
>>> into consideration, and I think it reveals a bug in the way file
>>> systems are mounted. If some options like 'lazytime' or 'defaults'
>>> are declared in a 'file-system' record (root file system or not),
>>> mounting it fails. However some other options like 'compress' or
>>> 'autodefrag' work fine.
>>> 
>>> I suspect Guix adds some options by default when trying to mount file
>>> systems, and maybe we end up with conflicting options or doubled
>>> options that cause problems.
>>> 
>>> 
>>> 
>>
>> I removed it and ran reconfigure and now it works.
>
> Applying patches #38462 and #38468 and changing the file system
> definition to the following should allow you to mount the root file
> system with the 'lazytime' option:
>
> (file-system
>   (device (file-system-label "GUIX"))
>   (mount-point "/")
>   (flags '(lazy-time))
>   (options "compress")
>   (type "btrfs"))

I see these earlier patches of yours got merged already and the original
issue addressed.

Thank you!

Closing.

Maxim




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

end of thread, other threads:[~2021-02-01 19:17 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-11-30 13:45 bug#38435: BTRFS open_ctree failed raingloom
2019-11-30 14:53 ` Guillaume Le Vaillant
2019-11-30 16:01   ` Guillaume Le Vaillant
2019-12-01 11:02   ` raingloom
2019-12-03  9:47     ` Guillaume Le Vaillant
2021-02-01 19:16       ` Maxim Cournoyer
2020-02-18 16:29   ` Maxim Cournoyer

Code repositories for project(s) associated with this public 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).