void * osi_UFSOpen(afs_dcache_id_t *ainode) { struct osi_file *afile = NULL; extern int cacheDiskType; AFS_STATCNT(osi_UFSOpen); if (cacheDiskType != AFS_FCACHE_TYPE_UFS) { osi_Panic("UFSOpen called for non-UFS cache\n"); } if (!afs_osicred_initialized) { /* valid for alpha_osf, SunOS, Ultrix */ memset(&afs_osi_cred, 0, sizeof(afs_ucred_t)); crhold(&afs_osi_cred); /* don't let it evaporate, since it is static */ afs_osicred_initialized = 1; } AFS_GUNLOCK(); afile = kmalloc(sizeof(struct osi_file), GFP_NOFS); if (!afile) { osi_Panic("osi_UFSOpen: Failed to allocate %d bytes for osi_file.\n", (int)sizeof(struct osi_file)); } memset(afile, 0, sizeof(struct osi_file)); afile->filp = afs_linux_raw_open(ainode); afile->size = i_size_read(FILE_INODE(afile->filp)); AFS_GLOCK(); afile->offset = 0; afile->proc = (int (*)())0; return (void *)afile; }
int osi_UFSClose(struct osi_file *afile) { AFS_STATCNT(osi_Close); if (afile) { if (FILE_INODE(&afile->file)) { struct file *filp = &afile->file; if (filp->f_op && filp->f_op->release) filp->f_op->release(FILE_INODE(filp), filp); iput(FILE_INODE(filp)); } } osi_FreeLargeSpace(afile); return 0; }
void * osi_UFSOpen(afs_int32 ainode) { register struct osi_file *afile = NULL; extern int cacheDiskType; afs_int32 code = 0; struct inode *tip = NULL; struct file *filp = NULL; AFS_STATCNT(osi_UFSOpen); if (cacheDiskType != AFS_FCACHE_TYPE_UFS) { osi_Panic("UFSOpen called for non-UFS cache\n"); } if (!afs_osicred_initialized) { /* valid for alpha_osf, SunOS, Ultrix */ memset((char *)&afs_osi_cred, 0, sizeof(struct AFS_UCRED)); crhold(&afs_osi_cred); /* don't let it evaporate, since it is static */ afs_osicred_initialized = 1; } afile = (struct osi_file *)osi_AllocLargeSpace(sizeof(struct osi_file)); AFS_GUNLOCK(); if (!afile) { osi_Panic("osi_UFSOpen: Failed to allocate %d bytes for osi_file.\n", sizeof(struct osi_file)); } memset(afile, 0, sizeof(struct osi_file)); filp = &afile->file; filp->f_dentry = &afile->dentry; tip = iget(afs_cacheSBp, (u_long) ainode); if (!tip) osi_Panic("Can't get inode %d\n", ainode); FILE_INODE(filp) = tip; tip->i_flags |= MS_NOATIME; /* Disable updating access times. */ filp->f_flags = O_RDWR; #if defined(AFS_LINUX24_ENV) filp->f_mode = FMODE_READ|FMODE_WRITE; filp->f_op = fops_get(tip->i_fop); #else filp->f_op = tip->i_op->default_file_ops; #endif if (filp->f_op && filp->f_op->open) code = filp->f_op->open(tip, filp); if (code) osi_Panic("Can't open inode %d\n", ainode); afile->size = i_size_read(tip); AFS_GLOCK(); afile->offset = 0; afile->proc = (int (*)())0; afile->inum = ainode; /* for hint validity checking */ return (void *)afile; }
static long afs_unlocked_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { return afs_ioctl(FILE_INODE(file), file, cmd, arg); }
osi_UFSOpen(afs_int32 ainode) #endif { register struct osi_file *afile = NULL; extern int cacheDiskType; struct inode *tip = NULL; struct dentry *dp = NULL; struct file *filp = NULL; #if !defined(HAVE_IGET) || defined(LINUX_USE_FH) struct fid fid; #endif AFS_STATCNT(osi_UFSOpen); if (cacheDiskType != AFS_FCACHE_TYPE_UFS) { osi_Panic("UFSOpen called for non-UFS cache\n"); } if (!afs_osicred_initialized) { /* valid for alpha_osf, SunOS, Ultrix */ memset((char *)&afs_osi_cred, 0, sizeof(struct AFS_UCRED)); crhold(&afs_osi_cred); /* don't let it evaporate, since it is static */ afs_osicred_initialized = 1; } afile = (struct osi_file *)osi_AllocLargeSpace(sizeof(struct osi_file)); AFS_GUNLOCK(); if (!afile) { osi_Panic("osi_UFSOpen: Failed to allocate %d bytes for osi_file.\n", sizeof(struct osi_file)); } memset(afile, 0, sizeof(struct osi_file)); #if defined(HAVE_IGET) tip = iget(afs_cacheSBp, (u_long) ainode); if (!tip) osi_Panic("Can't get inode %d\n", ainode); dp = d_alloc_anon(tip); #else #if defined(LINUX_USE_FH) dp = afs_cacheSBp->s_export_op->fh_to_dentry(afs_cacheSBp, fh, sizeof(struct fid), fh_type); #else fid.i32.ino = ainode; fid.i32.gen = 0; dp = afs_cacheSBp->s_export_op->fh_to_dentry(afs_cacheSBp, &fid, sizeof(fid), FILEID_INO32_GEN); #endif if (!dp) osi_Panic("Can't get dentry\n"); tip = dp->d_inode; #endif tip->i_flags |= MS_NOATIME; /* Disable updating access times. */ #if defined(STRUCT_TASK_HAS_CRED) filp = dentry_open(dp, mntget(afs_cacheMnt), O_RDWR, current_cred()); #else filp = dentry_open(dp, mntget(afs_cacheMnt), O_RDWR); #endif if (IS_ERR(filp)) #if defined(LINUX_USE_FH) osi_Panic("Can't open file\n"); #else osi_Panic("Can't open inode %d\n", ainode); #endif afile->filp = filp; afile->size = i_size_read(FILE_INODE(filp)); AFS_GLOCK(); afile->offset = 0; afile->proc = (int (*)())0; #if defined(LINUX_USE_FH) afile->inum = tip->i_ino; /* for hint validity checking */ #else afile->inum = ainode; /* for hint validity checking */ #endif return (void *)afile; }