← Back to team overview

desktop-packages team mailing list archive

[Bug 1391807] Re: glib trash operates in wrong way, working with overlayfs

 

Thank you for taking the time to report this bug and helping to make
Ubuntu better. The issue you are reporting is an upstream one and it
would be nice if somebody having it could send the bug to the developers
of the software by following the instructions at
https://wiki.ubuntu.com/Bugs/Upstream/GNOME. If you have done so, please
tell us the number of the upstream bug (or the link), so we can add a
bugwatch that will inform us about its status. Thanks in advance.

** Changed in: glib2.0 (Ubuntu)
   Importance: Undecided => Low

-- 
You received this bug notification because you are a member of Desktop
Packages, which is subscribed to glib2.0 in Ubuntu.
https://bugs.launchpad.net/bugs/1391807

Title:
  glib trash operates in wrong way, working with overlayfs

Status in “glib2.0” package in Ubuntu:
  New

Bug description:
  hi RD & QA team,

  (this is a duplicate of
  https://bugs.launchpad.net/ubuntu/+source/glib2.0/+bug/1391811,
  because I don't know the bug should be report to ubuntu or glib.)

  I find in xubuntu livecd mode (try without installing xubuntu), if I
  delete a file on the desktop, xubuntu raises a dialog says "Unable to
  find or create trash directory". But it's ok to delete a directory on
  the desktop.

  I follow the above error message in glib, and it goes to the function
  g_local_file_trash() in gio/glocalfile.c. I notice this line "if
  (file_stat.st_dev == home_stat.st_dev)". If it's true, glib thinks the
  file to be deleted is a file on the save disk with the user home
  directory, and creates the correct and well-known trash directory
  "~/.local/share/Trash", then everything would go fine. If it's false,
  glib treats the file to be deleted as on external disk, say, usb
  driver, where there should be a ".Trash-<uid>" directory on the
  external device.

  Unfortunately, the situation I stated in the first paragraph goes to
  the "false" section of the "if" clause, because the file to be deleted
  on the desktop is an overlayfs-ed file.

  In kernel documentation we can read:
  While directories will report an st_dev from the overlay-filesystem, all non-directory objects will report an st_dev from the lower or upper filesystem that is providing the object.

  So I write a C program to get the stat for some files and directories as follows:
  path                                  type             st_dev
  ~/Desktop/1.jpg                file               2050
  ~/Desktop/test/1.jgp         file               2050
  /etc/fstab                          file               2050
  ~/Desktop/test/                 dir               17
  /home                               dir               17
  /home/mytestuser             dir                17
  /etc                                  dir                17

  As we can see, files share the same st_dev, while directoires share
  another st_dev.

  The reason for this in xubuntu livecd mode is, that livecd runs with
  overlayfs upon squashfs image. Every file the user sees is in the
  upper or lower file system while every directory the user sees is in
  the overlayfs file system. The 2 file system have different st_dev
  number.

  Now I think it's clear for the trash problem for glib with overlayfs.
  glib thinks a file is on the different device than user home
  directory, so glib is going to create ".Trash-<uid>" directory on the
  overlayfs file system which is "/". But obviously the user has no
  permission to create folder in "/". Therefore error occurs.

  Any solution or workaround before glib gives patch?

  Many thanks!

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/glib2.0/+bug/1391807/+subscriptions


References