]> granicus.if.org Git - zfs/blob - ChangeLog
Remove kmem_set_warning() interface replace with __GFP_NOWARN flag.
[zfs] / ChangeLog
1 2010-05-17 Brian Behlendorf <behlendorf1@llnl.gov>
2
3         * : Tag spl-0.4.9
4
5         * : Build system improvements:
6         - Added support for the 'make -s' silent build option.
7         - Allow spl_config.h to be included by dependant packages.
8
9         * AUTHORS, COPYING, DISCLAIMER, and INSTALL: Updated.
10
11         * *.c, *.h, *.sh, AUTHORS, COPYING, DISCLAIMER, and INSTALL:
12         Added standard header to source files which includes the copyright,
13         license, and author information.  Additionally, updated the listed
14         top level files to the latest versions.
15
16         * include/sys/processor.h, include/sys/systm.h, include/sys/types.h:
17         Added 3 missing typedefs processorid_t, pc_t, and index_t.
18
19         * include/sys/console.h: Added support for console_* functions().
20
21         * module/spl/spl-time.c: Updated gethrtime() to use the function
22         do_posix_clock_monotonic_gettime() as described in the comment.
23
24         * module/spl/spl-condvar.c: Added cv_wait_interruptible() function
25         as an extension to the existing condition variable ABI to enable
26         sleeping threads a way to cleanly handle signals in the kernel.
27
28         * module/spl/spl-debug.c: Dump log from current process as required.
29
30         * module/spl/spl-taskq.c: Assume TQ_SLEEP in taskq_dispatch() if
31         the caller does not specify, this is the Solaris default.
32
33         * module/spl/spl-vnode.c: Extend the vn_rdwr() implementation to
34         correctly handle the FAPPEND option.
35
36         * module/spl/spl-generic.c, module/spl/spl-vnode.c: Update
37         vn_set_pwd() to allow a kernal address as filename.  This turns
38         out to be critical because spl_setup()->The vn_set_pwd("/") which
39         is called at module load time was failing with -EFAULT.
40
41         * include/sys/rwlock.h: Disable rw_tryupgrade() for kernels built
42         without CONFIG_RWSEM_GENERIC_SPINLOCK defined.  The existing
43         implementation is not safe in this case and needs to be replaced
44         with a correct native per-arch implementation.
45
46         * module/spl/spl-kmem.c: Reduce maximum kmem based slab size.
47         Allowing MAX_ORDER-1 sized memory allocations while the system
48         is low on memory has been observed to result in deadlocks.  Callers
49         should not be using the slab in this way but we should still handle
50         the case more cleanly.
51
52 2010-03-11 Brian Behlendorf <behlendorf1@llnl.gov>
53
54         * : Tag spl-0.4.8
55
56         * : Build system improvements:
57         - Remove Module.markers and Module.symver{s} in clean target.
58         - Improved kernel source detection when none specified.
59         - Fix RPM definitions for the unknown distro/installation.
60
61         * config/spl-build.m4: Linux 2.6.32 compat, SPL_AC_5ARGS_PROC_HANDLER
62           macro added to handle updated proc_handler () API.
63
64         * module/spl/spl-err.c: Fix panic() string, which was being used as a
65           format string, instead of an already-formatted string.
66
67         * /module/spl/spl-taskq.c: Optimize lowest outstanding taskqid
68           calculation in taskq_lowest_id().  The motivation for this change
69           was that I was observing as much as 10% of the total CPU time go
70           to waiting on the tq->tq_lock when the pending list was long.
71
72         * module/spl/spl-kmem.c: Strip __GFP_ZERO from kmalloc it is not
73           available for older kernels.
74
75         * module/spl/spl-proc.c: Add skc_flags and full header to
76           /proc/spl/kmem/slab 
77         
78         * module/spl/spl-generic.c: Correctly handle division on 32-bit RHEL5
79           systems by returning dividend.
80
81         * include/sys/rwlock.h: When using x86 specific rwsem correctly
82           intepret rwsem->count.  Additionally check for changed guard macro
83           in 2.6.28+ for rwsem implementation
84
85         * module/splat/splat-vnode.c, module/splat/splat-kmem.c,
86           module/splat/splat-taskq.c: Several new tests were added to the
87           test suite and various bug fixes.
88
89         * include/asm/atomic_compat.h: Atomic64 compatibility for 32-bit
90           systems without kernel support.
91
92         * .gitignore: Added .gitignore files.
93
94 2009-11-20 Brian Behlendorf <behlendorf1@llnl.gov>
95
96         * : Tag spl-0.4.7
97
98         * config/spl-build.m4: Linux 2.6.31 compat, SPL_AC_2ARGS_SET_FS_PWD
99         macro updated to explicitly include linux/fs_struct.h which was
100         dropped from linux/sched.h.
101
102         * include/linux/mm_compat.h: Linux 2.6.31 compat, use the macros
103         min_wmark_pages, low_wmark_pages, and high_wmark_pages which were
104         introduced.  For older kernels a compability macro is used.
105
106         * include/sys/kmem.h: Linux 2.6.31 compat, the __GFP_NOFAIL flag
107         should no longer be used and it may disappear from the kernel at any
108         time.  To handle this I have simply added *_nofail wrappers in the
109         kmem implementation which perform the retry for non-atomic allocations.
110
111         * module/spl/spl-kmem.c: Linux 2.6.31 compat, kmem cache alignment
112         fixes and cleanup.  Always perform allocations for the kmem cache
113         using __get_free_pages() or __vmalloc() to ensure the returned
114         memory is page aligned.  Also introduce helper functions which use
115         P2ROUNDUP_TYPE instead of P2ROUNDUP force all types to be explicit.
116
117         * include/sys/mutex.h: Add mutex_enter_nested() as wrapper for
118         mutex_lock_nested() to permit integration with the lock checker.
119
120         * include/sys/mutex.h: Always use the generic mutex_destroy().
121
122         * Makefile.am: Ensure *.order and *.markers build products are
123         removed by distclean rule.
124
125 2009-11-02 Brian Behlendorf <behlendorf1@llnl.gov>
126
127         * : Tag spl-0.4.6
128
129         * config/spl-build.m4: Cleanup --enable-debug-* configure options.
130         --enable-debug=<default no>  generic debug support.
131         --enable-debug-kmem=<default yes> basic kmem and slab accounting.
132         --enable-debug-kmem-tracking=<default no> detailed kmem tracking.
133         --enable-debug-kstat removed option support always enabled.
134         --enable-debug-callb removed option which never did anything.
135
136         * module/spl/spl-atomic.c: Reimplemented atomic functions by
137         layering them on top of the Linux atomic functions.  This improves
138         performance by removing the need for a global spinlock.
139
140         * module/spl/spl-debug.c: Rebase cmn_err on vcmn_err.  Handle the
141         case where the message contains a leading ! which means only send
142         it to syslog.  And suppress warnings for messages which do not end
143         in a '\n'.
144
145         * module/splat/splat-ctl.c: Update to use kobject_set_name() for
146         increased portability.
147
148         * module/spl/spl-generic.c: Set cwd to '/' for the task during
149         module load for SPL dependent modules.  Under Solaris this is
150         the expected behavior, on a Linux system your cwd remains set
151         to whatever the tasks cwd was when loading a module.
152
153         * module/spl/spl-mutex.c: Reimplemented mutexs for improved
154         performance and cleaner integration with the Linux kernels built
155         in lock analyzer.  As of 2.6.29 based kernels adaptive mutexs
156         are supported, for these newer kernels task_curr() does not need
157         to be exported.  Finally, DEBUG_MUTEX support was dropped in
158         favor of more detailed kernel profiling which is now available.
159
160         * module/spl/spl-rwlock.c: Reimplemented rwlocks for improved
161         performance and cleaner integration with the Linux kernels built
162         in lock analyzer.  Additionally, the rwlock regression tests were
163         improved to help validate correctness.
164
165         * spl-modules.spec.in: Various spec file tweaks for the supported
166         distros: RHEL5, RHEL6, SLES10, SLES11, Chaos4, Fedora 11.
167
168 2009-08-04 Brian Behlendorf <behlendorf1@llnl.gov>
169
170         * : Tag spl-0.4.5
171
172         * FC11 and SLES11 support: This includes all compatibility changes
173         to support 2.6.29 based kernels and the required build system
174         improvements.
175         * module/spl/spl-module.c: Register a basic compat ioctl handler
176         for 32-bit user vs 64-bit kernel compatibility.  This is the default
177         build environment for all 64-bit SLES systems.
178         * config/spl-build.m4: Check arch/default path when detecting kernel
179         objects under SLES.  We still preferentially use arch/arch if
180         available but if that fails it is acceptable to use default.
181         * module/spl/spl-vnode.: Use HAVE_PATH_IN_NAMEIDATA compat macros
182         for maximum kernel compatibility.
183         * config/spl-build.m4: Remove LINUXINCLUDE from autoconf wrapper.
184         This breaks the 2.6.28+ kernels build system, all kernel build systems
185         at least post 2.6.16 will set this properly so we should not.
186         * include/sys/vmsystm.h, module/spl/spl-kmem.c: Perferentially use the
187         global_page_state() API when your kernel supports the required enums.
188         * include/sys/debug.h: Add ASSERTV macro to simplify removing
189         variables (the V in ASSERTV) which are only used in ASSERT().
190         * include/sys/debug.h: Disable stack overflow checking by default
191         when build with --enable-debug, modern kernels now provide this.
192         * patches/fc11-spl-export-symbols.patch: Recommended missing symbols
193         patch for FC11.  This is not required for correct functionality but
194         it is recommended for individuals who are already patching the kernel.
195
196         * Additional Solaris API emulation:
197         * include/sys/taskq.h: Add basic taskq support for the flag
198         TASKQ_THREADS_CPU_PCT which is used to scale the number of threads
199         based on the number of online CPUs.
200         * include/sys/file.hi, module/spl/spl-generic.c: Add support for
201         fake ioctls which originate from the kernel instead of user space.
202         * include/sys/acl.h: Add ACE_ALL_PERMS ACL definition.
203         * include/sys/cred.h, module/splat/splat-cred.c: Add basic credential
204         support and splat regression tests.
205
206         * Bug fixes:
207         * include/sys/isa_defs.h: Add more endianess paranoia.
208         * module/spl/spl-time.c: Integer overflow after ~164 days.
209         * include/sys/debug.h: NULL dereference by tcd_for_each().
210         * module/splat/splat-kmem.c: Allow kmem or vmem based slabs for
211         slab_lock and slab_overcommit tests.  This may still be an issue on
212         32-bit systems due to the small virtual address space.
213         * module/spl/spl-module.c: Positive Solaris ioctl return codes are
214         need to be negated for use by libc to ensure errno is set correctly.
215
216 2009-07-02 Brian Behlendorf <behlendorf1@llnl.gov>
217
218         * : Tag spl-0.4.4
219
220         * : Generic distro friendly build system / packaging improvements
221         for rpm based distros including CHAOS, RHEL, Fedora, and SLES.
222
223         spl-<version>.src.rpm
224         - Fully rebuildable source rpm for utils.
225         spl-modules-<version>.src.rpm
226         - Fully rebuildable source rpm for kernel modules.
227
228         spl-<version>.<arch>.rpm
229         - Binary rpm for utils.  The utils in this package are compatible
230         with all spl-module rpms of the same version.
231         
232         spl-modules-<verion>-<kernel>.arch.rpm
233         - Binary rpm containing the kernel modules for a specific kernel build.
234           The package name contains the kernel version and you should have one
235           of these packages installed to match every kernel on your system.
236         spl-modules-devel-<verion>-<kernel>.arch.rpm
237         - Binary rpm containing development header and module symbols needed
238           for building additional kernel modules which are dependent on the
239           spl module.
240
241         * : Added SLES10 support.  This includes all compatibility
242         changes to support 2.6.16 based kernels and the required
243         build system improvements.
244
245         * : Build System changes for SLES10:
246         - Exclude -obj when detecting installed kernel source.
247         - Detect -obj directory for out of tree kernel builds.
248         - Allow kernel build system to set CC to ensure -m64 is set properly.
249           This is an issue on 64-bit SLES systems which by default always
250           build 32-bit binaries (unlike RHEL/Fedora which default to 64-bit)
251
252         * : Configure Checks added for SLES10:
253         - div64_64() renamed to div64_u64() as of 2.6.26.
254         - global_page_state() fuction was introduced in 2.6.18 kernels.
255           The earlier 2.6.16 based SLES10 must not try and use it,
256           thankfully get_zone_counts() is still available.
257         - monotonic_clock() is unavailable __gethrtime() must perform the
258           HZ division as an 'unsigned long long' because the SPL only
259           implements __udivdi3(), and not __divdi3() for 'long long'
260           division on 32-bit arches.
261         - mutex_lock_nested() was introduced as part of the mutex
262           validator in 2.6.18, when it is unavailable it is safe to
263           fallback to using a plain mutex_lock().
264         - SLES specific API change to vfs_unlink() and vfs_rename() which
265           added a 'struct vfsmount *' argument.  This was for something
266           called the linux-security-module, but it appears that it was
267           never adopted upstream.
268         - spl_device_create() correctly mapped to class_device_create()
269           for 2.6.13 to 2.6.17 based kernels, this is the preferred API.
270         - Prior to 2.6.17 there were no *_pgdat helper functions in 
271           mm/mmzone.c.  Instead for_each_zone() operated directly on
272           pgdat_list which may or may not have been exported depending on
273           how your kernel was compiled.  A configure check was added to
274           determine if you have the helpers or not, and if the needed
275           symbols are exported.  If they are not exported then they are
276           dynamically aquired at runtime by kallsyms_lookup_name().
277
278         * : Packaging changes for SLES10
279         - Properly honor --prefix in build system and rpm spec file.
280         - Add '--define require_kdir' to spec file to support building
281           rpms against kernel sources installed in non-default locations.
282         - Add '--define require_kobj' to spec file to support building
283           rpms against kernel object installed in non-default locations.
284         - Stop suppressing errors in autogen.sh script.
285         - Improved logic to detect missing kernel objects when they are
286           not located with the source.  This is the common case for SLES
287           as well as in-tree chaos kernel builds and is done to simply
288           support for multiple arches.
289         - Moved spl-devel build products to /usr/src/spl-<version>, a
290           spl symlink is created to reference the last installed version.
291         - Allow checking for exported symbols in both Module.symvers
292           and Module.symvers.  My stock SLES kernel ships an objects
293           directory with Module.symvers, yet produces a Module.symvers
294           in the local build directory.
295
296         * : Added powerpc64 support.
297         - Enable builds for powerpc64 ISA type.
298         - Add DIV_ROUND_UP and roundup macros if unavailable.
299         - Cast 64-bit values for %lld format string to (long long) to
300           quiet compile warning.
301
302         * module/splat/splat-ctl.c: Proper ioctl() 32/64-bit binary
303           compatibility.  We need to ensure the ioctl data itself is always
304           packed the same for 32/64-bit binaries.  Additionally, the correct
305           thing to do is encode this size in bytes as part of the command
306           using _IOC_SIZE().
307
308         * modules/spl/spl-kmem.c: Fixed a long standing bug in the debug
309           tracing.  The tcd_for_each() macro expected a NULL to terminate
310           the trace_data[i] array but this was only ever true due to luck.
311           All trace_data[] iterators are now properly capped by TCD_TYPE_MAX.
312
313         * modules/spl/spl-kmem.c: To simplify debugging all symbols aquired
314           dynamically using spl_kallsyms_lookup_name() are initially poisoned
315           with SYMBOL_POISON.
316
317 2009-03-20 Brian Behlendorf <behlendorf1@llnl.gov>
318
319         * : Tag spl-0.4.3
320
321         * configure.ac, *Makefile.am: Build system update.  This includes
322         resolving various build issues and adding support for the remaining
323         common build targets.  Available targets now include:
324
325         - make all        # Build everything
326         - make install    # Install everything
327         - make clean      # Clean up build products
328         - make distclean  # Clean up everything
329         - make dist       # Create package tarball
330         - make srpm       # Create package source RPM
331         - make rpm        # Create package binary RPMs
332         - make tags       # Create ctags and etags for everything
333
334         Extra care was taken to ensure that the source RPMs are fully
335         rebuildable against Fedora/RHEL/Chaos kernels.  To build binary
336         RPMs from the source RPM for your system simply run:
337
338         rpmbuild --rebuild spl-x.y.z-1.src.rpm
339
340         This will produce two binary RPMs with correct 'requires'
341         dependencies for your kernel.  One will contain all zpl modules
342         and support utilities, the other is a devel package for compiling
343         additional kernel modules which are dependent on the spl.
344
345         spl-x.y.z-1_<kernel version>.x86_64.rpm
346         spl-devel-x.y.2-1_<kernel version>.x86_64.rpm
347
348         * : FC10 (linux-2.6.27.19) and i686 compatibility update.  The
349         list of support platforms has been extended to include FC10
350         systems and x86 architectures.  It should be noted that kernels
351         older the 2.6.27.19 should work but have not have not been tested.
352
353         * configure.ac: Fix build issue preventing spl_config.h from being
354         cleanly included by dependent packages.
355
356         * module/spl/spl-taskq.c: Fix taskq_wait() not waiting bug.
357
358         * module/spl/spl-xdr.c: Add XDR implementation provided by Ricardo
359         Correia from Sun.
360
361         * module/spl/spl-kmem.c: Linux VM integration cleanup.
362
363         * module/spl/spl-kmem.c: Slab cache improvements and fixes.
364
365         * modules/splat/*: Include additional SPLAT regression tests.
366
367         * : Various bug fixes are more clearly detailed in the git
368         commit logs.  For a detailed summary of changes post version
369         0.4.2 check the git commit logs.
370
371         git log -35
372
373 2009-02-05 Brian Behlendorf <behlendorf1@llnl.gov>
374
375         * : Tag spl-0.4.2
376
377         * module/spl/spl-kmem.c include/sys/kmem.h: Slab cache improvements:
378           - Implement kmem cache alignment.
379           - Implement slab ageing.
380           - Optimized slab packing algorithm.
381           - Fixed deadlock due to calling call kv_free() under the skc_lock.
382           - Added additional SPLAT test cases
383           - Performance optimizations
384
385         * module/spl/spl-kmem.c include/sys/kmem.h: Linux VM integration.
386         The Solaris global VM symbols minfree, desfree, lotsfree, needfree,
387         swapfs_minfree, swapfs_reserve, availrmem, freemem, and physmem are
388         now available and loosely integrating with the Linux VM.  Some
389         tuning will undoubtably be needed and these tunables are available
390         in /proc/sys/kernel/spl/vm/* for this very reason.
391
392         * config/spl-build.m4: New configure checks needed when building
393         against 2.6.27+ kernels.  More work is needed here.
394
395         * : Minor cleanup see the 'git log' for full details.
396
397 2009-01-21 Brian Behlendorf <behlendorf1@llnl.gov>
398
399         * : Tag spl-0.4.1
400
401         * : Implement ksid_*, ddi_strto*, and system taskq functionality.
402         In addition, several other small Solaris compatibility changes 
403         were made, see the 'git log' for full details.
404
405 2008-11-26 Brian Behlendorf <behlendorf1@llnl.gov>
406
407         * : Tag spl-0.4.0 (Development now done with Git)
408
409         * : Imported SPL SVN repo in to Git Repo for core development.
410
411 2008-11-26 Brian Behlendorf <behlendorf1@llnl.gov>
412
413         * : Tag spl-0.3.5
414
415         * : Include META file support.
416
417 2008-11-05 Jim Garlick <garlick@llnl.gov>
418
419         * : Add autogen.sh products.
420
421         * configure.ac : Use AC_CONFIG_AUX_DIR to put autograph products
422         in ./auotconf.
423
424         * autogen.sh : Use --copy to avoid symlinks, remove error
425         redirection, run aclocal before libtoolize.
426
427 2008-11-13 Brian Behlendorf <behlendorf1@llnl.gov>
428
429         * include/sys/sunddi.h, modules/spl/spl-module.c : Removed default
430         udev support from sunddi implementation because it uses GPL-only
431         symbols.  This support is optionally available for SPL consumers
432         if they define HAVE_GPL_ONLY_SYMBOLS and license their module as
433         GPL using the MODULE_LICENSE("GPL") macro.
434
435 2008-11-05 Brian Behlendorf <behlendorf1@llnl.gov>
436
437         * : Tag spl-0.3.4
438
439         * : Coverity clean.
440
441         * : Patches from Ricardo M. Correia <Ricardo.M.Correia@sun.com> 
442         applied with minor revisions:
443
444                 spl-00-rm-gpl-symbol-notifier_chain.patch
445                 spl-01-rm-gpl-symbol-set_cpus_allowed.patch
446                 spl-02-rm-gpl-symbols-device.patch
447                 spl-03-rm-gpl-symbol-ktime_get_ts.patch
448                 spl-04-fix-taskq-spinlock-lockup.patch
449                 spl-05-div64.patch
450                 spl-06-atomic64.patch
451                 spl-07-kmem-cleanup.patch
452                 spl-08-km-sleep-nofail.patch
453                 spl-09-fix-kmem-track-oops.patch
454                 spl-10-fix-assert-verify-ndebug.patch
455
456 2008-06-30 Brian Behlendorf <behlendorf1@llnl.gov>
457
458         * : Tag spl-0.3.3
459
460         * : modules/sys/kmem-slab.c : Refined SPL slab to include
461         per-cpu caches, removed internal hash, other general 
462         performance improvements.  Much work remain but it's pretty
463         good for an initial implementation.
464
465 2008-06-13 Brian Behlendorf <behlendorf1@llnl.gov>
466
467         * : modules/sys/kmem-slab.c : Re-implemented the slab to no
468         longer be based on the linux slab but to be it's own complete
469         implementation.  The new slab behaves much more like the
470         Solaris slab than the Linux slab.
471
472 2008-06-04 Brian Behlendorf <behlendorf1@llnl.gov>
473
474         * : Tag spl-0.3.2
475
476         * : Extensive improvements to the build system to detect kernel
477         API changes so we can flexibly build with a wider range of kernel
478         versions.  The code has now been testing with the 2.6.18-32chaos
479         and 2.6.25.3-18.fc9 kernels, however we should also be compatible
480         with other kernels in the range of 2.6.18-2.6.25.
481
482 2008-05-25 Brian Behlendorf <behlendorf1@llnl.gov>
483
484         * configure.ac, autoconf/* : Initial pass at resolving
485         API changes introduced by kernels newer than 2.6.18.
486
487 2008-05-21 Brian Behlendorf <behlendorf1@llnl.gov>
488
489         * : Tag spl-0.3.1
490
491         * : License headers including URCL added for release.
492
493 2008-05-21 Brian Behlendorf <behlendorf1@llnl.gov>
494
495         * : Tag spl-0.3.0
496
497         * configure.ac: Improved autotools support.
498
499 2008-04-26 Brian Behlendorf <behlendorf1@llnl.gov>
500
501         * include/sys/mutex.h : Implemented a close approximation
502         of adaptive mutexes.  These changes however required me to 
503         export a new symbol from the kernel proper 'task_curr()'
504         which means we are now dependant on a patched kernel.
505
506 2008-04-24 Brian Behlendorf <behlendorf1@llnl.gov>
507
508         * : Tag spl-0.2.1 
509
510         * modules/spl/spl-proc.c : Add /proc/sys/spl/version.
511
512 2008-04-24 Herb Wartens <wartens2@llnl.gov>
513
514         * include/sys/kmem.h : Make sure that when calling __vmem_alloc
515         that we do not have __GFP_ZERO set.  Once the memory is allocated
516         then zero out the memory if __GFP_ZERO is passed to
517         __vmem_alloc.
518
519 2008-04-16 Herb Wartens <wartens2@llnl.gov>
520
521         * modules/spl/spl-kmem.c : Make sure to disable interrupts
522         when necessary to avoid deadlocks.  We were seeing the deadlock
523         when calling kmem_cache_generic_constructor() and then an interrupt
524         forced us to end up calling kmem_cache_generic_destructor()
525         which caused our deadlock.
526
527 2008-02-26 Brian Behlendorf <behlendorf1@llnl.gov>
528
529         : Initial commit of the solaris porting layer (spl).  Included
530         in addition to the source is an initial autoconf / configure
531         style build system.