Re: [PATCH 13/28] VFS: Introduce soft reference counts

From: Mika Penttilä
Date: Mon Oct 25 2004 - 12:56:55 EST


Mike Waychison wrote:

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Mika Penttilä wrote:


Mike Waychison wrote:



This patch introduces the concept of a 'soft' reference count for a
vfsmount.
This type of reference count allows for references to be held on
mountpoints
that do not affect their busy states for userland unmounting. Some might
argue that this is wrong because 'when I unmount a filesystem, I want the
resources associated with it to go away too', but this way of thinking
was
deprecated with the addition of namespaces and --bind back in the 2.4
series.

A future addition may see a callback mechanism so that in kernel users
can
use a given mountpoint and have it deregistered some way (quota and
accounting come to mind).

These soft reference counts are used by a later patch that adds an
interface
for holding and manipulating mountpoints using filedescriptors.

Signed-off-by: Mike Waychison <michael.waychison@xxxxxxx>

+static inline struct vfsmount *mntsoftget(struct vfsmount *mnt)
+{
+ if (mnt) {
+ read_lock(&vfsmountref_lock);
+ atomic_inc(&mnt->mnt_softcount);
+ mntgroupget(mnt);
+ read_unlock(&vfsmountref_lock);
+ }
+ return mnt;
+}
+
+static inline void mntsoftput(struct vfsmount *mnt)
+{
+ struct vfsmount *cleanup;
+ might_sleep();
+ if (mnt) {
+ if (atomic_dec_and_test(&mnt->mnt_count))
+ __mntput(mnt);
+ read_lock(&vfsmountref_lock);
+ cleanup = mntgroupput(mnt);
+ atomic_dec(&mnt->mnt_softcount);
+ read_unlock(&vfsmountref_lock);
+ if (cleanup)
+ __mntgroupput(cleanup);
+ }
+}
+
extern void free_vfsmnt(struct vfsmount *mnt);




What is this against? What are mntgroupput and mntgroupget?


This is against patch [PATCH 11/28] VFS: Allow detachable subtrees.

In that patch, mntgroup(get|put) handles the count of all non-glue
references for a given tree of vfsmounts.




Why does soft put decrement mnt_count which isn't increment by soft get?


Ah, thanks for pointing that out. It got messed up when I created the
patchset from the bk tree. Will fix.



How do
soft references allow userland umount? I don't see soft references used
anywhere...



Soft references are used by the mountpoint file descriptor patch
[14/28]. They allow references to be had on a vfsmount such that the
mountpoint itself is not kept busy in the namespace. This allows a
program to 'grab a mountpoint' by a magic file (gotten by sys_mountfd),
and perform ops on it. The mountfd holds a reference to the vfsmount,
but it doesn't keep userspace from trying to umount(2) the path.

Does that help?



I think at least patches 11 and 14 got lost...

--Mika



-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/