aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Add build systemBrian Behlendorf2010-08-31108-0/+5853
| | | | | | Add autoconf style build infrastructure to the ZFS tree. This includes autogen.sh, configure.ac, m4 macros, some scripts/*, and makefiles for all the core ZFS components.
* Fix stack ztestBrian Behlendorf2010-08-311-87/+205
| | | | | | | | | | | | While ztest does run in user space we run it with the same stack restrictions it would have in kernel space. This ensures that any stack related issues which would be hit in the kernel can be caught and debugged in user space instead. This patch is a first pass to limit the stack usage of every ztest function to 1024 bytes. Subsequent updates can further reduce this. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix stack traverse_visitbp()Brian Behlendorf2010-08-311-98/+177
| | | | | | | | | | | | | Due to limited stack space recursive functions are frowned upon in the Linux kernel. However, they often are the most elegant solution to a problem. The following code preserves the recursive function traverse_visitbp() but moves the local variables AND function arguments to the heap to minimize the stack frame size. Enough space is initially allocated on the stack for 20 levels of recursion. This change does ugly-up-the-code but it reduces the worst case usage from roughly 4160 bytes to 960 bytes on x86_64 archs. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix stack zio_execute()Ned Bass2010-08-311-4/+22
| | | | | | | | | | Implement zio_execute() as a wrapper around the static function __zio_execute() so that we can force __zio_execute() to be inlined. This reduces stack overhead which is important because __zio_execute() is called recursively in several zio code paths. zio_execute() itself cannot be inlined because it is externally visible. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix stack zio_done()Brian Behlendorf2010-08-311-33/+30
| | | | | | | | | Eliminated local variables pointing to members of the zio struct. Just refer to the struct members directly. This saved about 32 bytes per call, but this function can be called recurisvely up to 19 levels deep, so we potentially save up to 608 bytes. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix stack vn_open()Brian Behlendorf2010-08-311-6/+17
| | | | | | | | We should not put a 4k maxpathlen buffer on the stack, instead locate it to the heap. Even in user space we run ztest with 8K stacks to verify correctness Signed-off-by: Brian Behlendorf <[email protected]>
* Fix stack vdev_cache_read()Brian Behlendorf2010-08-311-3/+5
| | | | | | | Moving the vdev_cache_entry_t struct ve_search from the stack to the heap saves ~100 bytes. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix stack traverse_impl()Brian Behlendorf2010-08-311-28/+36
| | | | | | Stack use reduced from 560 bytes to 128 bytes. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix stack noinlineBrian Behlendorf2010-08-313-7/+21
| | | | | | | | | Certain function must never be automatically inlined by gcc because they are stack heavy or called recursively. This patch flags all such functions I've found as 'noinline' to prevent gcc from making the optimization. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix stack lzjbBrian Behlendorf2010-08-311-3/+8
| | | | | | | | | Reduce kernel stack usage by lzjb_compress() by moving uint16 array off the stack and on to the heap. The exact performance implications of this I have not measured but we absolutely need to keep stack usage to a minimum. If/when this becomes and issue we optimize. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix stack inlineBrian Behlendorf2010-08-313-4/+7
| | | | | | | | Decrease stack usage for various call paths by forcing certain functions to be inlined. By inlining the functions the overhead of a new stack frame is removed at the cost of increased code size. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix stack dsl_scan_visitbp()Brian Behlendorf2010-08-311-9/+14
| | | | | | | To reduce stack overhead this topic branch moves the 128 byte blkptr_t data strucutre in dsl_scan_visitbp() to the heap. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix stack dsl_dir_open_spa()Brian Behlendorf2010-08-311-5/+8
| | | | | | | Reduce stack usage by 256 bytes by moving buf char array from the stack to the heap. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix stack dsl_deleg_get()Brian Behlendorf2010-08-311-17/+26
| | | | | | | | | | | | | | | | | Reduce stack usage in dsl_deleg_get, gcc flagged it as consuming a whopping 1040 bytes or potentially 1/4 of a 4K stack. This patch moves all the large structures and buffer off the stack and on to the heap. This includes 2 zap_cursor_t structs each 52 bytes in size, 2 zap_attribute_t structs each 280 bytes in size, and 1 256 byte char array. The total saves on the stack is 880 bytes after you account for the 5 new pointers added. Also the source buffer length has been increased from MAXNAMELEN to MAXNAMELEN+strlen(MOS_DIR_NAME)+1 as described by the comment in dsl_dir_name(). A buffer overrun may have been possible with the slightly smaller buffer. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix stack dsl_dataset_destroy()Brian Behlendorf2010-08-311-9/+13
| | | | | | | | Move dsl_dataset_t local variable from the stack to the heap. This reduces the stack usage of this function from 2048 bytes to 176 bytes for x84_64 arches. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix stack dmu_objset_snapshot()Brian Behlendorf2010-08-311-23/+27
| | | | | | | Reduce stack usage by 276 bytes by moving the snaparg struct from the stack to the heap. We have limited stack space we must not waste. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix stack dbuf_hold_impl()Brian Behlendorf2010-08-311-64/+140
| | | | | | | | | | | This commit preserves the recursive function dbuf_hold_impl() but moves the local variables and function arguments to the heap to minimize the stack frame size. Enough space is initially allocated on the stack for 20 levels of recursion. This technique was based on commit 34229a2f2ac07363f64ddd63e014964fff2f0671 which reduced stack usage of traverse_visitbp(). Signed-off-by: Brian Behlendorf <[email protected]>
* Fix dnode_move() scopeBrian Behlendorf2010-08-311-1/+3
| | | | | | The dnode_move() functionality is only used in the kernel build. As such we should be careful to wrap all of the related code with '#ifdef _KERNEL' to avoid gcc warnings about unused code.
* Fix Solaris thread dependency by using pthreadsBrian Behlendorf2010-08-315-251/+480
| | | | | | | | | | | This is a portability change which removes the dependence of the Solaris thread library. All locations where Solaris thread API was used before have been replaced with equivilant Solaris kernel style thread calls. In user space the kernel style threading API is implemented in term of the portable pthreads library. This includes all threads, mutexs, condition variables, reader/writer locks, and taskqs. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix zfs_ioc_objset_statsBrian Behlendorf2010-08-311-2/+3
| | | | | | | | | | | | Interestingly this looks like an upstream bug as well. If for some reason we are unable to get a zvols statistics, because perhaps the zpool is hopelessly corrupt, we would trigger the VERIFY. This commit adds the proper error handling just to propagate the error back to user space. Now the user space tools still must handle this properly but in the worst case the tool will crash or perhaps have some missing output. That's far far better than crashing the host. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix zio_taskq_dispatch to use TQ_NOSLEEPBrian Behlendorf2010-08-311-3/+4
| | | | | | | | | | The zio_taskq_dispatch() function may be called at interrupt time and it is critical that we never sleep. Additionally, wrap taskq_dispatch() in a while loop because it may fail. This is non optimal but is OK for now. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix strncat usageBrian Behlendorf2010-08-311-1/+1
| | | | | | | | This look like a typo. The intention was to use strlcat() however strncat() was used instead accidentally this may lead to a buffer overflow. This was caught by gcc -D_FORTIFY_SOURCE=2. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix rw_init() usageBrian Behlendorf2010-08-313-4/+4
| | | | | | Properly initialize rwlock primitives. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix zmod.h usage in userspaceBrian Behlendorf2010-08-312-33/+20
| | | | | | | | | | | Do not use zmod.h in userspace. This has also been filed with the ZFS team. It makes the userspace libzpool code use the zlib API, instead of the Solaris-only and non-standard zmod.h. The zlib API is almost identical and is a de facto standard, so this is a no-brainer. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix missing newlinesBrian Behlendorf2010-08-311-2/+2
| | | | | | Add missing \n's to dprintf()s Signed-off-by: Brian Behlendorf <[email protected]>
* Fix metaslabBrian Behlendorf2010-08-311-0/+20
| | | | | | | | | | | If your only going to allow one allocator to be used and it is defined at compile time there is no point including the others in the build. This patch could/should be refined for Linux to make the metaslab configurable at run time. That might be a bit tricky however since you would need to quiese all IO. Short of that making it configurable as a module load option would be a reasonable compromise. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix list handling to only use the APIBrian Behlendorf2010-08-314-0/+8
| | | | | | | | | | | | | Remove all instances of list handling where the API is not used and instead list data members are directly accessed. Doing this sort of thing is bad for portability. Additionally, ensure that list_link_init() is called on newly created list nodes. This ensures the node is properly initialized and does not rely on the assumption that zero'ing the list_node_t via kmem_zalloc() is the same as proper initialization. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix kstat xuioBrian Behlendorf2010-08-313-26/+26
| | | | | | | | Move xiou stat structures from a header to the dmu.c source as is done with all the other kstat interfaces. This information is local to dmu.c registered the xuio kstat and should stay that way. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix dbuf eviction assertionBrian Behlendorf2010-08-311-1/+5
| | | | | | | Replace non-fatal assertion with warning. This was being observed during testing and it should not be fatal. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix vn_open/vn_rdwr error handlingRicardo M. Correia2010-08-311-9/+17
| | | | | | | | | | 1) In vn_open(), if fstat64() returned an error, the real errno was being obscured by calling close(). 2) Add error handling for both pwrite64() calls in vn_rdwr(). Signed-off-by: Ricardo M. Correia <[email protected]> Signed-off-by: Brian Behlendorf <[email protected]>
* Fix deadcodeBrian Behlendorf2010-08-312-70/+0
| | | | | | | | Remove deadcode. It's possible the code should be in use somewhere, but as the source code is laid out it currently is not. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix dbuf_dirty_record_t leaksBrian Behlendorf2010-08-312-0/+6
| | | | | | Fix two leaks with dbuf_dirty_record_t Signed-off-by: Brian Behlendorf <[email protected]>
* Fix variables named currentBrian Behlendorf2010-08-311-14/+14
| | | | | | | | In the linux kernel 'current' is defined to mean the current process and can never be used as a local variable in a function. Simply replace all usage of 'current' with 'curr' in this function. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix commit callbacksRicardo M. Correia2010-08-312-18/+35
| | | | | | | | | | | | | | | | | | | | | | The upstream commit cb code had a few bugs: 1) The arguments of the list_move_tail() call in txg_dispatch_callbacks() were reversed by mistake. This caused the commit callbacks to not be called at all. 2) ztest had a bug in ztest_dmu_commit_callbacks() where "error" was not initialized correctly. This seems to have caused the test to always take the simulated error code path, which made ztest unable to detect whether commit cbs were being called for transactions that successfuly complete. 3) ztest had another bug in ztest_dmu_commit_callbacks() where the commit cb threshold was not being compared correctly. 4) The commit cb taskq was using 'max_ncpus * 2' as the maxalloc argument of taskq_create(), which could have caused unnecessary delays in the txg sync thread. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix minor acl issueBrian Behlendorf2010-08-311-1/+1
| | | | | | Minor fixes for newly introduced acl support. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix gcc uninitialized variable warningsBrian Behlendorf2010-08-3124-41/+49
| | | | | | Gcc -Wall warn: 'uninitialized variable' Signed-off-by: Brian Behlendorf <[email protected]>
* Fix gcc unused variable warningsBrian Behlendorf2010-08-3114-38/+38
| | | | | | Gcc -Wall warn: 'unused variable' Signed-off-by: Brian Behlendorf <[email protected]>
* Fix gcc missing parenthesis warningsBrian Behlendorf2010-08-3130-85/+87
| | | | | | Gcc -Wall warn: 'missing parenthesis' Signed-off-by: Brian Behlendorf <[email protected]>
* Fix gcc missing case warningsBrian Behlendorf2010-08-2712-1/+51
| | | | | | Gcc ASSERT() missing cases are impossible Signed-off-by: Brian Behlendorf <[email protected]>
* Fix gcc missing braces warningsBrian Behlendorf2010-08-2711-72/+80
| | | | | | Resolve compiler warnings concerning missing braces. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix gcc invalid prototype warningsBrian Behlendorf2010-08-2711-57/+57
| | | | | | Gcc -Wall warn: 'invalid prototype' Signed-off-by: Brian Behlendorf <[email protected]>
* Fix gcc init pragma warningsBrian Behlendorf2010-08-272-1/+11
| | | | | | | | | Use constructor attribute on non-Solaris platforms. The #pragma init/fini ->__attribute__((constructor/destructor)) conversions, these should go upstream. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix gcc ident pragma warningsRicardo M. Correia2010-08-2726-28/+30
| | | | | | Remove all ident pragmas which are unknown to gcc. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix gcc fortify source warningsBrian Behlendorf2010-08-273-6/+7
| | | | | | | | | | | | | | Resolve issues uncovered by -D_FORTIFY_SOURCE=2, the default redhat macro's file adds this option to the cflags. This causes warnings of the following type designed to keep the developer honest: warning: ignoring return value of 'foo', declared with attribute warn_unused_result The short term fix is to wrap these calls in VERIFY() to check the return code. The code was already assusing these would never fail. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix gcc useless debug warningsBrian Behlendorf2010-08-271-1/+0
| | | | | | Gcc useless debugging. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix gcc cast warningsBrian Behlendorf2010-08-2716-77/+90
| | | | | | | Gcc -Wall warn: 'lacks a cast' Gcc -Wall warn: 'comparison between pointer and integer' Signed-off-by: Brian Behlendorf <[email protected]>
* Fix gcc c90 compliance warningsBrian Behlendorf2010-08-2731-262/+475
| | | | | | | | Fix non-c90 compliant code, for the most part these changes simply deal with where a particular variable is declared. Under c90 it must alway be done at the very start of a block. Signed-off-by: Brian Behlendorf <[email protected]>
* Fix gcc 64-bit constant warningsRicardo M. Correia2010-08-263-16/+16
| | | | | | Add 'ull' suffix to 64-bit constants. Signed-off-by: Brian Behlendorf <[email protected]>
* Update to onnv_147Brian Behlendorf2010-08-26101-2423/+7810
| | | | | This is the last official OpenSolaris tag before the public development tree was closed.
* Remove GIT notesBrian Behlendorf2010-08-261-197/+0
| | | | | | | These notes describe how to use TopGit with this repo. As of this point TopGit is no longer used so the notes have been removed. Signed-off-by: Brian Behlendorf <[email protected]>