Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Illumos 6393 zfs receive a full send as a clone #4221

Conversation

kernelOfTruth
Copy link
Contributor

Illumos 6393 zfs receive a full send as a clone
Reviewed by: Matthew Ahrens [email protected]
Reviewed by: Prakash Surya [email protected]
Reviewed by: Richard Elling [email protected]
Approved by: Dan McDonald [email protected]

References:
https://www.illumos.org/issues/6393
illumos/illumos-gate@68ecb2e

diverged code base from Illumos:
[module/zfs/dmu_send.c]
zfsonlinux@fcff0f3 Illumos 5960, 5925
(due to ISO C90 & braces around #ifdef ZFS_DEBUG; now equal to upstream again)

ISO C90 - mixed declarations and code: for (struct receive_objnode *n = list_remove_head(&list->list);
struct receive_objnode *last_object;

Reorder code in function 'objlist_insert'
around the #ifdef ZFS_DEBUG statement
to account for unused variable & ISO C90 warnings

Remove
struct receive_ign_obj_node *n;
from Illumos 5960, 5925 which now isn't needed anymore (ISO C90).

Ported-by: kernelOfTruth [email protected]

Reviewed by: George Wilson <[email protected]>
Reviewed by: Paul Dagnelie <[email protected]>
Reviewed by: Richard Elling <[email protected]>
Reviewed by: Xin Li <[email protected]>
Reviewed by: Arne Jansen <[email protected]>
Approved by: Dan McDonald <[email protected]>

References:
https://www.illumos.org/issues/2605
illumos/illumos-gate@9c3fd12

Porting notes:

The tests from Illumos in usr/src/test/zfs-tests were left out
Further the following files which don't exist in ZoL:
usr/src/cmd/truss/expound.c
usr/src/lib/libzfs/common/mapfile-vers
usr/src/lib/libzfs_core/common/mapfile-vers
usr/src/pkg/manifests/system-test-zfstest.mf

From a readability point of view the changes in [module/zfs/dmu_traverse.c]
from openzfs@ecfb0b5 Fix misuse of input argument in traverse_visitbp
appear to be the optimum - also there's no functional change,
when going with upstream the compiler would likely complain about ISO C90 errors - so only switching
cdnp = buf->b_data;
to
child_dnp = buf->b_data;

diverged code base from Illumos:

[cmd/zstreamdump/zstreamdump.c]
openzfs@37f8a88 Illumos 5746 - more checksumming in zfs send

[include/sys/zfs_ioctl.h]
openzfs@0cee240 Speed up 'zfs list -t snapshot -o name -s name'

[module/zfs/zfs_ioctl.c]
openzfs@13fe019 Illumos 3464 zfs synctask code needs restructuring

[module/zfs/dmu_send.c]
openzfs@b58986e Use large stacks when available
openzfs@044baf0 Use taskq for dump_bytes()
ISO C90 - mixed declarations and code: 	struct send_block_record *to_data;
					struct receive_ign_obj_node *n;
account for 'missing braces around initializer' in 'struct send_thread_arg to_arg ='
ISO C90 - mixed declarations and code: 	void *payload = NULL;
					nvlist_t *nvl = fnvlist_alloc();
					uint64_t one = 1; uint64_t zero = 1;
					char recvname[ZFS_MAXNAMELEN];
					uint64_t val;
					uint32_t payloadlen = drc->drc_drr_begin->drr_payloadlen;
					size_t payload_len = 0;

[module/zfs/dsl_dataset.c]
Illumos 4185 add new cryptographic checksums to ZFS: SHA-512, Skein, Edon-R
hasn't landed yet, thus
' #include <sys/zio_checksum.h>
is still missing,

' #include <sys/dmu_send.h>
however is needed

further
replaced
fletcher_4_native(compressed, compressed_size, NULL, &cksum);
with
fletcher_4_native(compressed, compressed_size, &cksum);

ctx_template argument was removed (purpose: the template will be reused to make initialization more efficient)

C99 or C11 mode: declare 'int i' at the beginning of the function.

ISO C90 - mixed declarations and code: 	char buf[256];
					zio_cksum_t cksum;
					char *propval = kmem_asprintf("%u-%llx-%llx-%s",
					char recvname[ZFS_MAXNAMELEN];
					dsl_dataset_t *recv_ds;

[libzfs_sendrecv.c]
' #include <sha2.h>
isn't listed in the header list since sha2, sha256 is implemented differently in ZoL.

replace
fletcher_4_native(compressed, len, NULL, &cksum);
with
fletcher_4_native(compressed, len, &cksum);

declare 'int nread, i;' at the beginning of the function

openzfs@b8864a2 Fix gcc cast warnings

[module/zcommon/zfs_prop.c]
openzfs@11b9ec2 Add full SELinux support

[module/zfs/dmu_traverse.c]
openzfs@ecfb0b5 Fix misuse of input argument in traverse_visitbp
openzfs@79c76d5 Change KM_PUSHPAGE -> KM_SLEEP
openzfs@a168788 Reduce stack for traverse_visitbp() recursion
openzfs@b8d06fc Switch KM_SLEEP to KM_PUSHPAGE
openzfs@47050a8 Fix stack traverse_impl()
ISO C90: place 'uint64_t obj, error;' at the beginning, further replace 'err' with 'error'

[man/man8/zfs.8]
Part of the sections for 'zfs receive' and 'zfs send' was rewritten and reordered to approximate upstream.

Ported-by: kernelOfTruth [email protected]
@kernelOfTruth kernelOfTruth force-pushed the zfs_master_13.01.2016_2+2605+6393 branch 8 times, most recently from 5ddfabf to 45cff1d Compare January 14, 2016 23:43
Reviewed by: Matthew Ahrens <[email protected]>
Reviewed by: Prakash Surya <[email protected]>
Reviewed by: Richard Elling <[email protected]>
Approved by: Dan McDonald <[email protected]>

References:
https://www.illumos.org/issues/6393
illumos/illumos-gate@68ecb2e

diverged code base from Illumos:
[module/zfs/dmu_send.c]
openzfs@fcff0f3 Illumos 5960, 5925
(due to ISO C90 & braces around #ifdef ZFS_DEBUG; now equal to upstream again)

ISO C90 - mixed declarations and code: 	for (struct receive_objnode *n = list_remove_head(&list->list);
					struct receive_objnode *last_object;

Reorder code in function 'objlist_insert'
around the #ifdef ZFS_DEBUG statement
to account for unused variable & ISO C90 warnings

Remove
struct receive_ign_obj_node *n;
from Illumos 5960, 5925 which now isn't needed anymore (ISO C90).

Ported-by: kernelOfTruth [email protected]
@kernelOfTruth kernelOfTruth force-pushed the zfs_master_13.01.2016_2+2605+6393 branch from 45cff1d to 292b273 Compare January 14, 2016 23:53
@behlendorf
Copy link
Contributor

Closing, part of #4742.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants