Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package udisks2 for openSUSE:Factory checked 
in at 2023-10-13 23:13:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/udisks2 (Old)
 and      /work/SRC/openSUSE:Factory/.udisks2.new.20540 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "udisks2"

Fri Oct 13 23:13:49 2023 rev:50 rq:1117504 version:2.10.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/udisks2/udisks2.changes  2023-09-25 
19:59:48.870830229 +0200
+++ /work/SRC/openSUSE:Factory/.udisks2.new.20540/udisks2.changes       
2023-10-13 23:13:57.577467010 +0200
@@ -1,0 +2,11 @@
+Wed Oct 11 15:37:37 UTC 2023 - Thomas Blume <thomas.bl...@suse.com>
+
+- fix mount failure on ntfs formatted usb disks (bsc#1216055)
+  * add:
+    0001-doc-Clarify-the-Filesystem.Size-property-presence.patch
+    0001-tests-Mark-UDF-fstab-filesystem-tests-as-unstable.patch
+    0001-udiskslinuxfilesystem-Refactor-internal-whitelists.patch
+    0001-tests-Add-offline-and-online-filesystem-grow-tests.patch
+    0001-udiskslinuxfilesystem-Force-native-tools-for-mounted.patch
+
+-------------------------------------------------------------------

New:
----
  0001-doc-Clarify-the-Filesystem.Size-property-presence.patch
  0001-tests-Add-offline-and-online-filesystem-grow-tests.patch
  0001-tests-Mark-UDF-fstab-filesystem-tests-as-unstable.patch
  0001-udiskslinuxfilesystem-Force-native-tools-for-mounted.patch
  0001-udiskslinuxfilesystem-Refactor-internal-whitelists.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ udisks2.spec ++++++
--- /var/tmp/diff_new_pack.DnyXgq/_old  2023-10-13 23:13:58.285492691 +0200
+++ /var/tmp/diff_new_pack.DnyXgq/_new  2023-10-13 23:13:58.285492691 +0200
@@ -34,6 +34,11 @@
 # an exception will be silently removed with the next version update.
 
 Patch0:         harden_udisks2.service.patch
+Patch1:         0001-doc-Clarify-the-Filesystem.Size-property-presence.patch
+Patch2:         0001-tests-Mark-UDF-fstab-filesystem-tests-as-unstable.patch
+Patch3:         0001-udiskslinuxfilesystem-Refactor-internal-whitelists.patch
+Patch4:         0001-tests-Add-offline-and-online-filesystem-grow-tests.patch
+Patch5:         0001-udiskslinuxfilesystem-Force-native-tools-for-mounted.patch
 
 BuildRequires:  chrpath
 BuildRequires:  docbook-xsl-stylesheets

++++++ 0001-doc-Clarify-the-Filesystem.Size-property-presence.patch ++++++
>From fee9a3a50c3d4f687ed0c310096b1cd0e21f8923 Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbza...@redhat.com>
Date: Tue, 22 Aug 2023 14:33:07 +0200
Subject: [PATCH] doc: Clarify the Filesystem.Size property presence

We've done many tweaks and introduced limits to some
filesystem types, let's document that.
---
 data/org.freedesktop.UDisks2.xml | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/data/org.freedesktop.UDisks2.xml b/data/org.freedesktop.UDisks2.xml
index bfa6e660..53194c70 100644
--- a/data/org.freedesktop.UDisks2.xml
+++ b/data/org.freedesktop.UDisks2.xml
@@ -2715,11 +2715,12 @@
     </method>
 
     <!-- Size: The size of the filesystem.  This is the amount of
-         bytes used on the block device.  If this is smaller than
-         org.freedesktop.Udisks2.Block.Size, then the filesystem can
-         be made larger with Resize.
+         bytes used on the block device representing an outer filesystem
+         boundary. If this is smaller than org.freedesktop.Udisks2.Block.Size,
+         then the filesystem can be made larger with Resize.
 
-         If the size is unknown, the property is zero.
+         If the size is unknown, the property is zero. Currently limited
+         to xfs and ext filesystems only.
 
          Please note that reading value of this property typically causes
          some I/O to read the filesystem superblock. Unlike the rest
-- 
2.42.0


++++++ 0001-tests-Add-offline-and-online-filesystem-grow-tests.patch ++++++
>From c73288f465107567d91be2658a68c61e5f3f5a16 Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbza...@redhat.com>
Date: Tue, 22 Aug 2023 14:19:05 +0200
Subject: [PATCH] tests: Add offline and online filesystem grow tests

---
 src/tests/dbus-tests/test_80_filesystem.py | 81 +++++++++++++++++++++-
 1 file changed, 80 insertions(+), 1 deletion(-)

diff --git a/src/tests/dbus-tests/test_80_filesystem.py 
b/src/tests/dbus-tests/test_80_filesystem.py
index 59946720..87d63922 100644
--- a/src/tests/dbus-tests/test_80_filesystem.py
+++ b/src/tests/dbus-tests/test_80_filesystem.py
@@ -314,7 +314,7 @@ class UdisksFSTestCase(udiskstestcase.UdisksTestCase):
           rpr, _ = manager.CanRepair(self._fs_signature)
         except:
           rpr = chk = rep = False
-        if not (rpr and chk and rep) or mode & (1 << 1) == 0:
+        if not (rpr and chk and rep) or mode & 
BlockDev.FSResizeFlags.OFFLINE_SHRINK == 0:
             self.skipTest('Cannot check, offline-shrink and repair %s 
filesystem' % self._fs_signature)
 
         disk = self.get_object('/block_devices/' + 
os.path.basename(self.vdevs[0]))
@@ -344,6 +344,85 @@ class UdisksFSTestCase(udiskstestcase.UdisksTestCase):
         self.assertTrue(block_fs.Check(self.no_options, 
dbus_interface=self.iface_prefix + '.Filesystem'))
         self.get_property(block_fs, '.Filesystem', 
'Size').assertAlmostEqual(size // 2, delta=1024**2)
 
+    def _test_grow(self, online):
+        TMP_SIZE_1 = 500 * 1024**2
+        TMP_SIZE_2 = 2 * TMP_SIZE_1
+
+        self._check_can_create()
+
+        if not self._can_mount:
+            self.skipTest('Cannot mount %s filesystem' % self._fs_signature)
+
+        if not self._can_query_size:
+            self.skipTest('Cannot determine size of %s filesystem' % 
self._fs_signature)
+
+        manager = self.get_interface(self.get_object('/Manager'), '.Manager')
+        try:
+            res, mode, _ = manager.CanResize(self._fs_signature)
+        except:
+            res = False
+            mode = 0
+        if not res:
+            self.skipTest('Cannot resize %s filesystem' % self._fs_signature)
+        if online and mode & BlockDev.FSResizeFlags.ONLINE_GROW == 0:
+            self.skipTest('Cannot online-grow %s filesystem' % 
self._fs_signature)
+        if not online and mode & BlockDev.FSResizeFlags.OFFLINE_GROW == 0:
+            self.skipTest('Cannot offline-grow %s filesystem' % 
self._fs_signature)
+
+        with tempfile.NamedTemporaryFile(prefix="udisks_test", delete=True, 
mode='w+b') as temp:
+            temp.truncate(TMP_SIZE_1)
+            loop_dev_obj_path = manager.LoopSetup(temp.fileno(), 
self.no_options)
+            loop_dev_obj = self.get_object(loop_dev_obj_path)
+            _, loop_dev = loop_dev_obj_path.rsplit("/", 1)
+            self.addCleanup(self.run_command, 'losetup --detach /dev/%s' % 
loop_dev)
+
+            # check the initial size
+            bsize = self.get_property(loop_dev_obj, '.Block', 'Size')
+            bsize.assertEqual(TMP_SIZE_1)
+
+            # create filesystem
+            loop_dev_obj.Format(self._fs_signature, self.no_options, 
dbus_interface=self.iface_prefix + '.Block')
+            fssize = self.get_property(loop_dev_obj, '.Filesystem', 'Size')
+            fssize.assertAlmostEqual(TMP_SIZE_1, delta=1024**2)
+
+            # not mounted
+            mounts = self.get_property(loop_dev_obj, '.Filesystem', 
'MountPoints')
+            mounts.assertLen(0)
+
+            # mount it
+            if online:
+                d = dbus.Dictionary(signature='sv')
+                if self._fs_name:
+                    d['fstype'] = self._fs_name
+                mnt_path = loop_dev_obj.Mount(d, 
dbus_interface=self.iface_prefix + '.Filesystem')
+                self.addCleanup(self.try_unmount, mnt_path)
+                self.addCleanup(self.try_unmount, '/dev/%s' % loop_dev)
+
+            # resize the loop device
+            temp.truncate(TMP_SIZE_2)
+            self.run_command('losetup -c /dev/%s' % loop_dev)
+            time.sleep(2)
+            bsize = self.get_property(loop_dev_obj, '.Block', 'Size')
+            bsize.assertEqual(TMP_SIZE_2)
+            fssize = self.get_property(loop_dev_obj, '.Filesystem', 'Size')
+            fssize.assertAlmostEqual(TMP_SIZE_1, delta=1024**2)
+
+            # perform the grow
+            loop_dev_obj.Resize(dbus.UInt64(TMP_SIZE_2), self.no_options, 
dbus_interface=self.iface_prefix + '.Filesystem')
+            fssize = self.get_property(loop_dev_obj, '.Filesystem', 'Size')
+            fssize.assertAlmostEqual(TMP_SIZE_2, delta=1024**2)
+
+            # unmount
+            if online:
+                loop_dev_obj.Unmount(self.no_options, 
dbus_interface=self.iface_prefix + '.Filesystem')
+                self.assertFalse(os.path.ismount(mnt_path))
+
+    def test_online_grow(self):
+        self._test_grow(True)
+
+    def test_offline_grow(self):
+        self._test_grow(True)
+
     def test_size(self):
         self._check_can_create()
 
-- 
2.42.0


++++++ 0001-tests-Mark-UDF-fstab-filesystem-tests-as-unstable.patch ++++++
>From bb45fda15f2a5c2063d76db4d2a6dcafaffa9ad1 Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbza...@redhat.com>
Date: Tue, 22 Aug 2023 14:31:50 +0200
Subject: [PATCH] tests: Mark UDF fstab filesystem tests as unstable

Protective part table involved, duplicate identifiers leading
to random match each time. Until we have a proper fix, just
mark them as unstable.
---
 src/tests/dbus-tests/test_80_filesystem.py | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/tests/dbus-tests/test_80_filesystem.py 
b/src/tests/dbus-tests/test_80_filesystem.py
index 87d63922..18c8011d 100644
--- a/src/tests/dbus-tests/test_80_filesystem.py
+++ b/src/tests/dbus-tests/test_80_filesystem.py
@@ -1758,6 +1758,18 @@ class UDFTestCase(UdisksFSTestCase):
     def _gen_uuid(self):
         return str.format("%016x" % random.randint(0, 0xffffffffffffffff))
 
+    @udiskstestcase.tag_test(udiskstestcase.TestTags.UNSTABLE)
+    def test_mount_fstab_complex_label(self):
+        super(UDFTestCase, self).test_mount_fstab_complex_label()
+
+    @udiskstestcase.tag_test(udiskstestcase.TestTags.UNSTABLE)
+    def test_mount_fstab_complex_label2(self):
+        super(UDFTestCase, self).test_mount_fstab_complex_label2()
+
+    @udiskstestcase.tag_test(udiskstestcase.TestTags.UNSTABLE)
+    def test_mount_fstab_complex_label_bad(self):
+        super(UDFTestCase, self).test_mount_fstab_complex_label_bad()
+
 
 class FailsystemTestCase(UdisksFSTestCase):
     # test that not supported operations fail 'nicely'
-- 
2.42.0


++++++ 0001-udiskslinuxfilesystem-Force-native-tools-for-mounted.patch ++++++
>From bb54e1898e6c3569ca8d32dc1c9ca5e39e86875a Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbza...@redhat.com>
Date: Fri, 4 Aug 2023 17:53:18 +0200
Subject: [PATCH] udiskslinuxfilesystem: Force native tools for mounted XFS fs
 size retrieval

Just another quirk discovered by Cockpit tests. Looks like
the superblock gets written on-disk at some later point while
the mounted filesystem structures keep the new geometry in-memory.
This is an obvious limitation of blkid that only reads data
from the block device.
---
 src/udiskslinuxfilesystem.c | 22 +++++++++++++++-------
 1 file changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/udiskslinuxfilesystem.c b/src/udiskslinuxfilesystem.c
index 9bfda895..9f4880ad 100644
--- a/src/udiskslinuxfilesystem.c
+++ b/src/udiskslinuxfilesystem.c
@@ -352,6 +352,7 @@ udisks_linux_filesystem_update (UDisksLinuxFilesystem  
*filesystem,
   GPtrArray *p;
   GList *mounts;
   GList *l;
+  gboolean mounted;
 
   mount_monitor = udisks_daemon_get_mount_monitor 
(udisks_linux_block_object_get_daemon (object));
   device = udisks_linux_block_object_get_device (object);
@@ -370,6 +371,7 @@ udisks_linux_filesystem_update (UDisksLinuxFilesystem  
*filesystem,
   g_ptr_array_add (p, NULL);
   udisks_filesystem_set_mount_points (UDISKS_FILESYSTEM (filesystem),
                                       (const gchar *const *) p->pdata);
+  mounted = p->len > 0;
   g_ptr_array_free (p, TRUE);
   g_list_free_full (mounts, g_object_unref);
 
@@ -389,13 +391,19 @@ udisks_linux_filesystem_update (UDisksLinuxFilesystem  
*filesystem,
 
   g_dbus_interface_skeleton_flush (G_DBUS_INTERFACE_SKELETON (filesystem));
 
-  /* The ID_FS_SIZE property only contains data part of the total filesystem
-   * size while 'ID_FS_LASTBLOCK * ID_FS_BLOCKSIZE' typically marks the size
-   * boundary of the filesystem. This is the approach of libblockdev fs size
-   * reporting.
-   */
-  filesystem->cached_fs_size = g_udev_device_get_property_as_uint64 
(device->udev_device, "ID_FS_LASTBLOCK") *
-                               g_udev_device_get_property_as_uint64 
(device->udev_device, "ID_FS_BLOCKSIZE");
+  if (mounted && g_strcmp0 (filesystem->cached_fs_type, "xfs") == 0)
+    /* Force native filesystem tools for mounted XFS as superblock might
+     * not have been written right after the grow.
+     */
+    filesystem->cached_fs_size = 0;
+  else
+    /* The ID_FS_SIZE property only contains data part of the total filesystem
+     * size and comes with no guarantees while 'ID_FS_LASTBLOCK * 
ID_FS_BLOCKSIZE'
+     * typically marks the boundary of the filesystem.
+     */
+    filesystem->cached_fs_size = g_udev_device_get_property_as_uint64 
(device->udev_device, "ID_FS_LASTBLOCK") *
+                                 g_udev_device_get_property_as_uint64 
(device->udev_device, "ID_FS_BLOCKSIZE");
+
   /* The Size property is hacked to be retrieved on-demand, only need to
    * notify subscribers that it has changed.
    */
-- 
2.42.0


++++++ 0001-udiskslinuxfilesystem-Refactor-internal-whitelists.patch ++++++
>From 4a06a6ee126751af3a7ab9fc33721a904adb6850 Mon Sep 17 00:00:00 2001
From: Tomas Bzatek <tbza...@redhat.com>
Date: Fri, 4 Aug 2023 17:48:41 +0200
Subject: [PATCH] udiskslinuxfilesystem: Refactor internal whitelists

(cherry picked from commit eb7e79e0b7e5f284809965b21c96b6451662c544)
---
 src/udiskslinuxfilesystem.c | 100 +++++++++++++++++++++---------------
 1 file changed, 58 insertions(+), 42 deletions(-)

diff --git a/src/udiskslinuxfilesystem.c b/src/udiskslinuxfilesystem.c
index f2e5eb60..9bfda895 100644
--- a/src/udiskslinuxfilesystem.c
+++ b/src/udiskslinuxfilesystem.c
@@ -109,6 +109,45 @@ G_DEFINE_TYPE_WITH_CODE (UDisksLinuxFilesystem, 
udisks_linux_filesystem, UDISKS_
 #define MOUNT_BASE_PERSISTENT FALSE
 #endif
 
+/* required for kernel module autoloading */
+static const gchar *well_known_filesystems[] =
+{
+  "bcache",
+  "bcachefs",
+  "btrfs",
+  "erofs",
+  "exfat",
+  "ext2",
+  "ext3",
+  "ext4",
+  "f2fs",
+  "hfs",
+  "hfsplus",
+  "iso9660",
+  "jfs",
+  "msdos",
+  "nilfs",
+  "nilfs2",
+  "ntfs",
+  "ntfs3",
+  "udf",
+  "reiserfs",
+  "reiser4",
+  "reiser5",
+  "umsdos",
+  "vfat",
+  "xfs",
+};
+
+/* filesystems known to report their outer boundaries */
+static const gchar *fs_lastblock_list[] =
+{
+  "ext2",
+  "ext3",
+  "ext4",
+  "xfs",
+};
+
 /* 
----------------------------------------------------------------------------------------------------
 */
 
 static void
@@ -199,6 +238,17 @@ udisks_linux_filesystem_new (void)
 
 /* 
----------------------------------------------------------------------------------------------------
 */
 
+static gboolean
+in_fs_lastblock_list (const gchar *fstype)
+{
+  guint n;
+
+  for (n = 0; n < G_N_ELEMENTS (fs_lastblock_list); n++)
+    if (g_strcmp0 (fs_lastblock_list[n], fstype) == 0)
+      return TRUE;
+  return FALSE;
+}
+
 /* WARNING: called with GDBusObjectManager lock held, avoid any object lookup 
*/
 static guint64
 get_filesystem_size (UDisksLinuxFilesystem *filesystem)
@@ -211,6 +261,10 @@ get_filesystem_size (UDisksLinuxFilesystem *filesystem)
   if (!filesystem->cached_device_file || !filesystem->cached_fs_type)
     return 0;
 
+  /* manually getting size is supported only for Ext and XFS */
+  if (!in_fs_lastblock_list (filesystem->cached_fs_type))
+    return 0;
+
   /* if the drive is ATA and is sleeping, skip filesystem size check to prevent
    * drive waking up - nothing has changed anyway since it's been sleeping...
    */
@@ -352,37 +406,6 @@ udisks_linux_filesystem_update (UDisksLinuxFilesystem  
*filesystem,
 
 /* 
----------------------------------------------------------------------------------------------------
 */
 
-/* required for kernel module autoloading */
-static const gchar *well_known_filesystems[] =
-{
-  "bcache",
-  "bcachefs",
-  "btrfs",
-  "erofs",
-  "exfat",
-  "ext2",
-  "ext3",
-  "ext4",
-  "f2fs",
-  "hfs",
-  "hfsplus",
-  "iso9660",
-  "jfs",
-  "msdos",
-  "nilfs",
-  "nilfs2",
-  "ntfs",
-  "ntfs3",
-  "udf",
-  "reiserfs",
-  "reiser4",
-  "reiser5",
-  "umsdos",
-  "vfat",
-  "xfs",
-  NULL,
-};
-
 static gboolean
 is_in_filesystem_file (const gchar *filesystems_file,
                        const gchar *fstype)
@@ -432,19 +455,12 @@ is_in_filesystem_file (const gchar *filesystems_file,
 static gboolean
 is_well_known_filesystem (const gchar *fstype)
 {
-  gboolean ret = FALSE;
   guint n;
 
-  for (n = 0; well_known_filesystems[n] != NULL; n++)
-    {
-      if (g_strcmp0 (well_known_filesystems[n], fstype) == 0)
-        {
-          ret = TRUE;
-          goto out;
-        }
-    }
- out:
-  return ret;
+  for (n = 0; n < G_N_ELEMENTS (well_known_filesystems); n++)
+    if (g_strcmp0 (well_known_filesystems[n], fstype) == 0)
+      return TRUE;
+  return FALSE;
 }
 
 /* this is not a very efficient implementation but it's very rarely
-- 
2.42.0

Reply via email to