[prev in list] [next in list] [prev in thread] [next in thread] 

List:       dragonfly-users
Subject:    Re: your own filesystem
From:       Matthew Dillon <dillon () apollo ! backplane ! com>
Date:       2012-09-07 16:35:31
Message-ID: 201209071635.q87GZVB5087716 () apollo ! backplane ! com
[Download RAW message or body]


> hi, all
> (thanx for the links to the books)
> 
> i have added few handlers to 
> my_vnops.c file (that originally was null_vnops.c of "nullfs")
> 
> and (with intention to involve my handlers into execution flow)
> i have extended struct vop_ops (last 4 lines):
> 
> struct vop_ops my_vnode_vops = {
> 	.vop_nresolve =		null_nresolve,
> 	.vop_ncreate =		null_ncreate,
> 	.vop_nmkdir =		null_nmkdir,
> 	.vop_nmknod =		null_nmknod,
> 	.vop_nlink =		null_nlink,
> 	.vop_nsymlink =		null_nsymlink,
> 	.vop_nwhiteout =	null_nwhiteout,
> 	.vop_nremove =		null_nremove,
> 	.vop_nrmdir =		null_nrmdir,
> 	.vop_nrename =		null_nrename,
> 	.vop_mountctl =		null_mountctl,
> .vop_open =             my_open,
> .vop_read =             my_read,
> .vop_write =            my_write,
> .vop_access =           my_access
> };
> 
> then i have noticed that my_*() handlers were never called no matter what \
> operations i perform on my test subject.
> 
> the question is:
> (1) What am i doing wrong?
> (2) Is there any official description what is a purpose of each handler in struct \
> vop_ops and WHEN it shall be called?

    This won't work for a nullfs mount because the underyling vnodes are
    the vnodes for the underyling filesystem, NOT nullfs-specific vnodes.
    Thus those vnodes point to the underlying filesystem's ops and not
    nullfs's ops.

    If you want to try your hand at creating your own filesystem then I
    recommend starting with a self-contained memory filesystem like tmpfs.

					-Matt
					Matthew Dillon 
					<dillon@backplane.com>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic