Implement a new vfs function, vfs_account()
authorFrançois Tigeot <ftigeot@wolfpond.org>
Sat, 6 Aug 2011 15:29:06 +0000 (17:29 +0200)
committerFrançois Tigeot <ftigeot@wolfpond.org>
Thu, 11 Aug 2011 16:02:44 +0000 (18:02 +0200)
It will be used to implement user and group disk space accounting
with possible filesystem-specific integration

sys/kern/vfs_default.c
sys/kern/vfs_init.c
sys/sys/mount.h

index a5c4ebf..e6e4da4 100644 (file)
@@ -1456,4 +1456,10 @@ vfs_stdextattrctl(struct mount *mp, int cmd, struct vnode *vp,
        return(EOPNOTSUPP);
 }
 
+int
+vfs_stdaccount(struct mount *mp, uid_t uid, gid_t gid, int64_t delta)
+{
+       return(0);
+}
+
 /* end of vfs default ops */
index eec8631..4ac5b5c 100644 (file)
@@ -420,6 +420,10 @@ vfs_register(struct vfsconf *vfc)
                /* extended attribute control */
                vfsops->vfs_extattrctl = vfs_stdextattrctl;
        }
+       if (vfsops->vfs_account == NULL) {
+               /* file system uid and gid accounting */
+               vfsops->vfs_account = vfs_stdaccount;
+       }
 
        /*
         * Call init function for this VFS...
index e27baca..3b5f7a2 100644 (file)
@@ -500,6 +500,8 @@ typedef int vfs_uninit_t(struct vfsconf *);
 typedef int vfs_extattrctl_t(struct mount *mp, int cmd, struct vnode *vp,
                    int attrnamespace, const char *attrname,
                    struct ucred *cred);
+typedef int vfs_account_t(struct mount *mp,
+                       uid_t uid, gid_t gid, int64_t delta);
 
 int vfs_mount(struct mount *mp, char *path, caddr_t data, struct ucred *cred);
 int vfs_start(struct mount *mp, int flags);
@@ -540,6 +542,7 @@ struct vfsops {
        vfs_uninit_t    *vfs_uninit;
        vfs_extattrctl_t *vfs_extattrctl;
        vfs_statvfs_t   *vfs_statvfs;
+       vfs_account_t   *vfs_account;
 };
 
 #define VFS_MOUNT(MP, PATH, DATA, CRED)                \
@@ -672,6 +675,7 @@ vfs_vptofh_t        vfs_stdvptofh;
 vfs_init_t     vfs_stdinit;
 vfs_uninit_t   vfs_stduninit;
 vfs_extattrctl_t vfs_stdextattrctl;
+vfs_account_t  vfs_stdaccount;
 
 struct vop_access_args;
 int vop_helper_access(struct vop_access_args *ap, uid_t ino_uid, gid_t ino_gid,