2 * Copyright 2000, International Business Machines Corporation and others.
5 * This software has been released under the terms of the IBM Public
6 * License. For details, see the LICENSE file in the top-level source
7 * directory or online at http://www.openafs.org/dl/license10.html
10 /* physio.c - Physical I/O routines for the buffer package */
14 /************************************************************************/
16 #include <afsconfig.h>
17 #include <afs/param.h>
32 #include <afs/afs_assert.h>
36 #include <afs/afsint.h>
37 #include <afs/ihandle.h>
38 #include <afs/vnode.h>
39 #include <afs/volume.h>
40 #include "viced_prototypes.h"
47 afs_int32 lpErrno, lpCount;
49 /* returns 0 on success, errno on failure */
51 ReallyRead(DirHandle * file, int block, char *data)
58 fdP = IH_OPEN(file->dirh_handle);
62 ("ReallyRead(): open failed device %X inode %s errno %d\n",
63 file->dirh_handle->ih_dev, PrintInode(stmp,
68 rdlen = FDH_PREAD(fdP, data, PAGESIZE, ((afs_foff_t)block) * PAGESIZE);
69 if (rdlen != PAGESIZE) {
75 ("ReallyRead(): read failed device %X inode %s errno %d\n",
76 file->dirh_handle->ih_dev, PrintInode(stmp,
87 /* returns 0 on success, errno on failure */
89 ReallyWrite(DirHandle * file, int block, char *data)
95 fdP = IH_OPEN(file->dirh_handle);
98 ("ReallyWrite(): open failed device %X inode %s errno %d\n",
99 file->dirh_handle->ih_dev, PrintInode(stmp,
105 if ((count = FDH_PWRITE(fdP, data, PAGESIZE, ((afs_foff_t)block) * PAGESIZE)) != PAGESIZE) {
107 ("ReallyWrite(): write failed device %X inode %s errno %d\n",
108 file->dirh_handle->ih_dev, PrintInode(stmp,
113 FDH_REALLYCLOSE(fdP);
122 SetDirHandle(DirHandle * dir, Vnode * vnode)
124 Volume *vp = vnode->volumePtr;
126 IH_COPY(h, vnode->handle);
127 dir->dirh_ino = h->ih_ino;
128 dir->dirh_dev = h->ih_dev;
129 dir->dirh_vid = h->ih_vid;
130 dir->dirh_cacheCheck = vp->cacheCheck;
131 dir->dirh_unique = vnode->disk.uniquifier;
132 dir->dirh_vnode = vnode->vnodeNumber;
133 dir->dirh_handle = h;
137 FidZap(DirHandle * file)
139 IH_RELEASE(file->dirh_handle);
140 memset(file, 0, sizeof(DirHandle));
144 FidZero(DirHandle * file)
146 memset(file, 0, sizeof(DirHandle));
150 FidEq(DirHandle * afile, DirHandle * bfile)
152 if (afile->dirh_ino != bfile->dirh_ino)
154 if (afile->dirh_dev != bfile->dirh_dev)
156 if (afile->dirh_vid != bfile->dirh_vid)
158 if (afile->dirh_cacheCheck != bfile->dirh_cacheCheck)
160 if (afile->dirh_unique != bfile->dirh_unique)
162 if (afile->dirh_vnode != bfile->dirh_vnode)
169 FidVolEq(DirHandle * afile, afs_int32 vid)
171 if (afile->dirh_vid != vid)
177 FidCpy(DirHandle * tofile, DirHandle * fromfile)
180 IH_COPY(tofile->dirh_handle, fromfile->dirh_handle);