payload: {"action":"created","comment":{"url":"https://api.github.com/repos/zfsonlinux/zfs/pulls/comments/358664575","pull_request_review_id":333110337,"id":358664575,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM1ODY2NDU3NQ==","diff_hunk":"@@ -0,0 +1,53 @@\n+/*\n+ * CDDL HEADER START\n+ *\n+ * The contents of this file are subject to the terms of the\n+ * Common Development and Distribution License, Version 1.0 only\n+ * (the \"License\").  You may not use this file except in compliance\n+ * with the License.\n+ *\n+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE\n+ * or http://www.opensolaris.org/os/licensing.\n+ * See the License for the specific language governing permissions\n+ * and limitations under the License.\n+ *\n+ * When distributing Covered Code, include this CDDL HEADER in each\n+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.\n+ * If applicable, add the following below this CDDL HEADER, with the\n+ * fields enclosed by brackets \"[]\" replaced with your own identifying\n+ * information: Portions Copyright [yyyy] [name of copyright owner]\n+ *\n+ * CDDL HEADER END\n+ */","path":"include/sys/zstd/zstd.h","position":21,"original_position":21,"commit_id":"2533571dbf0b46d98020d81c82b2f01fc8b87542","original_commit_id":"2533571dbf0b46d98020d81c82b2f01fc8b87542","user":{"login":"Ornias1993","id":7613738,"node_id":"MDQ6VXNlcjc2MTM3Mzg=","avatar_url":"https://avatars2.githubusercontent.com/u/7613738?v=4","gravatar_id":"","url":"https://api.github.com/users/Ornias1993","html_url":"https://github.com/Ornias1993","followers_url":"https://api.github.com/users/Ornias1993/followers","following_url":"https://api.github.com/users/Ornias1993/following{/other_user}","gists_url":"https://api.github.com/users/Ornias1993/gists{/gist_id}","starred_url":"https://api.github.com/users/Ornias1993/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ornias1993/subscriptions","organizations_url":"https://api.github.com/users/Ornias1993/orgs","repos_url":"https://api.github.com/users/Ornias1993/repos","events_url":"https://api.github.com/users/Ornias1993/events{/privacy}","received_events_url":"https://api.github.com/users/Ornias1993/received_events","type":"User","site_admin":false},"body":"> \"And please don't use such pejorative terms\"\r\n\r\nSorry but in copyright law virality is frequently used without any pejorative meaning\r\n\r\n> \"This has to do with the fact that code around zstd should remain under its original or similar terms.\"\r\n\r\nYou create an unworkable situation with this request, as we can turn it the other way around and say this should follow the licence on zstd.c (which is CDDL). Virality can work in two directions and we have made a clear choice which is neither wrong nor right. I'll leave it at that.\r\n\r\n> \"@allanjude did the right thing here with the rest of his code\"\r\n\r\nHis code is also mostly CDDL too.\r\n\r\n> \"I see no reason we can't respect the spirit here with the rest of it.\"\r\n\r\nThis is no code feedback but your personal preference which fine is noted. I do not feel the need to discuss it more than I already did, unless the maintainers define it as formally wrong (which it legally isn't).","created_at":"2019-12-17T08:49:30Z","updated_at":"2019-12-17T08:49:30Z","html_url":"https://github.com/zfsonlinux/zfs/pull/9735#discussion_r358664575","pull_request_url":"https://api.github.com/repos/zfsonlinux/zfs/pulls/9735","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/zfsonlinux/zfs/pulls/comments/358664575"},"html":{"href":"https://github.com/zfsonlinux/zfs/pull/9735#discussion_r358664575"},"pull_request":{"href":"https://api.github.com/repos/zfsonlinux/zfs/pulls/9735"}},"in_reply_to_id":358656895},"pull_request":{"url":"https://api.github.com/repos/zfsonlinux/zfs/pulls/9735","id":353842964,"node_id":"MDExOlB1bGxSZXF1ZXN0MzUzODQyOTY0","html_url":"https://github.com/zfsonlinux/zfs/pull/9735","diff_url":"https://github.com/zfsonlinux/zfs/pull/9735.diff","patch_url":"https://github.com/zfsonlinux/zfs/pull/9735.patch","issue_url":"https://api.github.com/repos/zfsonlinux/zfs/issues/9735","number":9735,"state":"open","locked":false,"title":"Introduce ZSTD compression to ZFS","user":{"login":"c0d3z3r0","id":6205797,"node_id":"MDQ6VXNlcjYyMDU3OTc=","avatar_url":"https://avatars3.githubusercontent.com/u/6205797?v=4","gravatar_id":"","url":"https://api.github.com/users/c0d3z3r0","html_url":"https://github.com/c0d3z3r0","followers_url":"https://api.github.com/users/c0d3z3r0/followers","following_url":"https://api.github.com/users/c0d3z3r0/following{/other_user}","gists_url":"https://api.github.com/users/c0d3z3r0/gists{/gist_id}","starred_url":"https://api.github.com/users/c0d3z3r0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/c0d3z3r0/subscriptions","organizations_url":"https://api.github.com/users/c0d3z3r0/orgs","repos_url":"https://api.github.com/users/c0d3z3r0/repos","events_url":"https://api.github.com/users/c0d3z3r0/events{/privacy}","received_events_url":"https://api.github.com/users/c0d3z3r0/received_events","type":"User","site_admin":false},"body":"﻿**This PR introduces ZSTD compression to ZFS.**\r\n\r\n**Many thanks to:**\r\nThe original Proof of Concept by @allanjude see: #9024\r\nThe Linux compatibility redesign by @brainslayer see: #8941\r\nSpin-off kvmem patch by @c0d3z3r0 see: #9034\r\nSpin-off test refactor by @ornias1993 see: #9626\r\nSpin-off Code-coverage Ignore by @ornias1993 see: #9726\r\nAdditional testing, validation and review by @dan-and and @ornias1993 see: [Test suite](https://github.com/Ornias1993/zfs-compression-test)\r\nRestructure and Refactor by @c0d3z3r0 and @brainslayer see: This PR\r\nPR description and documentation by @ornias1993 see: This PR\r\n\r\nSigned-off-by: Allan Jude <allanjude@freebsd.org>\r\nSigned-off-by: Sebastian Gottschall <s.gottschall@dd-wrt.com>\r\nSigned-off-by: Michael Niewöhner <foss@mniewoehner.de>\r\nSigned-off-by: Kjeld Schouten-Lebbing <kjeld@schouten-lebbing.nl>\r\n_See commits for sign-off-by per code-portion_\r\n\r\n### Motivation and Context\r\nZStandard is a modern, high performance, general compression algorithm originally developed by Yann Collet (the author of LZ4). It aims to provide similar or better compression levels to GZIP, but with much better performance. ZStandard provides a large selection of compression levels to allow a storage administrator to select the preferred performance/compression trade-off.\r\n\r\nA [Proof of Concept ](https://github.com/zfsonlinux/zfs/pull/9024)was made by @allanjude for FreeBSD and reworked by @brainslayer in his [PR](https://github.com/zfsonlinux/zfs/pull/8941), adding the following:\r\n- Made to work on Linux\r\n- Memory Allocation reworked\r\n- Fixed errors leading to uncompressed writes (and non-realistic performance)\r\n- Added ZSTD to compression test suite\r\n- Considerable testing (see \"How Has This Been Tested\")\r\n\r\nThis work was restructured and, somewhat, refactored by @c0d3z3r0 and description/documentation is(re)written by @ornias1993 to ensure it's easy-to and ready-for review.\r\n\r\nThis PR description might be a long read, but tries to encapsulate multiple previous iterations, much work and many comments.\r\n\r\n### Description\r\n**ZSTD Feature**\r\nThis PR adds the new compression types: **zstd** and **zstd-fast**, which is basically a faster \"negative\" level of zstd.\r\n\r\nAvailable compression levels for zstd are zstd-1 through zstd-19. In addition, faster levels supported by zstd-fast are 1-10, 20-100 (in increments of 10), 500 and 1000. As zstd-fast is basically a \"negative\" level of zstd, it gets faster with every level in stark contrast with \"normal\" zstd which gets slower with every level. \r\n\r\nRather than the approach used when gzip was added, of using a separate compression type for each different level, this PR added a new hidden property, `compression_level`. All of the zstd levels use the single entry in the zio_compress enum, since all levels use the same decompression function. \r\n\r\nHowever, in some cases, it was necessary to know what level a block was compressed within other parts of the code, so the compression level is stored on disk inline with the data, after the compression header (uncompressed size). The level is plumbed through arc_buf_hdr_t, objset_t, and zio_prop_t. There may still be additional places where this needs to be added.\r\n\r\nThis new property is hidden from the user, and the user simply does `zfs set compress=zstd-10 dataset` and zfs_ioctl.c splits this single value into the two values to be stored in the dataset properties. This logic has been extended to Channel Programs as well.\r\n\r\n### How Has This Been Tested?\r\n\r\nThe following testing has been performed:\r\n#### Performance testing\r\nExtra care has been taken to guarantee performance and reliability.\r\n\r\nCompression performance using a custom development script by @Ornias.\r\nRepeatability of the test is confirmed by @dan-and.\r\n\r\n_Please click the graphs for more detail_\r\n_Speeds are for comparative reference only and will differ based on the system from which the test is ran_\r\n\r\n![image](https://user-images.githubusercontent.com/7613738/70848447-09ef3c80-1e72-11ea-8e7b-f16d6191ffee.png)\r\n\r\n![image](https://user-images.githubusercontent.com/7613738/70848449-0f4c8700-1e72-11ea-8699-bacdc3c71909.png)\r\n\r\n_Test Tool: [https://github.com/Ornias1993/zfs-compression-test](https://github.com/Ornias1993/zfs-compression-test)_\r\n\r\nThis test also includes SHA256 checkum verification, which it passes.\r\n\r\n#### Buildbot testing\r\nOn top of the normal build-bot procedure, extra manual verification has been done to ensure the test timers of relevant tests stay as close to master as possible. This is done due to early tests indicating situations in which a test would pass, but (due to bugs) with significant performance degradation.\r\n\r\nNo unexpected slow executions of tests where observed in this PR.\r\n\r\n#### Stress and live testing\r\nStress testing has been performed on a ssd only pool by @brainslayer and on an hdd pool by @dan-and\r\nOn top of that, multiple versions of this build have been tested running on a ssd and hdd based live (production) machines with varying load, to ensure stability.\r\n\r\n### Frequently Asked Questions\r\n- Q: Why is it so many lines of code, I can't review all of that...\r\nA: Most of this code is the ZSTD library, which has not been altered. Therefor it would be safe to skip contrib/zstd during your review.\r\n- Q: Why did you guys use the full ZSTD library, why not cut it down instead?\r\n A: This was a difficult choice, we tried to take into account the problems upgrading lz4 and wanted to keep it as \"upgrade friendly\" as possible. The performance difference between a cut-down and full zstd library are minimal.\r\n - Q: Why keep the FreeBSD compatibility code, didn't Behlendorf say to remove it a year ago? Does it work on freebsd?\r\n A: A lot can happen in a year. Because of the FreeBSD merger (and to not spend time removing things only to put it back) we wanted to keep it as easy as possible for the BSD developers to port. However: We did not test on FreeBSD.\r\n - Q: Why is there a user-space init for ZSTD?\r\n A: Some tests happen to run/build in user-space, this ensures test compatibility and shouldn't have any adverse effects\r\n - Q: Why are the copyright headers changed? isn't that a bad thing?\r\n A: Copyright headers do not change actual copyright. When we added a header, we just reformatted the rest to ensure it looks nice. We also made extra sure the headers are correct for ZSTD, by going over all changes and adding headers where they where forgotten by previous contributors.\r\n - Q: Why do you guys use `ccflags-y += -Wframe-larger-than=20480`, wouldn't this cause issues down the line?\r\n A: This is a consequence of using the unmodified ZSTD library and is only used on said library. However, the functions giving Frame-Size errors are not actually used by us. This is tested by modifying the Library without the troubled code. We can assure you this does not cause issues.\r\n - Q: Why is `contrib/zstd` ignored from code coverage, don't we want to cover zstd with tests too?\r\n A: Most of the code in the unmodified library is not in use by ZFS (and thus: Not covered by tests) and is already tested/supported by the ZSTD project. There are no plans for OpenZFS to maintain our own ZSTD fork. So in short: Calculating coverage on the ZSTD library leads to lots of \"uncovered code\" which is only a distraction because the ZSTD library isn't supposed to be covered by our tests.\r\n - Q: Shouldn't the decompression speeds be much higher?\r\n A: While the compression speeds are on par with stock-zstd metrics, indeed on the decompression side there is still room for improvement. Luckily this PR never was meant to be the end of ZSTD-on-ZFS development and we are full of idea's for future incremental performance, quality and feature enhancements...\r\n\r\n\r\n### Types of changes\r\n- [ ] Bug fix (non-breaking change which fixes an issue)\r\n- [X] New feature (non-breaking change which adds functionality)\r\n- [X] Performance enhancement (non-breaking change which improves efficiency)\r\n- [ ] Code cleanup (non-breaking change which makes code smaller or more readable)\r\n- [ ] Breaking change (fix or feature that would cause existing functionality to change)\r\n- [X] Documentation (a change to man pages or other documentation)\r\n\r\n### Checklist:\r\n- [X] My code follows the ZFS on Linux [code style requirements](https://github.com/zfsonlinux/zfs/blob/master/.github/CONTRIBUTING.md#coding-conventions).\r\n- [X] I have updated the documentation accordingly.\r\n- [X] I have read the [**contributing** document](https://github.com/zfsonlinux/zfs/blob/master/.github/CONTRIBUTING.md).\r\n- [X] I have added [tests](https://github.com/zfsonlinux/zfs/tree/master/tests) to cover my changes.\r\n- [X] All new and existing tests passed.\r\n- [X] All commit messages are properly formatted and contain [`Signed-off-by`](https://github.com/zfsonlinux/zfs/blob/master/.github/CONTRIBUTING.md#signed-off-by).","created_at":"2019-12-16T23:51:09Z","updated_at":"2019-12-17T08:49:30Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a4b21e3defc2f16e743da113c854feef1fe20e88","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/zfsonlinux/zfs/pulls/9735/commits","review_comments_url":"https://api.github.com/repos/zfsonlinux/zfs/pulls/9735/comments","review_comment_url":"https://api.github.com/repos/zfsonlinux/zfs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/zfsonlinux/zfs/issues/9735/comments","statuses_url":"https://api.github.com/repos/zfsonlinux/zfs/statuses/2533571dbf0b46d98020d81c82b2f01fc8b87542","head":{"label":"c0d3z3r0:for-upstream/zstd","ref":"for-upstream/zstd","sha":"2533571dbf0b46d98020d81c82b2f01fc8b87542","user":{"login":"c0d3z3r0","id":6205797,"node_id":"MDQ6VXNlcjYyMDU3OTc=","avatar_url":"https://avatars3.githubusercontent.com/u/6205797?v=4","gravatar_id":"","url":"https://api.github.com/users/c0d3z3r0","html_url":"https://github.com/c0d3z3r0","followers_url":"https://api.github.com/users/c0d3z3r0/followers","following_url":"https://api.github.com/users/c0d3z3r0/following{/other_user}","gists_url":"https://api.github.com/users/c0d3z3r0/gists{/gist_id}","starred_url":"https://api.github.com/users/c0d3z3r0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/c0d3z3r0/subscriptions","organizations_url":"https://api.github.com/users/c0d3z3r0/orgs","repos_url":"https://api.github.com/users/c0d3z3r0/repos","events_url":"https://api.github.com/users/c0d3z3r0/events{/privacy}","received_events_url":"https://api.github.com/users/c0d3z3r0/received_events","type":"User","site_admin":false},"repo":{"id":166997730,"node_id":"MDEwOlJlcG9zaXRvcnkxNjY5OTc3MzA=","name":"zfs","full_name":"c0d3z3r0/zfs","private":false,"owner":{"login":"c0d3z3r0","id":6205797,"node_id":"MDQ6VXNlcjYyMDU3OTc=","avatar_url":"https://avatars3.githubusercontent.com/u/6205797?v=4","gravatar_id":"","url":"https://api.github.com/users/c0d3z3r0","html_url":"https://github.com/c0d3z3r0","followers_url":"https://api.github.com/users/c0d3z3r0/followers","following_url":"https://api.github.com/users/c0d3z3r0/following{/other_user}","gists_url":"https://api.github.com/users/c0d3z3r0/gists{/gist_id}","starred_url":"https://api.github.com/users/c0d3z3r0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/c0d3z3r0/subscriptions","organizations_url":"https://api.github.com/users/c0d3z3r0/orgs","repos_url":"https://api.github.com/users/c0d3z3r0/repos","events_url":"https://api.github.com/users/c0d3z3r0/events{/privacy}","received_events_url":"https://api.github.com/users/c0d3z3r0/received_events","type":"User","site_admin":false},"html_url":"https://github.com/c0d3z3r0/zfs","description":"ZFS on Linux - the official OpenZFS implementation for Linux.","fork":true,"url":"https://api.github.com/repos/c0d3z3r0/zfs","forks_url":"https://api.github.com/repos/c0d3z3r0/zfs/forks","keys_url":"https://api.github.com/repos/c0d3z3r0/zfs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/c0d3z3r0/zfs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/c0d3z3r0/zfs/teams","hooks_url":"https://api.github.com/repos/c0d3z3r0/zfs/hooks","issue_events_url":"https://api.github.com/repos/c0d3z3r0/zfs/issues/events{/number}","events_url":"https://api.github.com/repos/c0d3z3r0/zfs/events","assignees_url":"https://api.github.com/repos/c0d3z3r0/zfs/assignees{/user}","branches_url":"https://api.github.com/repos/c0d3z3r0/zfs/branches{/branch}","tags_url":"https://api.github.com/repos/c0d3z3r0/zfs/tags","blobs_url":"https://api.github.com/repos/c0d3z3r0/zfs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/c0d3z3r0/zfs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/c0d3z3r0/zfs/git/refs{/sha}","trees_url":"https://api.github.com/repos/c0d3z3r0/zfs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/c0d3z3r0/zfs/statuses/{sha}","languages_url":"https://api.github.com/repos/c0d3z3r0/zfs/languages","stargazers_url":"https://api.github.com/repos/c0d3z3r0/zfs/stargazers","contributors_url":"https://api.github.com/repos/c0d3z3r0/zfs/contributors","subscribers_url":"https://api.github.com/repos/c0d3z3r0/zfs/subscribers","subscription_url":"https://api.github.com/repos/c0d3z3r0/zfs/subscription","commits_url":"https://api.github.com/repos/c0d3z3r0/zfs/commits{/sha}","git_commits_url":"https://api.github.com/repos/c0d3z3r0/zfs/git/commits{/sha}","comments_url":"https://api.github.com/repos/c0d3z3r0/zfs/comments{/number}","issue_comment_url":"https://api.github.com/repos/c0d3z3r0/zfs/issues/comments{/number}","contents_url":"https://api.github.com/repos/c0d3z3r0/zfs/contents/{+path}","compare_url":"https://api.github.com/repos/c0d3z3r0/zfs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/c0d3z3r0/zfs/merges","archive_url":"https://api.github.com/repos/c0d3z3r0/zfs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/c0d3z3r0/zfs/downloads","issues_url":"https://api.github.com/repos/c0d3z3r0/zfs/issues{/number}","pulls_url":"https://api.github.com/repos/c0d3z3r0/zfs/pulls{/number}","milestones_url":"https://api.github.com/repos/c0d3z3r0/zfs/milestones{/number}","notifications_url":"https://api.github.com/repos/c0d3z3r0/zfs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/c0d3z3r0/zfs/labels{/name}","releases_url":"https://api.github.com/repos/c0d3z3r0/zfs/releases{/id}","deployments_url":"https://api.github.com/repos/c0d3z3r0/zfs/deployments","created_at":"2019-01-22T13:20:24Z","updated_at":"2019-07-28T22:40:17Z","pushed_at":"2019-12-16T23:47:18Z","git_url":"git://github.com/c0d3z3r0/zfs.git","ssh_url":"git@github.com:c0d3z3r0/zfs.git","clone_url":"https://github.com/c0d3z3r0/zfs.git","svn_url":"https://github.com/c0d3z3r0/zfs","homepage":"https://zfsonlinux.org/","size":58793,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"zfsonlinux:master","ref":"master","sha":"ba434b18ec6bcedb9d9eb39fa234fbba55032381","user":{"login":"zfsonlinux","id":575083,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU3NTA4Mw==","avatar_url":"https://avatars3.githubusercontent.com/u/575083?v=4","gravatar_id":"","url":"https://api.github.com/users/zfsonlinux","html_url":"https://github.com/zfsonlinux","followers_url":"https://api.github.com/users/zfsonlinux/followers","following_url":"https://api.github.com/users/zfsonlinux/following{/other_user}","gists_url":"https://api.github.com/users/zfsonlinux/gists{/gist_id}","starred_url":"https://api.github.com/users/zfsonlinux/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zfsonlinux/subscriptions","organizations_url":"https://api.github.com/users/zfsonlinux/orgs","repos_url":"https://api.github.com/users/zfsonlinux/repos","events_url":"https://api.github.com/users/zfsonlinux/events{/privacy}","received_events_url":"https://api.github.com/users/zfsonlinux/received_events","type":"Organization","site_admin":false},"repo":{"id":437011,"node_id":"MDEwOlJlcG9zaXRvcnk0MzcwMTE=","name":"zfs","full_name":"zfsonlinux/zfs","private":false,"owner":{"login":"zfsonlinux","id":575083,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU3NTA4Mw==","avatar_url":"https://avatars3.githubusercontent.com/u/575083?v=4","gravatar_id":"","url":"https://api.github.com/users/zfsonlinux","html_url":"https://github.com/zfsonlinux","followers_url":"https://api.github.com/users/zfsonlinux/followers","following_url":"https://api.github.com/users/zfsonlinux/following{/other_user}","gists_url":"https://api.github.com/users/zfsonlinux/gists{/gist_id}","starred_url":"https://api.github.com/users/zfsonlinux/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zfsonlinux/subscriptions","organizations_url":"https://api.github.com/users/zfsonlinux/orgs","repos_url":"https://api.github.com/users/zfsonlinux/repos","events_url":"https://api.github.com/users/zfsonlinux/events{/privacy}","received_events_url":"https://api.github.com/users/zfsonlinux/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/zfsonlinux/zfs","description":"ZFS on Linux - the official OpenZFS implementation for Linux.","fork":false,"url":"https://api.github.com/repos/zfsonlinux/zfs","forks_url":"https://api.github.com/repos/zfsonlinux/zfs/forks","keys_url":"https://api.github.com/repos/zfsonlinux/zfs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/zfsonlinux/zfs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/zfsonlinux/zfs/teams","hooks_url":"https://api.github.com/repos/zfsonlinux/zfs/hooks","issue_events_url":"https://api.github.com/repos/zfsonlinux/zfs/issues/events{/number}","events_url":"https://api.github.com/repos/zfsonlinux/zfs/events","assignees_url":"https://api.github.com/repos/zfsonlinux/zfs/assignees{/user}","branches_url":"https://api.github.com/repos/zfsonlinux/zfs/branches{/branch}","tags_url":"https://api.github.com/repos/zfsonlinux/zfs/tags","blobs_url":"https://api.github.com/repos/zfsonlinux/zfs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/zfsonlinux/zfs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/zfsonlinux/zfs/git/refs{/sha}","trees_url":"https://api.github.com/repos/zfsonlinux/zfs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/zfsonlinux/zfs/statuses/{sha}","languages_url":"https://api.github.com/repos/zfsonlinux/zfs/languages","stargazers_url":"https://api.github.com/repos/zfsonlinux/zfs/stargazers","contributors_url":"https://api.github.com/repos/zfsonlinux/zfs/contributors","subscribers_url":"https://api.github.com/repos/zfsonlinux/zfs/subscribers","subscription_url":"https://api.github.com/repos/zfsonlinux/zfs/subscription","commits_url":"https://api.github.com/repos/zfsonlinux/zfs/commits{/sha}","git_commits_url":"https://api.github.com/repos/zfsonlinux/zfs/git/commits{/sha}","comments_url":"https://api.github.com/repos/zfsonlinux/zfs/comments{/number}","issue_comment_url":"https://api.github.com/repos/zfsonlinux/zfs/issues/comments{/number}","contents_url":"https://api.github.com/repos/zfsonlinux/zfs/contents/{+path}","compare_url":"https://api.github.com/repos/zfsonlinux/zfs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/zfsonlinux/zfs/merges","archive_url":"https://api.github.com/repos/zfsonlinux/zfs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/zfsonlinux/zfs/downloads","issues_url":"https://api.github.com/repos/zfsonlinux/zfs/issues{/number}","pulls_url":"https://api.github.com/repos/zfsonlinux/zfs/pulls{/number}","milestones_url":"https://api.github.com/repos/zfsonlinux/zfs/milestones{/number}","notifications_url":"https://api.github.com/repos/zfsonlinux/zfs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/zfsonlinux/zfs/labels{/name}","releases_url":"https://api.github.com/repos/zfsonlinux/zfs/releases{/id}","deployments_url":"https://api.github.com/repos/zfsonlinux/zfs/deployments","created_at":"2009-12-14T20:20:34Z","updated_at":"2019-12-17T08:37:46Z","pushed_at":"2019-12-17T02:42:28Z","git_url":"git://github.com/zfsonlinux/zfs.git","ssh_url":"git@github.com:zfsonlinux/zfs.git","clone_url":"https://github.com/zfsonlinux/zfs.git","svn_url":"https://github.com/zfsonlinux/zfs","homepage":"https://zfsonlinux.org/","size":58252,"stargazers_count":5007,"watchers_count":5007,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1047,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1001,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":1047,"open_issues":1001,"watchers":5007,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/zfsonlinux/zfs/pulls/9735"},"html":{"href":"https://github.com/zfsonlinux/zfs/pull/9735"},"issue":{"href":"https://api.github.com/repos/zfsonlinux/zfs/issues/9735"},"comments":{"href":"https://api.github.com/repos/zfsonlinux/zfs/issues/9735/comments"},"review_comments":{"href":"https://api.github.com/repos/zfsonlinux/zfs/pulls/9735/comments"},"review_comment":{"href":"https://api.github.com/repos/zfsonlinux/zfs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/zfsonlinux/zfs/pulls/9735/commits"},"statuses":{"href":"https://api.github.com/repos/zfsonlinux/zfs/statuses/2533571dbf0b46d98020d81c82b2f01fc8b87542"}},"author_association":"CONTRIBUTOR"}}
other: {"actor":{"display_login":"Ornias1993"}}