usr/src/uts/common/fs/zfs/zfs_byteswap.c
author Chris Kirby <Chris.Kirby@oracle.com>
Thu, 10 Jun 2010 15:46:47 -0600
changeset 12605 6790e683d5a5
parent 11935 538c866aaac6
child 13952 7a22d0770fc8
permissions -rw-r--r--
6959846 DMU traverse prefetch size should be a global tunable
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     1
/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     2
 * CDDL HEADER START
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     3
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
5331
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
     5
 * Common Development and Distribution License (the "License").
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
     6
 * You may not use this file except in compliance with the License.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     7
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    11
 * and limitations under the License.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    12
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    18
 *
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    19
 * CDDL HEADER END
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    20
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    21
/*
11935
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 8283
diff changeset
    22
 * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    23
 * Use is subject to license terms.
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    24
 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    25
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    26
#include <sys/zfs_context.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    27
#include <sys/vfs.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    28
#include <sys/fs/zfs.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    29
#include <sys/zfs_znode.h>
11935
538c866aaac6 6716117 ZFS needs native system attribute infrastructure
Mark Shellenbaum <Mark.Shellenbaum@Sun.COM>
parents: 8283
diff changeset
    30
#include <sys/zfs_sa.h>
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    31
#include <sys/zfs_acl.h>
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    32
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    33
void
5331
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    34
zfs_oldace_byteswap(ace_t *ace, int ace_cnt)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    35
{
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    36
	int i;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    37
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    38
	for (i = 0; i != ace_cnt; i++, ace++) {
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    39
		ace->a_who = BSWAP_32(ace->a_who);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    40
		ace->a_access_mask = BSWAP_32(ace->a_access_mask);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    41
		ace->a_flags = BSWAP_16(ace->a_flags);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    42
		ace->a_type = BSWAP_16(ace->a_type);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    43
	}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    44
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
    45
5331
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    46
/*
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    47
 * swap ace_t and ace_oject_t
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    48
 */
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    49
void
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    50
zfs_ace_byteswap(void *buf, size_t size, boolean_t zfs_layout)
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    51
{
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    52
	caddr_t end;
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    53
	caddr_t ptr;
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    54
	zfs_ace_t *zacep;
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    55
	ace_t *acep;
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    56
	uint16_t entry_type;
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    57
	size_t entry_size;
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    58
	int ace_type;
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    59
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    60
	end = (caddr_t)buf + size;
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    61
	ptr = buf;
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    62
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    63
	while (ptr < end) {
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    64
		if (zfs_layout) {
8283
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
    65
			/*
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
    66
			 * Avoid overrun.  Embedded aces can have one
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
    67
			 * of several sizes.  We don't know exactly
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
    68
			 * how many our present, only the size of the
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
    69
			 * buffer containing them.  That size may be
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
    70
			 * larger than needed to hold the aces
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
    71
			 * present.  As long as we do not do any
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
    72
			 * swapping beyond the end of our block we are
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
    73
			 * okay.  It it safe to swap any non-ace data
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
    74
			 * within the block since it is just zeros.
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
    75
			 */
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
    76
			if (ptr + sizeof (zfs_ace_hdr_t) > end) {
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
    77
				break;
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
    78
			}
5331
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    79
			zacep = (zfs_ace_t *)ptr;
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    80
			zacep->z_hdr.z_access_mask =
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    81
			    BSWAP_32(zacep->z_hdr.z_access_mask);
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    82
			zacep->z_hdr.z_flags = BSWAP_16(zacep->z_hdr.z_flags);
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    83
			ace_type = zacep->z_hdr.z_type =
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    84
			    BSWAP_16(zacep->z_hdr.z_type);
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    85
			entry_type = zacep->z_hdr.z_flags & ACE_TYPE_FLAGS;
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    86
		} else {
8283
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
    87
			/* Overrun avoidance */
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
    88
			if (ptr + sizeof (ace_t) > end) {
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
    89
				break;
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
    90
			}
5331
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    91
			acep = (ace_t *)ptr;
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    92
			acep->a_access_mask = BSWAP_32(acep->a_access_mask);
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    93
			acep->a_flags = BSWAP_16(acep->a_flags);
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    94
			ace_type = acep->a_type = BSWAP_16(acep->a_type);
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    95
			acep->a_who = BSWAP_32(acep->a_who);
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    96
			entry_type = acep->a_flags & ACE_TYPE_FLAGS;
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    97
		}
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    98
		switch (entry_type) {
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
    99
		case ACE_OWNER:
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   100
		case ACE_EVERYONE:
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   101
		case (ACE_IDENTIFIER_GROUP | ACE_GROUP):
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   102
			entry_size = zfs_layout ?
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   103
			    sizeof (zfs_ace_hdr_t) : sizeof (ace_t);
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   104
			break;
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   105
		case ACE_IDENTIFIER_GROUP:
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   106
		default:
8283
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
   107
			/* Overrun avoidance */
5331
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   108
			if (zfs_layout) {
8283
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
   109
				if (ptr + sizeof (zfs_ace_t) <= end) {
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
   110
					zacep->z_fuid = BSWAP_64(zacep->z_fuid);
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
   111
				} else {
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
   112
					entry_size = sizeof (zfs_ace_t);
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
   113
					break;
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
   114
				}
5331
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   115
			}
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   116
			switch (ace_type) {
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   117
			case ACE_ACCESS_ALLOWED_OBJECT_ACE_TYPE:
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   118
			case ACE_ACCESS_DENIED_OBJECT_ACE_TYPE:
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   119
			case ACE_SYSTEM_AUDIT_OBJECT_ACE_TYPE:
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   120
			case ACE_SYSTEM_ALARM_OBJECT_ACE_TYPE:
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   121
				entry_size = zfs_layout ?
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   122
				    sizeof (zfs_object_ace_t) :
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   123
				    sizeof (ace_object_t);
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   124
				break;
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   125
			default:
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   126
				entry_size = zfs_layout ? sizeof (zfs_ace_t) :
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   127
				    sizeof (ace_t);
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   128
				break;
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   129
			}
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   130
		}
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   131
		ptr = ptr + entry_size;
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   132
	}
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   133
}
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   134
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   135
/* ARGSUSED */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   136
void
5331
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   137
zfs_oldacl_byteswap(void *buf, size_t size)
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   138
{
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   139
	int cnt;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   140
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   141
	/*
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   142
	 * Arggh, since we don't know how many ACEs are in
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   143
	 * the array, we have to swap the entire block
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   144
	 */
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   145
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   146
	cnt = size / sizeof (ace_t);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   147
5331
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   148
	zfs_oldace_byteswap((ace_t *)buf, cnt);
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   149
}
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   150
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   151
/* ARGSUSED */
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   152
void
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   153
zfs_acl_byteswap(void *buf, size_t size)
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   154
{
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   155
	zfs_ace_byteswap(buf, size, B_TRUE);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   156
}
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   157
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   158
void
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   159
zfs_znode_byteswap(void *buf, size_t size)
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   160
{
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   161
	znode_phys_t *zp = buf;
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   162
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   163
	ASSERT(size >= sizeof (znode_phys_t));
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   164
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   165
	zp->zp_crtime[0] = BSWAP_64(zp->zp_crtime[0]);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   166
	zp->zp_crtime[1] = BSWAP_64(zp->zp_crtime[1]);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   167
	zp->zp_atime[0] = BSWAP_64(zp->zp_atime[0]);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   168
	zp->zp_atime[1] = BSWAP_64(zp->zp_atime[1]);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   169
	zp->zp_mtime[0] = BSWAP_64(zp->zp_mtime[0]);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   170
	zp->zp_mtime[1] = BSWAP_64(zp->zp_mtime[1]);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   171
	zp->zp_ctime[0] = BSWAP_64(zp->zp_ctime[0]);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   172
	zp->zp_ctime[1] = BSWAP_64(zp->zp_ctime[1]);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   173
	zp->zp_gen = BSWAP_64(zp->zp_gen);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   174
	zp->zp_mode = BSWAP_64(zp->zp_mode);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   175
	zp->zp_size = BSWAP_64(zp->zp_size);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   176
	zp->zp_parent = BSWAP_64(zp->zp_parent);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   177
	zp->zp_links = BSWAP_64(zp->zp_links);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   178
	zp->zp_xattr = BSWAP_64(zp->zp_xattr);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   179
	zp->zp_rdev = BSWAP_64(zp->zp_rdev);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   180
	zp->zp_flags = BSWAP_64(zp->zp_flags);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   181
	zp->zp_uid = BSWAP_64(zp->zp_uid);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   182
	zp->zp_gid = BSWAP_64(zp->zp_gid);
5331
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   183
	zp->zp_zap = BSWAP_64(zp->zp_zap);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   184
	zp->zp_pad[0] = BSWAP_64(zp->zp_pad[0]);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   185
	zp->zp_pad[1] = BSWAP_64(zp->zp_pad[1]);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   186
	zp->zp_pad[2] = BSWAP_64(zp->zp_pad[2]);
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   187
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   188
	zp->zp_acl.z_acl_extern_obj = BSWAP_64(zp->zp_acl.z_acl_extern_obj);
5331
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   189
	zp->zp_acl.z_acl_size = BSWAP_32(zp->zp_acl.z_acl_size);
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   190
	zp->zp_acl.z_acl_version = BSWAP_16(zp->zp_acl.z_acl_version);
5331
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   191
	zp->zp_acl.z_acl_count = BSWAP_16(zp->zp_acl.z_acl_count);
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   192
	if (zp->zp_acl.z_acl_version == ZFS_ACL_VERSION) {
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   193
		zfs_acl_byteswap((void *)&zp->zp_acl.z_ace_data[0],
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   194
		    ZFS_ACE_SPACE);
8283
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
   195
	} else {
5331
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   196
		zfs_oldace_byteswap((ace_t *)&zp->zp_acl.z_ace_data[0],
3047ad28a67b PSARC/2007/218 caller_context_t in all VOPs
amw
parents: 905
diff changeset
   197
		    ACE_SLOT_CNT);
8283
1ca59f393041 6764193 Broken symlinks on cross platform zfs send/recv
Tim Haley <Tim.Haley@Sun.COM>
parents: 5331
diff changeset
   198
	}
789
b348f31ed315 PSARC 2002/240 ZFS
ahrens
parents:
diff changeset
   199
}