A question about fs

王哲 wangzhe5004 at gmail.com
Wed May 23 07:35:10 EDT 2012


Hello Everyone:
      The first time to study fs ,and write a simple module to traverse the
double list with super_block.
and the output of module is different with the result from the command cat
/proc/filesystems.
 the output fs of module is 23,and the output fs of cat /proc/filesystems
is 26. why?

 My Environments:
# uname -r
2.6.39.1
# lsb_release -a
No LSB modules are available.
Distributor ID:    Ubuntu
Description:    Ubuntu 11.04
Release:    11.04
Codename:    natty
gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4)

my code is as followed:

#include<linux/module.h>
#include<linux/init.h>
#include<linux/sched.h>
#include <linux/fs.h>
#include <linux/list.h>
#include <linux/spinlock.h>

#define addr_super_blocks 0xc173d0a0
#define addr_sb_lock      0xc18f3ba0

#ifndef offsetof
#define offsetof(type, field)   ((long) &((type *)0)->field)
#endif   /* offsetof */

#ifndef container_of
#define container_of(ptr, type, member) ({                      \
        const typeof( ((type *)0)->member ) *__mptr = (ptr);    \
        (type *)( (char *)__mptr - offsetof(type,member) );})
#endif


static __init int sbinfo_init(void)
{
    struct list_head *p;
    int count = 0;
    struct super_block *sb;

    spin_lock((spinlock_t *)addr_sb_lock);
    p = (struct list_head *)addr_super_blocks;
    p = p->next;
    for (;p != (struct list_head *)addr_super_blocks;p = p->next) {
           sb = container_of(p,struct super_block,s_list);
       printk("<0>filesystem name:%s\n",sb->s_type->name);
           count++;
    }
    spin_unlock((spinlock_t *)addr_sb_lock);
    printk("<0>----------------->%d\n",count);
    return 0;
}


static __exit void sbinfo_exit(void)
{
    printk("<0> bye! \n");
}

module_init(sbinfo_init);
module_exit(sbinfo_exit);
MODULE_LICENSE("GPL");

and output:
[ 4196.218726] filesystem name:sysfs
[ 4196.218732] filesystem name:rootfs
[ 4196.218735] filesystem name:bdev
[ 4196.218737] filesystem name:proc
[ 4196.218740] filesystem name:tmpfs
[ 4196.218742] filesystem name:devtmpfs
[ 4196.218745] filesystem name:debugfs
[ 4196.218747] filesystem name:sockfs
[ 4196.218750] filesystem name:pipefs
[ 4196.218752] filesystem name:anon_inodefs
[ 4196.218755] filesystem name:securityfs
[ 4196.218757] filesystem name:devpts
[ 4196.218760] filesystem name:hugetlbfs
[ 4196.218762] filesystem name:mqueue
[ 4196.218765] filesystem name:sysfs
[ 4196.218767] filesystem name:fusectl
[ 4196.218769] filesystem name:ext4
[ 4196.218771] filesystem name:tmpfs
[ 4196.218774] filesystem name:tmpfs
[ 4196.218776] filesystem name:tmpfs
[ 4196.218778] filesystem name:ext4
[ 4196.218780] filesystem name:fuse
[ 4196.218783] filesystem name:binfmt_misc
[ 4196.218786] ----------------->23

and cat /proc/filesystems output:
nodev    sysfs
nodev    rootfs
nodev    bdev
nodev    proc
nodev    cgroup
nodev    cpuset
nodev    tmpfs
nodev    devtmpfs
nodev    debugfs
nodev    securityfs
nodev    sockfs
nodev    pipefs
nodev    anon_inodefs
nodev    devpts
             ext3
             ext2
             ext4
nodev    ramfs
nodev    hugetlbfs
nodev    ecryptfs
nodev    fuse
             fuseblk
nodev    fusectl
nodev    pstore
nodev    mqueue
nodev    binfmt_misc

if anyone knows please help .Thanks
-- 
----------------------------------------------------------------------------------------------
WangZhe  Xi'an Shanxi CHINA
qq                             785924174
blog                           blog.163.com/zhe_wang_2009
----------------------------------------------------------------------------------------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.kernelnewbies.org/pipermail/kernelnewbies/attachments/20120523/c400c740/attachment.html 


More information about the Kernelnewbies mailing list