Hello, hackers :)
I am implementing a custom filesystem, based on nullfs, its purpose is
tracking changes made to the fs,
and the idea is to do that by changing the semantics of (largely unused
anyway) atime attribute of the underlying UFS
(which is mounted -o noatime for that reason. and I don't really care
about filesystems with no atime attribute. extreme portability is not a
requirement).
Specifically, I want atime updated on directories from where the change
has taken place all the way up to the mount point of my filesystem.
This way, a tree of changed directories can be built at any given time
and synchronised to mirrors.
Now, I have a couple of questions about taking proper actions while
doing my job inside the kernel.
1) I understand that it is generally impossible to find a parent
directory for VREG or VLNK vnode (I don't care about pipes or sockets),
as it may have many links.
To overcome this, I store a pointer to a parent vnode as a member of
my struct mirrfs_node upon successful lookup or creation of VREG vnode
and create an additional
refernce to the parent vnode. The refernce to parent is released when
VREG vnode becomes inactive.
The question is, what might be the implications of this? Could it be
that I am doing something terribly wrong?
2) Each time I need to propagate a change, I walk my way up the
directories starting at the directory where the change has occured
by repeatedly calling VOP_LOOKUP with a hand-crafted struct
componentname, where cnp.cn_nameptr is ".."
Same question: is it the right thing to do? could this get me in
trouble?
3) When updating directories while walking up, I might need root
privileges which my curthread might not have.
It is undesirable and might be impossible to have permissions needed
for setattr to succeed for every curthread.
So, I know what I am doing and I need root for that. The question
is, what is the right way to get the needed struct ucred?
I thought about crcopy'ing curthread->td_ucred and then
change_[er]uid on it. Is that ok? Are there any implications?
Thanks in advance...
--
Deomid Ryabkov aka Rojer
[EMAIL PROTECTED]
[EMAIL PROTECTED]
ICQ: 8025844
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"