[Libsysio-commit] unification: libsysio/include inode.h
Brought to you by:
lward
From: Lee W. <lw...@us...> - 2007-04-12 17:04:06
|
Update of /cvsroot/libsysio/libsysio/include In directory sc8-pr-cvs6.sourceforge.net:/tmp/cvs-serv841 Modified Files: Tag: unification inode.h Log Message: Modified _PNOP_MKCALL macro to use the root pnode's attached inode -- Must *always* be present -- when the passed pnode has no attached inode. This should have the, now correct, effect of generating revalidations on extant nodes but applying the correct ops when the alias is not yet attached to an inode. Index: inode.h =================================================================== RCS file: /cvsroot/libsysio/libsysio/include/inode.h,v retrieving revision 1.27.2.4 retrieving revision 1.27.2.5 diff -u -w -b -B -p -r1.27.2.4 -r1.27.2.5 --- inode.h 11 Apr 2007 20:46:32 -0000 1.27.2.4 +++ inode.h 12 Apr 2007 17:04:02 -0000 1.27.2.5 @@ -281,93 +281,74 @@ struct pnode { /* * Path node meta-call. */ -#define PNOP_CALL(_f, ...) \ +#define INOP_CALL(_f, ...) \ ((*_f)(__VA_ARGS__)) +#define _INOP_FUNC(_ino, _fbase) \ + ((_ino)->i_ops.inop_##_fbase) #define PNOP_FUNC(_pno, _fbase) \ - ((_pno)->p_base->pb_ino->i_ops.inop_##_fbase) + _INOP_FUNC((_pno)->p_base->pb_ino, _fbase) +#define _PNOP_CALL(_pno, _fbase, ...) \ + INOP_CALL(PNOP_FUNC((_pno), _fbase), __VA_ARGS__) #define _PNOP_MKCALL(_pno, _fbase, ...) \ ((_pno)->p_base->pb_ino \ - ? PNOP_CALL(PNOP_FUNC(_pno, _fbase), __VA_ARGS__) \ - : -ESTALE) + ? _PNOP_CALL((_pno), _fbase, __VA_ARGS__) \ + : _PNOP_CALL((_pno)->p_mount->mnt_root, _fbase, __VA_ARGS__)) + /* * Operations */ #define PNOP_LOOKUP(_pno, _inop, _intnt, _path) \ - _PNOP_MKCALL((_pno)->p_parent, lookup, \ - (_pno), (_inop), (_intnt), (_path)) + _PNOP_MKCALL((_pno), lookup, (_pno), (_inop), (_intnt), (_path)) #define PNOP_GETATTR(_pno, _stbuf) \ - _PNOP_MKCALL((_pno), getattr, \ - (_pno), (_pno)->p_base->pb_ino, (_stbuf)) + _PNOP_CALL((_pno), getattr, (_pno), (_pno)->p_base->pb_ino, (_stbuf)) #define PNOP_SETATTR(_pno, _mask, _stbuf) \ - _PNOP_MKCALL((_pno), setattr, \ + _PNOP_CALL((_pno), setattr, \ (_pno), (_pno)->p_base->pb_ino, (_mask), (_stbuf)) #define PNOP_FILLDIRENTRIES(_pno, _posp, _buf, _nbytes) \ - _PNOP_MKCALL((_pno), filldirentries, \ + _PNOP_CALL((_pno), filldirentries, \ (_pno)->p_base->pb_ino, (_posp), (_buf), (_nbytes)) #define PNOP_MKDIR(_pno, _mode) \ - _PNOP_MKCALL((_pno)->p_parent, mkdir, \ - (_pno), (_mode)) + _PNOP_MKCALL((_pno), mkdir, (_pno), (_mode)) #define PNOP_RMDIR(_pno) \ - _PNOP_MKCALL((_pno), rmdir, \ - (_pno)) + _PNOP_MKCALL((_pno), rmdir, (_pno)) #define PNOP_SYMLINK(_pno, _data) \ - _PNOP_MKCALL((_pno)->p_parent, symlink, \ - (_pno), (_data)) + _PNOP_MKCALL((_pno), symlink, (_pno), (_data)) #define PNOP_READLINK(_pno, _buf, _bufsiz) \ - _PNOP_MKCALL((_pno), readlink, \ - (_pno), (_buf), (_bufsiz)) + _PNOP_CALL((_pno), readlink, (_pno), (_buf), (_bufsiz)) #define PNOP_OPEN(_pno, _flags, _mode) \ - _PNOP_MKCALL((((_flags) & O_CREAT) ? \ - (_pno)->p_parent : \ - (_pno)), open, \ - (_pno), (_flags), (_mode)) + _PNOP_MKCALL((_pno), open, (_pno), (_flags), (_mode)) #define PNOP_CLOSE(_pno) \ - _PNOP_MKCALL((_pno), close, \ - (_pno)->p_base->pb_ino) + _PNOP_CALL((_pno), close, (_pno)->p_base->pb_ino) #define PNOP_LINK(_old, _new) \ - _PNOP_MKCALL((_old)->p_parent, link, \ - (_old), (_new)) + _PNOP_CALL((_old), link, (_old), (_new)) #define PNOP_UNLINK(_pno) \ - _PNOP_MKCALL((_pno), unlink, \ - (_pno)) + _PNOP_CALL((_pno), unlink, (_pno)) #define PNOP_RENAME(_old, _new) \ - _PNOP_MKCALL((_old)->p_parent, rename, \ - (_old), (_new)) + _PNOP_CALL((_old), rename, (_old), (_new)) #define PNOP_READ(_pno, _ioctx) \ - _PNOP_MKCALL((_pno), read, \ - (_pno)->p_base->pb_ino, (_ioctx)) + _PNOP_CALL((_pno), read, (_pno)->p_base->pb_ino, (_ioctx)) #define PNOP_WRITE(_pno, _ioctx) \ - _PNOP_MKCALL((_pno), write, \ - (_pno)->p_base->pb_ino, (_ioctx)) + _PNOP_CALL((_pno), write, (_pno)->p_base->pb_ino, (_ioctx)) #define PNOP_POS(_pno, _off) \ - _PNOP_MKCALL((_pno), pos, \ - (_pno)->p_base->pb_ino, (_off)) + _PNOP_CALL((_pno), pos, (_pno)->p_base->pb_ino, (_off)) #define PNOP_IODONE(_pno, _ioctx) \ - _PNOP_MKCALL((_pno), iodone, \ - (_ioctx)) + _PNOP_CALL((_pno), iodone, (_ioctx)) #define PNOP_FCNTL(_pno, _cmd, _ap, _rtn) \ - _PNOP_MKCALL((_pno), fcntl, \ - (_pno)->p_base->pb_ino, (_cmd), (_ap), (_rtn)) + _PNOP_CALL((_pno), fcntl, (_pno)->p_base->pb_ino, (_cmd), (_ap), (_rtn)) #define PNOP_SYNC(_pno) \ - _PNOP_MKCALL((_pno), sync, \ - (_pno)->p_base->pb_ino) + _PNOP_CALL((_pno), sync, (_pno)->p_base->pb_ino) #define PNOP_DATASYNC(_pno) \ - _PNOP_MKCALL((_pno), datasync, \ - (_pno)->p_base->pb_ino) + _PNOP_CALL((_pno), datasync, (_pno)->p_base->pb_ino) #define PNOP_IOCTL(_pno, _request, _ap) \ - _PNOP_MKCALL((_pno), ioctl, \ - (_pno)->p_base->pb_ino, (_request), (_ap)) + _PNOP_CALL((_pno), ioctl, (_pno)->p_base->pb_ino, (_request), (_ap)) #define PNOP_MKNOD(_pno, _mode, _dev) \ - _PNOP_MKCALL((_pno)->p_parent, mknod, \ - (_pno), (_mode), (_dev)) + _PNOP_MKCALL((_pno), mknod, (_pno), (_mode), (_dev)) #ifdef _HAVE_STATVFS #define PNOP_STATVFS(_pno, _buf) \ - _PNOP_MKCALL((_pno), statvfs, \ - (_pno), (_pno)->p_base->pb_ino, (_buf)) + _PNOP_CALL((_pno), statvfs, (_pno), (_pno)->p_base->pb_ino, (_buf)) #endif #define PNOP_GONE(_pno) \ - _PNOP_MKCALL((_pno), gone, \ - (_pno)->p_base->pb_ino) + _PNOP_CALL((_pno), gone, (_pno)->p_base->pb_ino) /* * An intent record allows callers of namei and lookup to pass some information |