On Wed, Jul 16, 2025 at 2:47 AM NeilBrown <neil@xxxxxxxxxx> wrote: > > More excellent review feedback - more patches :-) > > I've chosen to use ovl_parent_lock() here as a temporary and leave the > debate over naming for the VFS version of the function until all the new > names are introduced later. Perfect. Please push v3 patches to branch pdirops, or to a clean branch based on vfs-6.17.file, so I can test them. Thanks, Amir. > > > Original description: > > This series of patches for overlayfs is primarily focussed on preparing > for some proposed changes to directory locking. In the new scheme we > will lock individual dentries in a directory rather than the whole > directory. > > ovl currently will sometimes lock a directory on the upper filesystem > and do a few different things while holding the lock. This is > incompatible with the new scheme. > > This series narrows the region of code protected by the directory lock, > taking it multiple times when necessary. This theoretically open up the > possibilty of other changes happening on the upper filesytem between the > unlock and the lock. To some extent the patches guard against that by > checking the dentries still have the expect parent after retaking the > lock. In general, I think ovl would have trouble if upperfs were being > changed independantly, and I don't think the changes here increase the > problem in any important way. > > After this series (with any needed changes) lands I will resubmit my > change to vfs_rmdir() behaviour to have it drop the lock on error. ovl > will be much better positioned to handle that change. It will come with > the new "lookup_and_lock" API that I am proposing. > > Thanks, > NeilBrown > > [PATCH v3 01/21] ovl: simplify an error path in ovl_copy_up_workdir() > [PATCH v3 02/21] ovl: change ovl_create_index() to take dir locks > [PATCH v3 03/21] ovl: Call ovl_create_temp() without lock held. > [PATCH v3 04/21] ovl: narrow the locked region in > [PATCH v3 05/21] ovl: narrow locking in ovl_create_upper() > [PATCH v3 06/21] ovl: narrow locking in ovl_clear_empty() > [PATCH v3 07/21] ovl: narrow locking in ovl_create_over_whiteout() > [PATCH v3 08/21] ovl: simplify gotos in ovl_rename() > [PATCH v3 09/21] ovl: narrow locking in ovl_rename() > [PATCH v3 10/21] ovl: narrow locking in ovl_cleanup_whiteouts() > [PATCH v3 11/21] ovl: narrow locking in ovl_cleanup_index() > [PATCH v3 12/21] ovl: narrow locking in ovl_workdir_create() > [PATCH v3 13/21] ovl: narrow locking in ovl_indexdir_cleanup() > [PATCH v3 14/21] ovl: narrow locking in ovl_workdir_cleanup_recurse() > [PATCH v3 15/21] ovl: change ovl_workdir_cleanup() to take dir lock > [PATCH v3 16/21] ovl: narrow locking on ovl_remove_and_whiteout() > [PATCH v3 17/21] ovl: change ovl_cleanup_and_whiteout() to take > [PATCH v3 18/21] ovl: narrow locking in ovl_whiteout() > [PATCH v3 19/21] ovl: narrow locking in ovl_check_rename_whiteout() > [PATCH v3 20/21] ovl: change ovl_create_real() to receive dentry > [PATCH v3 21/21] ovl: rename ovl_cleanup_unlocked() to ovl_cleanup()