devfs - populate statfs f_files properly
authorAlex Hornung <ahornung@gmail.com>
Fri, 11 Sep 2009 08:59:30 +0000 (09:59 +0100)
committerAlex Hornung <ahornung@gmail.com>
Fri, 11 Sep 2009 09:37:58 +0000 (10:37 +0100)
* Now we set statfs f_files to the total number of currently allocated
  devfs_nodes.

Reported-by: Sascha Wildner
sys/sys/devfs.h
sys/vfs/devfs/devfs_core.c
sys/vfs/devfs/devfs_vfsops.c

index cd28159..0d65656 100644 (file)
@@ -127,6 +127,7 @@ struct devfs_mnt_data {
        struct mount    *mp;
        uint32_t        mnt_type;
        long            leak_count;
+       long            file_count;
        int             jailed;
        size_t          mntonnamelen;
 };
index 7230e64..347da7e 100644 (file)
@@ -269,6 +269,8 @@ devfs_allocp(devfs_nodetype devfsnodetype, char *name,
                ++mp->mnt_namecache_gen;
        }
 
+       ++DEVFS_MNTDATA(mp)->file_count;
+
        return node;
 }
 
@@ -413,6 +415,8 @@ devfs_freep(struct devfs_node *node)
        }
        node->flags |= DEVFS_DESTROYED;
 
+       --DEVFS_MNTDATA(node->mp)->file_count;
+
        objcache_put(devfs_node_cache, node);
 
        return 0;
index 2079343..e365280 100644 (file)
@@ -109,6 +109,7 @@ devfs_mount(struct mount *mp, char *path, caddr_t data, struct ucred *cred)
                mnt->jailed = jailed(cred);
 
        mnt->leak_count = 0;
+       mnt->file_count = 0;
        mnt->mp = mp;
        TAILQ_INIT(&mnt->orphan_list);
        mnt->root_node = devfs_allocp(Proot, "", NULL, mp, NULL);
@@ -176,7 +177,7 @@ devfs_statfs(struct mount *mp, struct statfs *sbp, struct ucred *cred)
        sbp->f_blocks = 2;      /* avoid divide by zero in some df's */
        sbp->f_bfree = 0;
        sbp->f_bavail = 0;
-       sbp->f_files = 0;
+       sbp->f_files = (DEVFS_MNTDATA(mp))?(DEVFS_MNTDATA(mp)->file_count):0;
        sbp->f_ffree = 0;
 
        if (sbp != &mp->mnt_stat) {