]> git.neil.brown.name Git - LaFS.git/blobdiff - snapshot.c
Improve handling of snapshot name.
[LaFS.git] / snapshot.c
index c50932664249a095b27ffbe82d9f6316932338fa..1bdeb976063a97408b109170d3c1997d0ba13228 100644 (file)
@@ -114,11 +114,14 @@ lafs_snap_get_sb(struct file_system_type *fstype,
        fs = fs_from_sb(sb);
 
        for (s = 1; s < fs->maxsnapshot; s++) {
+               int nlen;
+
                if (fs->ss[s].root_addr == 0)
                        continue;
                if (fs->ss[s].root) {
                        struct lafs_inode *li = LAFSI(fs->ss[s].root);
-                       if (strcmp(li->md.fs.name, op.snapshot) == 0)
+                       if (li->md.fs.name &&
+                           strcmp(li->md.fs.name, op.snapshot) == 0)
                                /* found it */
                                break;
                }
@@ -126,8 +129,10 @@ lafs_snap_get_sb(struct file_system_type *fstype,
                if (err)
                        continue;
                lai = (struct la_inode *)page_address(p);
-               printk("ss %d is %.64s\n", s, lai->metadata[0].fs.name);
-               if (strncmp(lai->metadata[0].fs.name, op.snapshot, 64) != 0)
+               nlen = le16_to_cpu(lai->metadata_size) -
+                       offsetof(struct la_inode, metadata[0].fs.name);
+               printk("ss %d is %.*s\n", s, nlen, lai->metadata[0].fs.name);
+               if (strncmp(lai->metadata[0].fs.name, op.snapshot, nlen) != 0)
                        continue;
                /* FIXME more checks? */
                /* Found it */