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>
21 #ifdef HAVE_SYS_FILE_H
26 #include <afs/afs_assert.h>
29 #include <afs/afsint.h>
30 #include <afs/ihandle.h>
31 #include <afs/vnode.h>
32 #include <afs/volume.h>
33 #include "viced_prototypes.h"
40 afs_int32 lpErrno, lpCount;
42 /* returns 0 on success, errno on failure */
44 ReallyRead(DirHandle * file, int block, char *data)
51 fdP = IH_OPEN(file->dirh_handle);
55 ("ReallyRead(): open failed device %X inode %s errno %d\n",
56 file->dirh_handle->ih_dev, PrintInode(stmp,
61 rdlen = FDH_PREAD(fdP, data, PAGESIZE, ((afs_foff_t)block) * PAGESIZE);
62 if (rdlen != PAGESIZE) {
68 ("ReallyRead(): read failed device %X inode %s errno %d\n",
69 file->dirh_handle->ih_dev, PrintInode(stmp,
80 /* returns 0 on success, errno on failure */
82 ReallyWrite(DirHandle * file, int block, char *data)
88 fdP = IH_OPEN(file->dirh_handle);
91 ("ReallyWrite(): open failed device %X inode %s errno %d\n",
92 file->dirh_handle->ih_dev, PrintInode(stmp,
98 if ((count = FDH_PWRITE(fdP, data, PAGESIZE, ((afs_foff_t)block) * PAGESIZE)) != PAGESIZE) {
100 ("ReallyWrite(): write failed device %X inode %s errno %d\n",
101 file->dirh_handle->ih_dev, PrintInode(stmp,
106 FDH_REALLYCLOSE(fdP);
115 SetDirHandle(DirHandle * dir, Vnode * vnode)
117 Volume *vp = vnode->volumePtr;
119 IH_COPY(h, vnode->handle);
120 dir->dirh_ino = h->ih_ino;
121 dir->dirh_dev = h->ih_dev;
122 dir->dirh_vid = h->ih_vid;
123 dir->dirh_cacheCheck = vp->cacheCheck;
124 dir->dirh_unique = vnode->disk.uniquifier;
125 dir->dirh_vnode = vnode->vnodeNumber;
126 dir->dirh_handle = h;
130 FidZap(DirHandle * file)
132 IH_RELEASE(file->dirh_handle);
133 memset(file, 0, sizeof(DirHandle));
137 FidZero(DirHandle * file)
139 memset(file, 0, sizeof(DirHandle));
143 FidEq(DirHandle * afile, DirHandle * bfile)
145 if (afile->dirh_ino != bfile->dirh_ino)
147 if (afile->dirh_dev != bfile->dirh_dev)
149 if (afile->dirh_vid != bfile->dirh_vid)
151 if (afile->dirh_cacheCheck != bfile->dirh_cacheCheck)
153 if (afile->dirh_unique != bfile->dirh_unique)
155 if (afile->dirh_vnode != bfile->dirh_vnode)
162 FidVolEq(DirHandle * afile, afs_int32 vid)
164 if (afile->dirh_vid != vid)
170 FidCpy(DirHandle * tofile, DirHandle * fromfile)
173 IH_COPY(tofile->dirh_handle, fromfile->dirh_handle);