Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 3 Jul 2007 19:23:07 +0000
From:      "Eren Erdemli" <erenerdemli@gmail.com>
To:        "=?ISO-8859-1?Q?Dag-Erling_Sm=F8rgrav?=" <des@des.no>
Cc:        freebsd-current@freebsd.org
Subject:   Re: getcwd in kernel space
Message-ID:  <cd4105970707031223i5beac49ye8bd707a4e7526f4@mail.gmail.com>
In-Reply-To: <86sl86bwa5.fsf@dwp.des.no>
References:  <cd4105970706300902m5f7e0432y312335b0db5138bd@mail.gmail.com> <86sl86bwa5.fsf@dwp.des.no>

next in thread | previous in thread | raw e-mail | index | archive | help
Hello

I am not actually replacing the mkdir instead I am trying to get the change=
s
happened in directories
such as FAM(Fiile Alteration Monitor), so you are right about the  of the
parent directory in which case it will be
cwd.

I have tried vn_fullpath() however it is not as reliable as it needs to be
since once an rmdir command executes
on the folder vn_fullpath() returns ENOTDIR.

So will a namei lookup get me the path name of the parent.  Basically I wil=
l
need to perform this in
open, link unlink also.  My understanding is that namei lookup will return =
a
vnode am I wrong ???

Thanks


On 7/2/07, Dag-Erling Sm=F8rgrav <des@des.no> wrote:
>
> "Eren Erdemli" <erenerdemli@gmail.com> writes:
> > I am new to freebsd programing and I am trying to get the current
> > working directory of the curthread.
>
> curthread->td_proc->p_fd->fd_cdir is a pointer to the directory's vnode.
>
> > I have hook on to the sys calls and redirected the mkdir
> >
> > my_mkdir(struct thread *p, (void*) uap)
> > {
> >   mkdir_args =3D .....................
> >   ........
> >  getCWD()???????????
> > }
> >
> > the given path in the args is relative to the current path if not
> supplied
> > fully.  So who would I get the path of file.
>
> Are you sure you need the path?  There is no unique mapping from vnode
> to path in FreeBSD (or in any Unix derivative for that matter); multiple
> paths can lead to the same vnode.  The kernel operates on vnodes, not
> paths (except for namei, which translates paths to vnodes) and the path
> to a vnode may change after a reference to the vnode is acquired (there
> is no prohibition against deleting, renaming or moving an open file or
> directory).  Path components are cached in the namei cache, so it may
> sometimes be possible to reconstruct the path by which a particular
> vnode was most recently reached (vn_fullpath() does this), but the
> information may also have been displaced from the cache since the last
> lookup.
>
> If you just need a reference to the specified path or its parent
> directory, a namei lookup of the path will do all the work for you.  See
> for instance kern_mkdir() in vfs_syscalls.c (which I assume you are
> already looking at, since you are writing a replacement for the mkdir(2)
> syscall)
>
> DES
> --
> Dag-Erling Sm=F8rgrav - des@des.no
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?cd4105970707031223i5beac49ye8bd707a4e7526f4>