{"push_id":1255835126,"size":22,"distinct_size":8,"ref":"refs/heads/tunable_limit","head":"4da76c026fae07bdf6855358e42daf6bc8f759a4","before":"1fdf3510780894db929719aafc1c64c26b02ecf3","commits":[{"sha":"afb6c031e87d511abd9f0f4ec629ab1972490269","author":{"name":"Chunwei Chen","email":"0f79a3f764949a984b39ca36fe80e1c7836f91a4@osnexus.com"},"message":"Linux 4.7 compat: fix zpl_get_acl returns invalid acl pointer\n\nStarting from Linux 4.7, get_acl will set acl cache pointer to temporary\nsentinel value before calling i_op->get_acl. Therefore we can't compare\nagainst ACL_NOT_CACHED and return.\n\nSince from Linux 3.14, get_acl already check the cache for us, so we\ndisable this in zpl_get_acl.\n\nLinux 4.7 also does set_cached_acl for us so we disable it in zpl_get_acl.\n\nSigned-off-by: Chunwei Chen <david.chen@osnexus.com>\nSigned-off-by: Nikolay Borisov <n.borisov.lkml@gmail.com>\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nCloses #4944\nCloses #4946","distinct":false,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/afb6c031e87d511abd9f0f4ec629ab1972490269"},{"sha":"689f093ebcfa0d57895495050d2b470ed2bef52e","author":{"name":"Gvozden Neskovic","email":"89b6946db64cd5770ca50b2bd89195148bde383d@gmail.com"},"message":"Build user-space with different gcc optimization levels\n\nThis fix resolves warnings reported during compiling of user-space\nlibraries with different gcc optimization levels.\n\nTested with gcc versions: 4.9.2 (Debian), and 6.1.1 (Fedora).\nThe patch enables use of following opt levels: O0, O1, O2, O3, Og, Os, Ofast.\n\nList of warnings:\n\n[GCC 4.9.2 -Os]\nlibzfs_sendrecv.c:3726:26: error: 'clp' may be used uninitialized in this function [-Werror=maybe-uninitialized]\n\n[GCC 4.9.2 -Og]\nfs_fletcher.c:323:26: error: 'idx' may be used uninitialized in this function [-Werror=maybe-uninitialized]\ndsl_dataset.c:1290:12: error: 'atp' may be used uninitialized in this function [-Werror=maybe-uninitialized]\n\n[GCC 4.9.2 -Ofast]\nu8_textprep.c:1310:9: error: 'tc[3ul]' may be used uninitialized in this function [-Werror=maybe-uninitialized]\nu8_textprep.c:177:23: error: 'u8t[0ul]' may be used uninitialized in this function [-Werror=maybe-uninitialized]\ndsl_dataset.c:2089:37: error: ‘hds’ may be used uninitialized in this function [-Werror=maybe-uninitialized]\ndsl_dataset.c:3216:2: error: ‘ds’ may be used uninitialized in this function [-Werror=maybe-uninitialized]\ndsl_dataset.c:1591:2: error: ‘ds’ may be used uninitialized in this function [-Werror=maybe-uninitialized]\ndsl_dataset.c:3341:2: error: ‘ds’ may be used uninitialized in this function [-Werror=maybe-uninitialized]\nvdev_raidz.c:1153:8: error: 'dcount[2]' may be used uninitialized in this function [-Werror=maybe-uninitialized]\nvdev_raidz.c:1167:17: error: 'dst[2]' may be used uninitialized in this function [-Werror=maybe-uninitialized]\nkernel.c:1005:2: error: ‘resid’ may be used uninitialized in this function [-Werror=maybe-uninitialized]\nlibzfs_dataset.c:2826:8: error: ‘val’ may be used uninitialized in this function [-Werror=maybe-uninitialized]\nlibzfs_dataset.c:3056:35: error: ‘val’ may be used uninitialized in this function [-Werror=maybe-uninitialized]\nlibzfs_dataset.c:1584:13: error: ‘val’ may be used uninitialized in this function [-Werror=maybe-uninitialized]\nlibzfs_dataset.c:3056:35: error: ‘val’ may be used uninitialized in this function [-Werror=maybe-uninitialized]\nlibzfs_dataset.c:1792:66: error: ‘val’ may be used uninitialized in this function [-Werror=maybe-uninitialized]\nlibzfs_dataset.c:3986:35: error: ‘val’ may be used uninitialized in this function [-Werror=maybe-uninitialized]\n\n[GCC 6.1.1]\nResolved in PR #4907\n\nSigned-off-by: Gvozden Neskovic <neskovic@gmail.com>\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nCloses #4937","distinct":false,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/689f093ebcfa0d57895495050d2b470ed2bef52e"},{"sha":"cf41432c70c2df282f0f4ed7647154f3f4972d34","author":{"name":"Brian Behlendorf","email":"a858f2314cfaacf8f584edaf19860167d645669b@llnl.gov"},"message":"Linux 4.8 compat: Fix removal of bio->bi_rw member\n\nAll users of bio->bi_rw have been replaced with compatibility wrappers.\nThis allows the kernel specific logic to be abstracted away, and for\neach of the supported cases to be documented with the wrapper.  The\nupdated interfaces are as follows:\n\n* void blk_queue_set_write_cache(struct request_queue *, bool, bool)\n* boolean_t bio_is_flush(struct bio *)\n* boolean_t bio_is_fua(struct bio *)\n* boolean_t bio_is_discard(struct bio *)\n* boolean_t bio_is_secure_erase(struct bio *)\n* VDEV_WRITE_FLUSH_FUA\n\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nSigned-off-by: Chunwei Chen <david.chen@osnexus.com>\nCloses #4951","distinct":false,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/cf41432c70c2df282f0f4ed7647154f3f4972d34"},{"sha":"e5fe9ddeec55e3f7f8348330b3d414244f2d0670","author":{"name":"Brian Behlendorf","email":"a858f2314cfaacf8f584edaf19860167d645669b@llnl.gov"},"message":"Remove custom root pool import code\n\nNon-Linux OpenZFS implementations require additional support to be\nused a root pool.  This code should simply be removed to avoid\nconfusion and improve readability.\n\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nSigned-off-by: Chunwei Chen <david.chen@osnexus.com>\nCloses #4951","distinct":false,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/e5fe9ddeec55e3f7f8348330b3d414244f2d0670"},{"sha":"d5884c3453c5de5892eaae672c5186ed02846113","author":{"name":"GeLiXin","email":"601808230785d54f04a85b65df0dee5170a74edc@zte.com.cn"},"message":"Fix indefinite article\n\nThe indefinite article before nvlist should be \"an\", not \"a\".\n\nWe have 27 \"an nvlist\" and 7 \"a nvlist\" in our comment, they should\nstay the same as we are such a strict filesystem.\n\nSigned-off-by: GeLiXin <ge.lixin@zte.com.cn>\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nCloses #4941","distinct":false,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/d5884c3453c5de5892eaae672c5186ed02846113"},{"sha":"d9c97ec08b995f1a36657accc4bbc6057645a72c","author":{"name":"Chen Haiquan","email":"65d069836358cadeb1b1718f650f86a5af4181d9@yunify.com"},"message":"Use file_dentry and file_inode wrappers\n\nFix bugs due to kernel change in torvalds/linux@4bacc9c9234c (\"overlayfs:\nMake f_path always point to the overlay and f_inode to the underlay\").\n\nThis problem crashes system when use zfs as a layer of overlayfs.\n\nSigned-off-by: Chen Haiquan <oc@yunify.com>\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nCloses #4914\nCloses #4935","distinct":false,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/d9c97ec08b995f1a36657accc4bbc6057645a72c"},{"sha":"b320dd91a9262633200c9570442659989a677f0c","author":{"name":"Chunwei Chen","email":"0f79a3f764949a984b39ca36fe80e1c7836f91a4@osnexus.com"},"message":"Fix infinite loop when zdb -R with d flag\n\nAlso print decompress progress to stderr so it wouldn't pollute raw output\nwith r flag.\n\nSigned-off-by: Chunwei Chen <david.chen@osnexus.com>\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nCloses #4956","distinct":false,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/b320dd91a9262633200c9570442659989a677f0c"},{"sha":"169ab07cc8b7417c4a93b4496ef4a11e049b5cdc","author":{"name":"Matthew Ahrens","email":"c3217903275eb70d77b105cafabd67c5f3d5455c@delphix.com"},"message":"OpenZFS 7263 - deeply nested nvlist can overflow stack\n\nnvlist_pack() and nvlist_unpack are implemented recursively, which can\ncause the stack to overflow with a deeply nested nvlist; i.e. an nvlist\nwhich contains an nvlist, which contains an nvlist, which...\n\nUnprivileged users can pass an nvlist to the kernel via certain ioctls\non /dev/zfs, which the kernel will unpack without additional permission\nchecking or validation. Therefore, an unprivileged user can cause the\nkernel's stack to overflow and panic.\n\nIdeally, these functions would be implemented non-recursively. As a\nquick fix, this patch limits the depth of the recursion and returns an\nerror when attempting to pack and unpack a deeply-nested nvlist.\n\nSigned-off-by: Adam Leventhal <ahl@delphix.com>\nSigned-off-by: George Wilson <george.wilson@delphix.com>\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nPorted-by: Prakash Surya <prakash.surya@delphix.com>\n\nOpenZFS-issue: https://www.illumos.org/issues/7263\nOpenZFS-commit: https://github.com/openzfs/openzfs/commit/0511d6d\n\n-","distinct":false,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/169ab07cc8b7417c4a93b4496ef4a11e049b5cdc"},{"sha":"6eb73b00466b4d72c9e0f0df8e000ef68b757c99","author":{"name":"Brian Behlendorf","email":"a858f2314cfaacf8f584edaf19860167d645669b@llnl.gov"},"message":"Reorder HAVE_BIO_RW_* checks\n\nThe HAVE_BIO_RW_* #ifdef's must appear before REQ_* #ifdef's\nin the bio_is_flush() and bio_is_discard() macros.  Linux 2.6.32\nera kernels defined both of values and the HAVE_BIO_RW_* must be\nused in this case.  This resulted in a panic in zconfig test 5.\n\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nSigned-off-by: Chunwei Chen <david.chen@osnexus.com>\nCloses #4951\nCloses #4959","distinct":false,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/6eb73b00466b4d72c9e0f0df8e000ef68b757c99"},{"sha":"a9947ce77175234fa4e26afc663a75041b37f8f0","author":{"name":"Jason Zaman","email":"158e602a35675d2a0b685478824aa5995557a235@perfinion.com"},"message":"icp: add no_const for PaX Compat\n\nThe constify plugin will automatically constify a class of types that contain\nonly function pointers. The icp structs fail to build if this is enabled with\nthe following error. The no_const attribute makes the plugin skip those\nstructs.\n\nmodule/icp/spi/kcf_spi.c: In function ‘copy_ops_vector_v1’:\nmodule/icp/spi/kcf_spi.c:61:16: error: assignment of read-only location ‘*dst_ops->cou.cou_v1.co_control_ops’\n  *((dst)->ops) = *((src)->ops);\n                ^\nmodule/icp/spi/kcf_spi.c:74:2: note: in expansion of macro ‘KCF_SPI_COPY_OPS’\n  KCF_SPI_COPY_OPS(src_ops, dst_ops, co_control_ops);\n  ^\n\nSigned-off-by: Jason Zaman <jason@perfinion.com>\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nCloses #4947\nCloses #4962","distinct":false,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/a9947ce77175234fa4e26afc663a75041b37f8f0"},{"sha":"a3600a106deead9ef33466ab95a87cb64e7b995b","author":{"name":"Jason Zaman","email":"158e602a35675d2a0b685478824aa5995557a235@perfinion.com"},"message":"icp: mark asm files with noexec stack\n\nIf there is no explicit note in the .S files, the obj file will mark it\nas requiring an executable stack. This is unneeded and causes issues on\nhardened systems.\n\nMore info:\nhttps://wiki.gentoo.org/wiki/Hardened/GNU_stack_quickstart\n\nSigned-off-by: Jason Zaman <jason@perfinion.com>\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nCloses #4947\nCloses #4962","distinct":false,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/a3600a106deead9ef33466ab95a87cb64e7b995b"},{"sha":"834f1e426caf4e752d2411be6f1c6138f479c96d","author":{"name":"luozhengzheng","email":"3f658dbdd8bbba7146eb83de22417b8bc96630a6@zte.com.cn"},"message":"Fix a typo in ZIL write handling comment\n\nThe following comment in zil.h\n\n * WR_COPIED:\n *    If we know we'll immediately be committing the\n *    transaction (FSYNC or FDSYNC), then we allocate a larger\n *    log record here for the data and copy the data in.\n\nThe word \"the\" should be \"then\".\n\nSigned-off-by: luozhengzheng <luo.zhengzheng@zte.com.cn>\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nCloses #4961","distinct":false,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/834f1e426caf4e752d2411be6f1c6138f479c96d"},{"sha":"fb390aafc8338c62115e611dbe1917bbe7435eef","author":{"name":"Hans Rosenfeld","email":"28a5c590f8dda47f6ee0e823795071f8d0325809@nexenta.com"},"message":"OpenZFS 5997 - FRU field not set during pool creation and never updated\n\nAuthored by: Hans Rosenfeld <hans.rosenfeld@nexenta.com>\nReviewed by: Dan Fields <dan.fields@nexenta.com>\nReviewed by: Josef Sipek <josef.sipek@nexenta.com>\nReviewed by: Richard Elling <richard.elling@gmail.com>\nReviewed by: George Wilson <george.wilson@delphix.com>\nApproved by: Robert Mustacchi <rm@joyent.com>\nSigned-off-by: Don Brady <don.brady@intel.com>\nPorted-by: Brian Behlendorf <behlendorf1@llnl.gov>\n\nOpenZFS-issue: https://www.illumos.org/issues/5997\nOpenZFS-commit: https://github.com/openzfs/openzfs/commit/1437283\n\nPorting Notes:\n\nIn addition to the OpenZFS changes this patch realigns the events\nwith those found in OpenZFS.\n\nEvents which would be logged as sysevents on illumos have been\nbeen mapped to the 'sysevent' class for Linux.  In addition, several\nsubclass names have been changed to match what is used in OpenZFS.\nIn all cases this means a '.' was changed to an '_' in the subclass.\n\nThe scripts provided by ZoL have been updated, however users which\nprovide scripts for any of the following events will need to rename\nthem based on the new subclass names.\n\n  ereport.fs.zfs.config.sync         sysevent.fs.zfs.config_sync\n  ereport.fs.zfs.zpool.destroy       sysevent.fs.zfs.pool_destroy\n  ereport.fs.zfs.zpool.reguid        sysevent.fs.zfs.pool_reguid\n  ereport.fs.zfs.vdev.remove         sysevent.fs.zfs.vdev_remove\n  ereport.fs.zfs.vdev.clear          sysevent.fs.zfs.vdev_clear\n  ereport.fs.zfs.vdev.check          sysevent.fs.zfs.vdev_check\n  ereport.fs.zfs.vdev.spare          sysevent.fs.zfs.vdev_spare\n  ereport.fs.zfs.vdev.autoexpand     sysevent.fs.zfs.vdev_autoexpand\n  ereport.fs.zfs.resilver.start      sysevent.fs.zfs.resilver_start\n  ereport.fs.zfs.resilver.finish     sysevent.fs.zfs.resilver_finish\n  ereport.fs.zfs.scrub.start         sysevent.fs.zfs.scrub_start\n  ereport.fs.zfs.scrub.finish        sysevent.fs.zfs.scrub_finish\n  ereport.fs.zfs.bootfs.vdev.attach  sysevent.fs.zfs.bootfs_vdev_attach","distinct":false,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/fb390aafc8338c62115e611dbe1917bbe7435eef"},{"sha":"e35c5a8265e791d5856ef24e567cde5879844dc5","author":{"name":"GeLiXin","email":"601808230785d54f04a85b65df0dee5170a74edc@zte.com.cn"},"message":"Fix incorrect pool state after import\n\nImport a raidz pool which has a vdev with a bad label, zpool status\nshows the right state of the dev, but the wrong state of the pool.\nThe pool state should be DEGRADED, not ONLINE.\n\nWe examine the label in vdev_validate while in spa_load_impl, the bad\nlabel can be detected but doesn't propagate its state to the parent.\nThere are other chances to propagate state in the following vdev_load\nif we failed to load DTL, but our pool is raidz1 which can tolerate a\nfaulted disk.  So we lost the last chance to correct the pool state.\n\nPropagate the leaf vdev's state to parent if its label was corrupted,\nas is done elsewhere in vdev_validate.\n\nSigned-off-by: GeLiXin <ge.lixin@zte.com.cn>\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nSigned-off-by: Don Brady <don.brady@intel.com>\nCloses #4948","distinct":false,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/e35c5a8265e791d5856ef24e567cde5879844dc5"},{"sha":"6d836e6f8b358270d55a57ad8e8868c957f15bf3","author":{"name":"Rich Ercolani","email":"0e1c1559cdf526b7e9cc0ee1452153df663a90f2@gmail.com"},"message":"Add tunable to ignore hole_birth\n\nAdds a module option which disables the hole_birth optimization\nwhich has been responsible for several recent bugs, including\nissue #4050.\n\nOriginal-patch: https://gist.github.com/pcd1193182/2c0cd47211f3aee623958b4698836c48\nSigned-off-by: Rich Ercolani <rincebrain@gmail.com>\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nCloses #4833","distinct":true,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/6d836e6f8b358270d55a57ad8e8868c957f15bf3"},{"sha":"32ffaa3de58981814342fe6d3556c03d41d121f8","author":{"name":"Gvozden Neskovic","email":"89b6946db64cd5770ca50b2bd89195148bde383d@gmail.com"},"message":"Add support for AVX-512 family of instruction sets\n\nThis patch adds compiler and runtime tests (user and kernel) for following\ninstruction sets: avx512f, avx512cd, avx512er, avx512pf, avx512bw, avx512dq,\navx512vl, avx512ifma, avx512vbmi.\n\nnote: Linux support for AVX-512F (Foundation) instruction set started with\nlinux v3.15\n\nSigned-off-by: Gvozden Neskovic <neskovic@gmail.com>\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nIssue #4952","distinct":true,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/32ffaa3de58981814342fe6d3556c03d41d121f8"},{"sha":"70b258fc962fd40673b9a47574cb83d8438e7d94","author":{"name":"Gvozden Neskovic","email":"89b6946db64cd5770ca50b2bd89195148bde383d@gmail.com"},"message":"Fletcher4 implementation using avx512f instruction set\n\nAlgorithm runs 8 parallel sums, consuming 8x uint32_t elements per\nloop iteration. Size alignment of main fletcher4 methods is adjusted\naccordingly. New implementation is called 'avx512f'.\n\nNote: byteswap method can be implemented more efficiently when avx512bw hardware\nbecomes available. Currently, it is ~ 2x slower than native method.\n\nTable shows result of full (native) fletcher4 calculation for different buffer size:\n\nfletcher4   4KB     16KB    64KB    128KB   256KB   1MB     16MB\n--------------------------------------------------------------------\n[scalar]    1213    1228    1231    1231    1225    1200    1160\n[sse2]      2374    2442    2459    2456    2462    2250    2220\n[avx2]      4288    4753    4871    4893    4900    4050    3882\n[avx512f]   5975    8445    9196    9221    9262    6307    5620\n\nSigned-off-by: Gvozden Neskovic <neskovic@gmail.com>\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nIssue #4952","distinct":true,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/70b258fc962fd40673b9a47574cb83d8438e7d94"},{"sha":"fc897b24b2efafccb5c9e915b81dc5f797673e72","author":{"name":"Gvozden Neskovic","email":"89b6946db64cd5770ca50b2bd89195148bde383d@gmail.com"},"message":"Rework of fletcher_4 module\n\n- Benchmark memory block is increased to 128kiB to reflect real block sizes more\naccurately. Measurements include all three stages needed for checksum generation,\ni.e. `init()/compute()/fini()`. The inner loop is repeated multiple times to offset\noverhead of time function.\n\n- Fastest implementation selects native and byteswap methods independently in\nbenchmark. To support this new function pointers `init_byteswap()/fini_byteswap()`\nare introduced.\n\n- Implementation mutex lock is replaced by atomic variable.\n\n- To save time, benchmark is not executed in userspace. Instead, highest supported\nimplementation is used for fastest. Default userspace selector is still 'cycle'.\n\n- `fletcher_4_native/byteswap()` methods use incremental methods to finish\ncalculation if data size is not multiple of vector stride (currently 64B).\n\n- Added `fletcher_4_native_varsize()` special purpose method for use when buffer size\nis not known in advance. The method does not enforce 4B alignment on buffer size, and\nwill ignore last (size % 4) bytes of the data buffer.\n\n- Benchmark `kstat` is changed to match the one of vdev_raidz. It now shows\nthroughput for all supported implementations (in B/s), native and byteswap,\nas well as the code [fastest] is running.\n\nExample of `fletcher_4_bench` running on `Intel(R) Xeon(R) CPU E5-2660 v3 @ 2.60GHz`:\nimplementation   native         byteswap\nscalar           4768120823     3426105750\nsse2             7947841777     4318964249\nssse3            7951922722     6112191941\navx2             13269714358    11043200912\nfastest          avx2           avx2\n\nExample of `fletcher_4_bench` running on `Intel(R) Xeon Phi(TM) CPU 7210 @ 1.30GHz`:\nimplementation   native         byteswap\nscalar           1291115967     1031555336\nsse2             2539571138     1280970926\nssse3            2537778746     1080016762\navx2             4950749767     1078493449\navx512f          9581379998     4010029046\nfastest          avx512f        avx512f\n\nSigned-off-by: Gvozden Neskovic <neskovic@gmail.com>\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nCloses #4952","distinct":true,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/fc897b24b2efafccb5c9e915b81dc5f797673e72"},{"sha":"f0c26069bdf4ec675c840f0932fcfe7d4036d06f","author":{"name":"Gvozden Neskovic","email":"89b6946db64cd5770ca50b2bd89195148bde383d@gmail.com"},"message":"zdb: fencepost error at zdb_cb.zcb_embedded_histogram[][]\n\nErroneous access detected by gcc UndefinedBehaviorSanitizer:\n`zdb.c:2424:7: runtime error: index 112 out of bounds for type 'uint64_t [112]'`\n\nFix: increase histogram size by 1 to accommodate all possible sizes.\n\nSigned-off-by: Gvozden Neskovic <neskovic@gmail.com>\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nCloses #4934\nIssue #4883","distinct":true,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/f0c26069bdf4ec675c840f0932fcfe7d4036d06f"},{"sha":"d9eea113f8b8988a8ec4f9c73b717c7311322348","author":{"name":"Matthew Ahrens","email":"c3217903275eb70d77b105cafabd67c5f3d5455c@delphix.com"},"message":"It is not necessary to zero struct dbuf_hold_impl_data\n\nUnder a workload which makes heavy use of `dbuf_hold()`, I noticed that a\nconsiderable amount of time was spent in `dbuf_hold_impl()`, due to its call to\n`kmem_zalloc(sizeof (struct dbuf_hold_impl_data) * DBUF_HOLD_IMPL_MAX_DEPTH)`,\nwhich is around 2KiB.  This structure is used as a stack, to limit the size of\nthe C stack as dbuf_hold() calls itself recursively.  We make a recursive call\nto hold the parent's dbuf when the requested dbuf is not found.  The vast\nmajority of the time, the parent or grandparent indirect dbuf is cached, so the\nnumber of recursive calls is very low.  However, we initialize this entire\narray for every call to dbuf_hold().\n\nTo improve performance, this commit changes `dbuf_hold()` to use `kmem_alloc()`\ninstead of `kmem_zalloc()`.  __dbuf_hold_impl_init is changed to initialize all\nmembers of the struct before they are used.  I observed ~5% performance\nimprovement on a workload which creates many files.\n\nSigned-off-by: Matthew Ahrens <mahrens@delphix.com>\nSigned-off-by: Brian Behlendorf <behlendorf1@llnl.gov>\nCloses #4974","distinct":true,"url":"https://api.github.com/repos/GeLiXin/zfs/commits/d9eea113f8b8988a8ec4f9c73b717c7311322348"}]}
{"actor":{"display_login":"GeLiXin"}}