Merge tag 'uuid-for-4.13' of git://git.infradead.org/users/hch/uuid
Pull uuid subsystem from Christoph Hellwig: "This is the new uuid subsystem, in which Amir, Andy and I have started consolidating our uuid/guid helpers and improving the types used for them. Note that various other subsystems have pulled in this tree, so I'd like it to go in early. UUID/GUID summary: - introduce the new uuid_t/guid_t types that are going to replace the somewhat confusing uuid_be/uuid_le types and make the terminology fit the various specs, as well as the userspace libuuid library. (me, based on a previous version from Amir) - consolidated generic uuid/guid helper functions lifted from XFS and libnvdimm (Amir and me) - conversions to the new types and helpers (Amir, Andy and me)" * tag 'uuid-for-4.13' of git://git.infradead.org/users/hch/uuid: (34 commits) ACPI: hns_dsaf_acpi_dsm_guid can be static mmc: sdhci-pci: make guid intel_dsm_guid static uuid: Take const on input of uuid_is_null() and guid_is_null() thermal: int340x_thermal: fix compile after the UUID API switch thermal: int340x_thermal: Switch to use new generic UUID API acpi: always include uuid.h ACPI: Switch to use generic guid_t in acpi_evaluate_dsm() ACPI / extlog: Switch to use new generic UUID API ACPI / bus: Switch to use new generic UUID API ACPI / APEI: Switch to use new generic UUID API acpi, nfit: Switch to use new generic UUID API MAINTAINERS: add uuid entry tmpfs: generate random sb->s_uuid scsi_debug: switch to uuid_t nvme: switch to uuid_t sysctl: switch to use uuid_t partitions/ldm: switch to use uuid_t overlayfs: use uuid_t instead of uuid_be fs: switch ->s_uuid to uuid_t ima/policy: switch to use uuid_t ...
This commit is contained in:
@@ -98,8 +98,7 @@ xfs-y += xfs_aops.o \
|
||||
xfs_sysfs.o \
|
||||
xfs_trans.o \
|
||||
xfs_xattr.o \
|
||||
kmem.o \
|
||||
uuid.o
|
||||
kmem.o
|
||||
|
||||
# low-level transaction/log code
|
||||
xfs-y += xfs_log.o \
|
||||
|
@@ -1,63 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2000-2003,2005 Silicon Graphics, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it would be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
#include <xfs.h>
|
||||
|
||||
/* IRIX interpretation of an uuid_t */
|
||||
typedef struct {
|
||||
__be32 uu_timelow;
|
||||
__be16 uu_timemid;
|
||||
__be16 uu_timehi;
|
||||
__be16 uu_clockseq;
|
||||
__be16 uu_node[3];
|
||||
} xfs_uu_t;
|
||||
|
||||
/*
|
||||
* uuid_getnodeuniq - obtain the node unique fields of a UUID.
|
||||
*
|
||||
* This is not in any way a standard or condoned UUID function;
|
||||
* it just something that's needed for user-level file handles.
|
||||
*/
|
||||
void
|
||||
uuid_getnodeuniq(uuid_t *uuid, int fsid [2])
|
||||
{
|
||||
xfs_uu_t *uup = (xfs_uu_t *)uuid;
|
||||
|
||||
fsid[0] = (be16_to_cpu(uup->uu_clockseq) << 16) |
|
||||
be16_to_cpu(uup->uu_timemid);
|
||||
fsid[1] = be32_to_cpu(uup->uu_timelow);
|
||||
}
|
||||
|
||||
int
|
||||
uuid_is_nil(uuid_t *uuid)
|
||||
{
|
||||
int i;
|
||||
char *cp = (char *)uuid;
|
||||
|
||||
if (uuid == NULL)
|
||||
return 0;
|
||||
/* implied check of version number here... */
|
||||
for (i = 0; i < sizeof *uuid; i++)
|
||||
if (*cp++) return 0; /* not nil */
|
||||
return 1; /* is nil */
|
||||
}
|
||||
|
||||
int
|
||||
uuid_equal(uuid_t *uuid1, uuid_t *uuid2)
|
||||
{
|
||||
return memcmp(uuid1, uuid2, sizeof(uuid_t)) ? 0 : 1;
|
||||
}
|
@@ -1,35 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2000-2003,2005 Silicon Graphics, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it would be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
#ifndef __XFS_SUPPORT_UUID_H__
|
||||
#define __XFS_SUPPORT_UUID_H__
|
||||
|
||||
typedef struct {
|
||||
unsigned char __u_bits[16];
|
||||
} uuid_t;
|
||||
|
||||
extern int uuid_is_nil(uuid_t *uuid);
|
||||
extern int uuid_equal(uuid_t *uuid1, uuid_t *uuid2);
|
||||
extern void uuid_getnodeuniq(uuid_t *uuid, int fsid [2]);
|
||||
|
||||
static inline void
|
||||
uuid_copy(uuid_t *dst, uuid_t *src)
|
||||
{
|
||||
memcpy(dst, src, sizeof(uuid_t));
|
||||
}
|
||||
|
||||
#endif /* __XFS_SUPPORT_UUID_H__ */
|
@@ -834,9 +834,7 @@ xfs_inode_item_format_convert(
|
||||
in_f->ilf_dsize = in_f32->ilf_dsize;
|
||||
in_f->ilf_ino = in_f32->ilf_ino;
|
||||
/* copy biggest field of ilf_u */
|
||||
memcpy(in_f->ilf_u.ilfu_uuid.__u_bits,
|
||||
in_f32->ilf_u.ilfu_uuid.__u_bits,
|
||||
sizeof(uuid_t));
|
||||
uuid_copy(&in_f->ilf_u.ilfu_uuid, &in_f32->ilf_u.ilfu_uuid);
|
||||
in_f->ilf_blkno = in_f32->ilf_blkno;
|
||||
in_f->ilf_len = in_f32->ilf_len;
|
||||
in_f->ilf_boffset = in_f32->ilf_boffset;
|
||||
@@ -851,9 +849,7 @@ xfs_inode_item_format_convert(
|
||||
in_f->ilf_dsize = in_f64->ilf_dsize;
|
||||
in_f->ilf_ino = in_f64->ilf_ino;
|
||||
/* copy biggest field of ilf_u */
|
||||
memcpy(in_f->ilf_u.ilfu_uuid.__u_bits,
|
||||
in_f64->ilf_u.ilfu_uuid.__u_bits,
|
||||
sizeof(uuid_t));
|
||||
uuid_copy(&in_f->ilf_u.ilfu_uuid, &in_f64->ilf_u.ilfu_uuid);
|
||||
in_f->ilf_blkno = in_f64->ilf_blkno;
|
||||
in_f->ilf_len = in_f64->ilf_len;
|
||||
in_f->ilf_boffset = in_f64->ilf_boffset;
|
||||
|
@@ -19,6 +19,7 @@
|
||||
#define __XFS_LINUX__
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/uuid.h>
|
||||
|
||||
/*
|
||||
* Kernel specific type declarations for XFS
|
||||
@@ -42,7 +43,6 @@ typedef __u32 xfs_nlink_t;
|
||||
|
||||
#include "kmem.h"
|
||||
#include "mrlock.h"
|
||||
#include "uuid.h"
|
||||
|
||||
#include <linux/semaphore.h>
|
||||
#include <linux/mm.h>
|
||||
|
@@ -352,13 +352,13 @@ xlog_header_check_mount(
|
||||
{
|
||||
ASSERT(head->h_magicno == cpu_to_be32(XLOG_HEADER_MAGIC_NUM));
|
||||
|
||||
if (uuid_is_nil(&head->h_fs_uuid)) {
|
||||
if (uuid_is_null(&head->h_fs_uuid)) {
|
||||
/*
|
||||
* IRIX doesn't write the h_fs_uuid or h_fmt fields. If
|
||||
* h_fs_uuid is nil, we assume this log was last mounted
|
||||
* h_fs_uuid is null, we assume this log was last mounted
|
||||
* by IRIX and continue.
|
||||
*/
|
||||
xfs_warn(mp, "nil uuid in log - IRIX style log");
|
||||
xfs_warn(mp, "null uuid in log - IRIX style log");
|
||||
} else if (unlikely(!uuid_equal(&mp->m_sb.sb_uuid, &head->h_fs_uuid))) {
|
||||
xfs_warn(mp, "log has mismatched uuid - can't recover");
|
||||
xlog_header_check_dump(mp, head);
|
||||
|
@@ -74,20 +74,19 @@ xfs_uuid_mount(
|
||||
int hole, i;
|
||||
|
||||
/* Publish UUID in struct super_block */
|
||||
BUILD_BUG_ON(sizeof(mp->m_super->s_uuid) != sizeof(uuid_t));
|
||||
memcpy(&mp->m_super->s_uuid, uuid, sizeof(uuid_t));
|
||||
uuid_copy(&mp->m_super->s_uuid, uuid);
|
||||
|
||||
if (mp->m_flags & XFS_MOUNT_NOUUID)
|
||||
return 0;
|
||||
|
||||
if (uuid_is_nil(uuid)) {
|
||||
xfs_warn(mp, "Filesystem has nil UUID - can't mount");
|
||||
if (uuid_is_null(uuid)) {
|
||||
xfs_warn(mp, "Filesystem has null UUID - can't mount");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
mutex_lock(&xfs_uuid_table_mutex);
|
||||
for (i = 0, hole = -1; i < xfs_uuid_table_size; i++) {
|
||||
if (uuid_is_nil(&xfs_uuid_table[i])) {
|
||||
if (uuid_is_null(&xfs_uuid_table[i])) {
|
||||
hole = i;
|
||||
continue;
|
||||
}
|
||||
@@ -124,7 +123,7 @@ xfs_uuid_unmount(
|
||||
|
||||
mutex_lock(&xfs_uuid_table_mutex);
|
||||
for (i = 0; i < xfs_uuid_table_size; i++) {
|
||||
if (uuid_is_nil(&xfs_uuid_table[i]))
|
||||
if (uuid_is_null(&xfs_uuid_table[i]))
|
||||
continue;
|
||||
if (!uuid_equal(uuid, &xfs_uuid_table[i]))
|
||||
continue;
|
||||
@@ -793,7 +792,10 @@ xfs_mountfs(
|
||||
* Copies the low order bits of the timestamp and the randomly
|
||||
* set "sequence" number out of a UUID.
|
||||
*/
|
||||
uuid_getnodeuniq(&sbp->sb_uuid, mp->m_fixedfsid);
|
||||
mp->m_fixedfsid[0] =
|
||||
(get_unaligned_be16(&sbp->sb_uuid.b[8]) << 16) |
|
||||
get_unaligned_be16(&sbp->sb_uuid.b[4]);
|
||||
mp->m_fixedfsid[1] = get_unaligned_be32(&sbp->sb_uuid.b[0]);
|
||||
|
||||
mp->m_dmevmask = 0; /* not persistent; set after each mount */
|
||||
|
||||
|
Reference in New Issue
Block a user