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

From: Mika Penttilä
Date: Mon Oct 25 2004 - 12:26:24 EST


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? Why does soft put decrement mnt_count which isn't increment by soft get? How do soft references allow userland umount? I don't see soft references used anywhere...

--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/