commit a859d72be297f7c7f6dde51ea11e347e160913a8 Author: Patrick McManus Date: Thu Feb 14 15:21:24 2008 -0500 yaird label and uuid support for xfs http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=337065 debian bug 337065 merged with Merged with #341498, #457462; XFS superblock information that allows yaird to work with UUIDs in /etc/fstab as it already can for ext3 and Resier Use of blkid tool is still a better idea, but this patch is consistent with existing support diff --git a/perl/LabeledPartition.pm b/perl/LabeledPartition.pm index e1c9553..5cbff3d 100644 --- a/perl/LabeledPartition.pm +++ b/perl/LabeledPartition.pm @@ -69,6 +69,7 @@ sub try ($) { binmode ($fh); $result = tryExt2 ($fh, $path) unless defined $result; $result = tryReiser ($fh, $path) unless defined $result; + $result = tryXFS ($fh, $path) unless defined $result; # ignore errors, could not have been very wrong # if a working superblock came out of it. @@ -149,4 +150,42 @@ sub tryReiser ($$) { return $result; } +sub tryXFS ($$) +{ + my ($fh, $path) = @_; + my $result = undef; + + # bytes 32-47 are the uuid + # offset is 0 - seek back to start + if (! seek ($fh, 0, 0)) { + return $result; + } + + my $superBlock; + my $rc = read ($fh, $superBlock, 120); + if (! defined ($rc) || $rc != 120) { + return $result; + } + + my ($magic, $uuid, $label) = + unpack + "N x[28] a[16] x[60] Z[12]", + $superBlock; + + my $t = join ("", map { sprintf "%02x", ord($_) } split(//, $uuid)); + + if ($magic == 0x58465342) { + + $uuid = fancyUuid ($uuid); + $result = LabeledPartition->new ( + type => "xfs", + label => $label, + uuid => fancyUuid($t), + path => $path, + ); + + } + return $result; +} + 1;