5
# $Id: History,v 1.20 2007/05/09 01:22:32 sfjro Exp $
8
- the described date are all in JST.
9
- CVS handles UTC as its timezone.
10
- all these descriptions should be archived in the ML on sourceforge,
11
since I always post there and let users know. But sometimes archiving
12
failed. this is the main reason to begin writing this file.
14
----------------------------------------------------------------------
17
- bugfix: stop consuming inode number rapidly.
20
- bugfix: fix the obsolete inodes with d_revalidate. the last
21
temporary bugfix is completed. but this version of aufs consumes
22
inode number rapidly. it will be fixed in a week.
26
+ new function au_cpup_igen(), to support inode generation
27
+ make the modfified file by UDBA obsoleted by its name and
29
+ resetting xino(temporary fix)
30
+ make si_gen atomic_t
31
- forgot to print 'warn_perm' in /proc/mounts.
34
- bugfix: re-use inode->i_generation to support the enexpectedly
35
survived inodes after remount. test lower inodes in
36
hidden_d_revalidate(). simplified postproce() in
37
udba=inotify. introduce an internal generation for aufs_iinfo.
39
it is not finished yet and a hardlink on NFS branch will not work.
40
- bugfix: at deleting a branch, revalidate the survived dentries after
42
- bugfix: support the unhashed dentries, but ignore the unreferenced
44
- bugfix: ii_read/write_unlock in an error path, mainly for NFS
46
- bugfix: revalidating the opened files after remount, introduce a new
48
- bugfix: maintain the reference of aufs module in case of the no-wait
50
- introduce <sysfs>/fs/aufs/<mnt_id>/xino, and sysaufs.h. move some
51
declarations from module.h to sysaufs.h. rename del/add_sbilist() to
52
sysaufs_del/add(). refine sysaufs.c simply.
53
- CONFIG_AUFS_EXPORT in statically linked aufs depends upon
54
CONFIG_EXPORTFS=y, reported by Sandino Flores Moreno.
55
- call dget_parent() instead of accessing denrty->d_parent directly.
56
- convert some inline functions for debugging to macros, in order to
57
print the prefeable line number in a file.
58
- rename nfsd_lockdep_off/on() to au_...().
59
- supports IN_UNMOUNT, if it happens there must must be another bug.
60
- ignore whiteouted names in revalidating child files.
61
- rename init_export_op() to au_init_export_op().
64
- bugfix: file revalidation after rename(tgt), reported by Just Marc.
65
- strict inode lock in fsync() before 2.6.17.
66
- restore rdacahe option, which was dropped by mistake.
67
- print the depth of generic workqueue in sysfs/aufs/stat.
69
- still testing udba=inotify.
70
- simplified "uid/gid/perm" message.
72
- make aufs_cond available even if CONFIG_LKTR is disabled.
73
- revise au_fin_finfo() and si lock.
74
- simplified cache function definitions.
75
- merge both of wait/nowait works into a single enqueue function.
76
- rename wkq_wait() to au_wkq_wait().
77
- rename some name hash functions, and two new functions nash_new()
79
+ init_nhash() --> nhash_init()
80
+ move_nhash() --> nhash_move()
81
+ free_nhash() --> nhash_fin()
82
- move au_is_kthread() to wkq.h, and rename to is_aufsd().
83
- rename au_init_wkq() to au_wkq_init().
84
- rename au_fin_wkq() to au_wkq_fin().
85
- rename au_inotify_exit() to au_inotify_fin().
86
- rename dbg_dlgt_exit() to dbg_dlgt_fin().
89
- bugfix: introduce dcsub.[ch] to handle dentry cache.
90
- bugfix: use readlink(1) to get cwd, in auplink, mount.aufs and
91
unionctl, reported by Torsten Luettgert. Actually, to use readlink
92
was suggested by Tomas M last year.
94
- verbose warning message for 'different uid/gid/perm.'
95
- still testing udba=inotify.
96
- support GFP flags in au_kzrealloc().
97
- simplified lock/unlock functions definition by a new macro
101
- introduce new branch attribute "nolwh."
102
- refine parsing options at mount/remount time, reported by Sandino
104
+ remove whiteout-base and whplink-dir in nopllink and br_mod(),
106
+ increment sbinfo generation in a new function
108
+ support multiple xino/noxino options in another way.
109
+ force "ro" when unknown branch permission is specified.
110
+ at mount-time, interpret options in this order.
111
* simple flags, except xino/noxino, udba=inotify and dlgt.
117
* interpret options in the given order left to right,
118
except dlgt which is disabled in interpreting.
119
* create whiteout-base and whplink-dir if necessary.
121
+ new functions, clean_wh(), clean_plink(), test_linkable(),
123
- support 64bit environtment, reported by Vasily Tarasov.
124
- introduce a sample for kprobe.
125
- bugfix: do not traverse the sub-mounts under aufs at refreshing
126
cached dirs after remount.
127
- bugfix: simultaneous read in 'dlgt' mode, reported and fixed by
129
- bugfix: LINUX_VERSION_CODE for linux-2.6.16.
130
- still testing inotify.
131
- support lockdep in nfsd, still testing.
132
- minor optimization for dput().
133
- new test functions br_writable(), br_whable() and br_linkable_wh(),
134
replacing au_is_whable().
135
- do write_lock() in reinit_br_wh().
136
- refine updating /sys/fs/aufs/stat.
137
- wkq_nowait() calls schedule_work().
140
- bugfix: forgot dput in a error case.
141
- introduce wkq_nowait().
142
- refine udba=inotify, still testing.
143
- extract some functions from sbinfo.c, create a new file plink.c.
146
- bugfix: forgot include one header in misc.h
149
- bugfix: increment sbinfo generation in cases of br_mod() for sensing
150
whiteout, xino/noxino and udba=inotify, too. introducing
151
au_is_whable() and sbr_is_whable(). call au_sigen_inc() from
152
do_opts(), reported by Jorgen P. Tjerno.
153
- support sysfs and NFS-exporting, introducing sysaufs.c,
154
CONFIG_AUFS_SYSAUFS, export.c, CONFIG_AUFS_EXPORT and a new module
156
- remove AUFS_DEBUG_RWSEM.
157
- workaround an application bug when 'dlgt' is specified.
158
generally, read(2) or write(2) may return the value shorter
159
than requested. But many applications don't support it,
161
- support file gid when 'dlgt' is set.
162
- add a note about SMP.
163
- add a note about lockdep, still testing.
164
- add a note about performance test.
165
- convert branch permission bits into an integer.
166
- add an branch mode alias 'rowh' which is equivalent to 'ro+wh.'
167
- macro functions are converted to inline function.
168
- rename some symbols.
169
- merge hidden_notify_change() into vfsub_notify_change().
170
- convert the type of aufs_nwkq to short, since linux/kernel/params.c
171
prints as '%c' for 'byte'.
172
- accounting in workqueue, refine the algorithm of choosing the thread.
173
- refined LHASH_PATCH and DLGT condition for lkup_one() and lkup_hash().
174
- refine file read/write when 'dlgt' is specified.
175
- refine DLGT condition for minor optimization.
176
- stop setting the first branch mode to 'rw' by default, when the mount
180
- bugfix: brokn df(1)/statfs(2), wrong argument for vfs_statfs().
183
- bugfix: check the maximum number of branches, reported by Tomas M.
184
- testing the inode number after the direct rename of a dir.
185
- testing new mount option 'dlgt.'
187
- add a new file vfsub.c
188
- support O_LARGEFILE at copying-up a regular file, and opening a dir.
189
- change some function signature and a global variable name in order
190
to avoid the symbol conflict, one of them was reported by Just Marc.
191
add_nlink(), alloc_dinfo(), alloc_whname(), copy_file(),
192
cpup_attr_all(), cpup_attr_changable(), cpup_attr_nlink(),
193
cpup_attr_timesizes(), dir_roflags, do_open(), file_roflags(),
194
fill_de(), fin_finfo(), fin_wkq(), find_brindex(),
195
find_dbindex(), flags_cpup(), free_whname(),
196
half_refresh_plink(), hi_flags(), iinfo_fin(), iinfo_init(),
197
init_finfo(), init_vdir(), init_wkq(), is_plinked(),
198
list_plink(), new_br_id(), put_plink(), ready_to_write(),
199
refresh_hdentry(), refresh_hinode(), reopen_nondir(),
200
reset_hinotify(), reval_and_lock_finfo(), reval_dpath(),
201
show_br(), sigen(), sigen_inc(), sub_nlink(),
202
test_empty_lower(), test_perm(), unlink_wh_dentry(),
203
update_brange(), update_dbstart(), update_digen(), update_figen().
206
- gave up handling inode S_PRIVATE flag and supporting LSM generally.
207
- minor optimization by LOOKUP_DIRECTORY flag.
208
- testing NFS-exporting.
209
- still testing lockdep.
210
- still testing sysfs.
211
- add samples for LiveCD over NFS.
212
- add a note suggested by Simon Sasburg.
215
- support copyup a 'tail-hole'ed sparse file.
216
- still testing lockdep.
217
- still testing sysfs.
220
- bugfix: mis-judging the maximum number of branches.
221
- bugfix: branch index at '--add --before path', reported and fixed by
222
Fernando A. P. Gomes.
223
- refine inotify, a test finished.
225
- begin testing with lockdep, still testing.
226
- begin supporting sysfs, still testing.
227
- refine the maximum number of branches.
228
- add a caution about AUFS_HINOTIFY and AUFS_DEBUG_RWSEM.
229
- refine copyup pseudo-link, remove cpup_pseudo_link() function.
230
- refine copyup pseudo-link, call test_and_cpup_dirs() and
231
sio_cpup_simple() instead of cpup_pseudo_link().
232
- refine copyup pseudo-link, a new function lkup_plink().
233
- refine new_inode(), call iget_locked() instead of iget() and test
235
- minor optimization, the macro mnt_nfs().
236
- remove d_iput() operation.
237
- introduce a new member 'si_mnt' and 'si_sb.'
238
- change some options for tail(1) and grep(1) in order to support
239
busybox, suggested by Tomas M.
240
- introduce two new files, module.h and vfsub.h.
243
- mmap behaviour changed, by removing mmap counter.
244
- bugfix: after a branch was changed from RO to RW, the hidden opened file
245
should be closed once.
246
- bugfix: when the given mount options are too long, aufs should return an
247
error expectedly, reported by Tomas M.
248
- support directory link count.
249
- introduce ./Kconfig.in and make target 'kconfig', which will
250
generate ./fs/aufs/Kconfig.
251
- introduce configurable amount of branches. but I am afraid you will
252
have to wait for aufs supports sysfs.
254
- refine hidden inotify, still testing. disable udba=inotify temporary while
255
parsing mount options.
256
- call vfs_read/write() instead of hidden file operation, in order to support
258
- extract some functions from super.c, and create a new file module.c.
261
- begin supporting a readonly no-whiteout aufs branch of another aufs, still
263
- begin supporting exporting aufs via NFS, still testing.
264
- begin supporting LSM, still testing.
265
- bugfix unionctl: typo or dropped single quotation.
266
- bugfix unionctl: support a relative path for --whereis.
267
- unionctl aborts when the --whereis argument does not exist.
270
- bugfix: a test in adding a branch, included in a report from
272
check the adding branch to be overlapped or not, even if it is a
274
- bugfix: unionctl script --whereis option.
275
the action should print the branch path, instead of the given argument, even
276
it has only one argument.
277
- begin supporting inode S_PRIVATE flag and CONFIG_SECURITY. still testing.
278
- remove all the nested function definition, since some compilers (or their
279
configuration) issue a warning about that.
282
- introduce diropq option.
283
the behaviour of mkdir(2) and rename(2) dir case is changed. now they don't
284
make '.wh..wh..opq' when it is not necessary. this is the default. if
285
you dislike this behaviour and still want to make it always, use
286
'diropq=always' mount option. see the manual in detail.
287
- bugfix: make fsync(2) return success when the file is not opened for writing,
288
reported by Martin Walter.
289
I am afraid this behaviour may violate some standards. Checking the
290
behaviour of ext2, aufs decided to return success.
291
- rename some functions
292
+ lookup_whtmp() to lkup_whtmp().
293
+ lock_hdir_lookup_wh() to lock_hdir_lkup_wh().
294
+ lookup_wh() to lkup_wh().
295
- I forgot update AUFS_VERSION on last Monday and I updated it on
296
Thursday. Sorry for confusion.
299
- introduce a new file History.
300
- rename wh.[ch] to whout.[ch].
301
- rename some symbols.
302
+ do_cache_alloc() to aufs_cache_alloc().
303
+ do_cache_free() to aufs_cache_free().
304
+ dt_hidden_dentry in struct dtime, to dt_h_dentry.
305
+ dtohd() to h_dptr().
306
+ dtohd_index() to h_dptr_i().
307
+ dtopd() to dtodi().
308
+ fi_hidden_vm_ops in struct aufs_finfo, to fi_h_vm_ops.
309
+ ftobr_index() to ftobr().
310
+ ftohf() to h_fptr().
311
+ ftohf_index() to h_fptr_i().
312
+ ftopd() to ftofi().
313
+ hidden_dentry in struct rmdir_whtmp_arg, to h_dentry.
314
+ hidden_root in struct opt_del, to h_root.
315
+ hidden_root in struct opt_mod, to h_root.
316
+ itohi() to h_iptr().
317
+ itohi_index() to h_iptr_i().
318
+ itopd() to itoii().
319
+ lookup_dentry() to lkup_dentry().
320
+ lookup_negative() to lkup_neg().
321
+ lookup_one() to lkup_one().
322
+ refresh_dentry() to refresh_hdentry().
323
+ refresh_inode() to refresh_hinode().
325
+ set_dtohd_index() to set_h_dptr().
326
+ set_ftohf_index() to set_h_fptr().
327
+ set_itohi_index() to set_h_iptr().
328
+ sio_lookup_one() to sio_lkup_one().
329
+ stopd() to stosi().
332
- bugfix i_op.c: uninitialized variable in case of CONFIG_AUFS_FAKE_DM
333
enabled, reported and fixed by Jason Lunz.
336
- support 'security' model, reported and tested by Ulrich Holeschak.
337
you need to disable CONFIG_AUFS_FAKE_DM.
338
- introduce umount.aufs script.
339
- umount.aufs and mount.aufs scripts calls auplink script when it is needed
341
- auplink script supports /etc/default/auplink configuration.
342
- bugfix: a comment in local.mk, reported and fixed by Wilhelm Meier.
345
- Jason Lunz sent a patch which creates linux/fs/aufs/Kconfig.
348
- disable CONFIG_AUFS_COMPAT by default.
349
If you still want to use it, enable it manually. But this configuration will
350
be removed in a few weeks.
351
- a new script named auplink, with an executable aulchown and a mount option
352
'clean_plink', are introduced, in order to reproduce all hardlinks on a
354
- bugfix: full-fix for pseudo-link which was temporary half-fix in last update.
355
- bugfix: link instead of copyup for an already pseudo-linked file.
356
- bugfix: hide the unnecessary 'remount' option before comm(1) in mount.aufs script.
359
- I found a bug about pseudo-link. It keeps inodes incorrectly, and users may
360
see the deleted inode. The fix will complete next year. Until then,
361
pseudo-link feature and 'plink' mount option are disabled and 'noplink' is
362
the default mount option. It means the the internal behaviour like
363
copy-up will be changed.
364
- begin supporting linux-2.6.20.
365
- support 'sillyrename' on NFS branch
366
- added a sample for diskless machines which uses aufs as root filesystem.
367
- CONFIG_AUFS_COMPAT will be removed in a few weeks. The code in case of
368
CONFIG_AUFS_COMPAT=y remains. In detail,
369
+ default branch permission
370
+ warning about wrong mount option
371
+ /proc/mounts shows 'br:' instead of 'dirs='
372
+ .wh.__dir_opaque is replaced by .wh..wh..opq
373
- bugfix: on NFS branch, after rename(2) to an existed file, the new named
374
file may refer to the old inode. this fix is not completed and does not
375
support plink option. This is the reason of disabling pseudo-link temporary.
376
- bugfix: a pipeline in unionctl script uses 'return', but it just
377
finishes the pipeline and doesn't exit from the function.
380
- discussing with Tomas M, introduced a new action --whereis to unionctl.
381
- remove the kernel version from the aufs version string.
382
some people misunderstands that the kernel version in the aufs version
383
string means the supported kernel version. Actually, it is the tested kernel
384
version, as it is described in README.
385
- new mount option, warn_perm and nowarn_perm.
386
- support the space characters in the paths of mount point and branches.
387
- support statfs(2) when the first branch is NFS.
390
- support linux-2.6.19, including NFS branch. you need lhash.patch.
391
- in the manual, describe that the white characters, comma, colon in the path
392
are not allowed. suggested by Tomas M.
393
- unionctl script, support CONFIG_AUFS_COMPAT. reported and fixed by Tomas M.
394
- prepend double wh prefix to tmpname at renaming dir.
397
- mis-detecting CONFIG_BLK_DEV_LOOP.
398
- support the cases without /sbin/mount.aufs
400
+ compare the xino filename.
403
- bugfix dir->fsync: it may be called with @file being NULL, especially from
404
nfsv4, reported by Klaus Knopper.
405
- unionctl script supports --list option, requested by Tomas M.
408
- pseudo-link: update hidden inode pointers by new function d_iput().
409
- pseudo-link: stop pseudo-link when the target inode already exists.
410
- cpup: restore the inode pointers after cpup whiteout failure.
411
- hinotify: restore the counter after rename_whtmp() failure.
414
- bugfix: before 2.6.17, msync(2) calls ->fsync without
415
lock. CONFIG_AUFS_DEBUG failed checking the lock, reported by Wesley Chow.
416
- bugfix: link(2), when the link target inode already exists on the target
417
branch, but the target name, aufs_link() failed copyup.
418
- bugfix: re-setting xino after setting noxino, aufs failed setting.
419
- force noxino when xino_init() returns an error
420
- warn only once per 255 times about "too many pseudo links".
423
- support linux-2.6.15, limited. dropped features are,,,
424
+ plink and noplink mount option
425
+ udba=inotify mount option
429
- 'anonymous nobody' kindly sent a patch to SF 'Patches' place. The patch
430
is for merging aufs into kernel source tree.
431
- begin supporting linux-2.6.19-rc2, unfinished, untested and NFS branch
433
- gave up supporting read/write to the mmapped file on NFS branch. it
434
seems a bug in linux and it can happen on any filesystem. it will be
435
fixed in linux-2.6.19 or later.
436
- new structure aufs_hdentry for hidden dentry.
437
- bugfix: at restoring the timestamps of the parent dir when mkdir(2) failed.
438
- bugfix: editing miss after parsing options.
441
- introduce new mount option 'udba', support 'udba=inotify' using
443
- describe about udba in aufs.5.
444
- remove CONFIG_AUFS_DBA and introduce CONFIG_AUFS_HINOTIFY.
445
- remove CONFIG_AUFS_NO_KSIZE and introduce CONFIG_AUFS_KSIZE_PATCH.
446
- bugfix: always cpup atime in aufs_read/write.
447
- bugfix: support write(2) to mmapped file on NFS branch.
448
- bugfix for 2.6.17: umount_begin() may not be called in before
449
linux-2.6.18 kernel, call it from put_super() too.
452
- bugfix: call igrab() before ii_write_unlock() to prevent from destroying
453
inode in half_refresh_plink().
454
- bugfix: support the case of the first branch is not writable.
455
- testing lookup_whtmp().
457
- prepare inotify for hidden inodes.
460
- bugfix: discard illegal dentry in case of undefined DBA.
461
- CONFIG_AUFS_DBA will be removed after introducing 'dba' mount
463
- prepare removing inotify.
464
- add 'do_xino' parameter to set_itohi_index().
465
- support read(2) to mmapped file on nfs.
468
- begin of inotify for hidden inodes.
469
CONFIG_AUFS_DBA (Direct Branch Access) requires CONFIG_INOTIFY.
471
- local macro RwSemMutex for debugging becomes global configuration
472
CONFIG_AUFS_DEBUG_RWSEM.
473
- gave up supporting CONFIG_DEBUG_PROVE_LOCKING.
474
- read(2) to NFS branch is not supported when the file is mmapped.
475
- well-behaved opening a file on NFS branch.
476
- refined memory allocation which size is zero.
479
- There might be a bug around kfree() in aufs. CONFIG_DEBUG_SLAB has
480
reported slab corruption once. It is not reproducible but I am still
482
- the fstype name is always "aufs" as I have announced.
483
- minor optimization by GCC's branch prediction or linux's unlikely macro.
484
- introducing plink/noplink mount option.
487
- support pseudo-link. branch and hidden_inode has branch id.
488
- rename wq.[ch] to wkq.[ch]. remove wq_nowait().
489
- reduce smp memory block which looks unnecessary.
490
- two threads (reinit hardlinked wh, and rmdir whtmp) do not use
491
workqueue because of memory leak possibility.
492
- begin of aufs_lookup_one_len() and AUFS_MUST_FOLLOW branch flag.
493
- remove si_xino_mutex and make si_xino as atomic_long_t.
494
- give up DEBUG_PROVE_LOCKING.
497
- bugfix: some mount(8) requires one more argument, reported by Tomas M.
498
- bugfix: nopage() accessed incorrect file, reported by Martin Oehler.
499
- bugfix: recursive kthread call, new macro is_kthread().
500
- bugfix: to copyup a device file requires CAP_MKNOD in rename().
501
- bugfix: removing a branch whose path name resembles the former option.
502
- tried supporting SMP, but I am not confident. I don't have such machine.
503
- xino write passes superio thread, I am afraid it is slower.
504
- speed up vdir (minor).
507
- bugfix: macros for 'nested lock' should be compiled under
508
linux-2.6.18 only, reported by Heinrich Rebehn.
511
- introduce a workqueue or a thread pool, replacing superio.
512
- hardlinked whiteout.
513
- introduce CONFIG_AUFS_DBA (Direct Branch Access).
514
- begin supporting linux-2.6.18(-rc4).
515
- try DEBUG_PROVE_LOCKING introduced by linux-2.6.18(-rc4).
518
- introduce nested__func__.patch for 'sparse'.
521
- introduce hardlinked whiteouts.
522
- support multiple writable branches.
523
- bugfix: del branch and cwd (current working directory).
524
- implement refresh dirs at remount time.
525
- bugfix: '#if' -- '#ifdef' in super.c, reported and fixed by Martin Oehler.
528
- bugfix: revalidating after del branch.
529
- bugfix: reset bwh in rename().
530
- bugfix: update mount point i_version.
531
- bugfix: remount may pass empty string.
532
- add EXAMPLES to the manual.
533
- bugfix: unionctl script supports a relative path, reported by Tomas M.
536
- support mmap without page-copy.
539
- introduce vdir, virtual or vertical directory, which is a seekable directory.
540
- introduce mount.aufs script.
541
- bugfix: symlink and device file in cpup_entry().
542
- try detecting direct access by its timestamp.
545
- bugfix: new revalidate scheme.
546
- simplified permission check.
547
- ignore dirwh when the branch is NFS.
550
- start CVS on sourceforge.
553
- no activities since I joined the Unionfs team.
556
- finish first basic implementation and tests.
557
- make an application to sourceforge, as the name of aufs.
560
- start implementing.
563
- start planning and designing personally, the name was junionfs.
566
- got to know Unionfs and start trying it.
569
- got an idea of a stackable filesystem, supposing the old Transparent