I was thinking of a more generalized overlayfs solution that detects if
file systems don't initialize the superblock uuid and overlayfs
improvises by generating the internal overlayfs uuid, something like:

diff --git a/fs/overlayfs/copy_up.c b/fs/overlayfs/copy_up.c
index 698d112bdb17..da3faaf68d69 100644
--- a/fs/overlayfs/copy_up.c
+++ b/fs/overlayfs/copy_up.c
@@ -248,6 +248,7 @@ struct ovl_fh *ovl_encode_real_fh(struct dentry *real, bool 
is_upper)
        void *buf;
        int buflen = MAX_HANDLE_SZ;
        uuid_t *uuid = &real->d_sb->s_uuid;
+       static const uuid_t z_uuid;
 
        buf = kmalloc(buflen, GFP_KERNEL);
        if (!buf)
@@ -289,7 +290,22 @@ struct ovl_fh *ovl_encode_real_fh(struct dentry *real, 
bool is_upper)
        if (is_upper)
                fh->flags |= OVL_FH_FLAG_PATH_UPPER;
        fh->len = fh_len;
-       fh->uuid = *uuid;
+
+       if (uuid_equal(uuid, &z_uuid)) {
+               struct super_block *sb = real->d_sb;
+               u16 hash;
+
+               pr_warn("ovl_encode_real_fh: ZERO UUID, generating one from 
superblock\n");
+
+               memcpy(&fh->uuid.b[0], &sb->s_magic, 8);
+               memcpy(&fh->uuid.b[8], &sb->s_dev, 6);
+               hash = ((long)sb ^ (long)sb->s_fs_info) >> 12;
+               memcpy(&fh->uuid.b[14], &hash, 2);
+       } else {
+               fh->uuid = *uuid;
+       }
+

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1824407

Title:
  remount of multilower moved pivoted-root overlayfs root, results in
  I/O errors on some modified files

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1824407/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to