Lines Matching refs:vnode
73 int dfs_vnode_init(struct dfs_vnode *vnode, int type, const struct dfs_file_ops *fops) in dfs_vnode_init() argument
75 if (vnode) in dfs_vnode_init()
77 rt_memset(vnode, 0, sizeof(struct dfs_vnode)); in dfs_vnode_init()
78 vnode->type = type; in dfs_vnode_init()
79 vnode->fops = fops; in dfs_vnode_init()
81 rt_list_init(&(vnode->list)); in dfs_vnode_init()
82 vnode->ref_count = 1; in dfs_vnode_init()
119 struct dfs_vnode *vnode = NULL; in dfs_vnode_find() local
132 vnode = rt_container_of(hh, struct dfs_vnode, list); in dfs_vnode_find()
133 if (rt_strcmp(path, vnode->fullpath) == 0) in dfs_vnode_find()
136 return vnode; in dfs_vnode_find()
158 struct dfs_vnode *vnode = NULL; in dfs_file_is_open() local
164 vnode = dfs_vnode_find(fullpath, NULL); in dfs_file_is_open()
165 if (vnode) in dfs_file_is_open()
190 struct dfs_vnode *vnode = NULL; in dfs_file_open() local
208 vnode = dfs_vnode_find(fullpath, &hash_head); in dfs_file_open()
209 if (vnode) in dfs_file_open()
211 vnode->ref_count++; in dfs_file_open()
213 fd->vnode = vnode; in dfs_file_open()
228 vnode = rt_calloc(1, sizeof(struct dfs_vnode)); in dfs_file_open()
229 if (!vnode) in dfs_file_open()
235 vnode->ref_count = 1; in dfs_file_open()
238 vnode->fs = fs; /* set file system */ in dfs_file_open()
239 vnode->fops = fs->ops->fops; /* set file ops */ in dfs_file_open()
242 vnode->type = FT_REGULAR; in dfs_file_open()
243 vnode->flags = 0; in dfs_file_open()
248 vnode->path = rt_strdup("/"); in dfs_file_open()
250 vnode->path = rt_strdup(dfs_subdir(fs->path, fullpath)); in dfs_file_open()
251 LOG_D("Actual file path: %s", vnode->path); in dfs_file_open()
255 vnode->path = fullpath; in dfs_file_open()
257 vnode->fullpath = fullpath; in dfs_file_open()
260 if (vnode->fops->open == NULL) in dfs_file_open()
264 if (vnode->path != vnode->fullpath) in dfs_file_open()
266 rt_free(vnode->fullpath); in dfs_file_open()
268 rt_free(vnode->path); in dfs_file_open()
269 rt_free(vnode); in dfs_file_open()
275 fd->vnode = vnode; in dfs_file_open()
278 rt_list_insert_after(hash_head, &vnode->list); in dfs_file_open()
283 if ((result = vnode->fops->open(fd)) < 0) in dfs_file_open()
285 vnode->ref_count--; in dfs_file_open()
286 if (vnode->ref_count == 0) in dfs_file_open()
289 rt_list_remove(&vnode->list); in dfs_file_open()
291 if (vnode->path != vnode->fullpath) in dfs_file_open()
293 rt_free(vnode->fullpath); in dfs_file_open()
295 rt_free(vnode->path); in dfs_file_open()
296 fd->vnode = NULL; in dfs_file_open()
297 rt_free(vnode); in dfs_file_open()
309 fd->vnode->type = FT_DIRECTORY; in dfs_file_open()
327 struct dfs_vnode *vnode = NULL; in dfs_file_close() local
338 vnode = fd->vnode; in dfs_file_close()
340 if (vnode->ref_count <= 0) in dfs_file_close()
346 if (vnode->fops->close != NULL) in dfs_file_close()
348 result = vnode->fops->close(fd); in dfs_file_close()
351 if (vnode->ref_count == 1) in dfs_file_close()
354 rt_list_remove(&vnode->list); in dfs_file_close()
355 fd->vnode = NULL; in dfs_file_close()
357 if (vnode->path != vnode->fullpath) in dfs_file_close()
359 rt_free(vnode->fullpath); in dfs_file_close()
361 rt_free(vnode->path); in dfs_file_close()
362 rt_free(vnode); in dfs_file_close()
388 if (fd->vnode->type == FT_REGULAR || fd->vnode->type == FT_DEVICE) in dfs_file_ioctl()
407 if (fd->vnode->fops->ioctl != NULL) in dfs_file_ioctl()
409 return fd->vnode->fops->ioctl(fd, cmd, args); in dfs_file_ioctl()
434 if (fd->vnode->fops->read == NULL) in dfs_file_read()
439 if ((result = fd->vnode->fops->read(fd, buf, len)) < 0) in dfs_file_read()
464 if (fd->vnode->type != FT_DIRECTORY) in dfs_file_getdents()
469 if (fd->vnode->fops->getdents != NULL) in dfs_file_getdents()
471 return fd->vnode->fops->getdents(fd, dirp, nbytes); in dfs_file_getdents()
546 if (fd->vnode->fops->write == NULL) in dfs_file_write()
551 return fd->vnode->fops->write(fd, buf, len); in dfs_file_write()
566 if (fd->vnode->fops->flush == NULL) in dfs_file_flush()
569 return fd->vnode->fops->flush(fd); in dfs_file_flush()
587 if (fd->vnode->fops->lseek == NULL) in dfs_file_lseek()
590 result = fd->vnode->fops->lseek(fd, offset); in dfs_file_lseek()
741 if (fd == NULL || fd->vnode->type != FT_REGULAR || length < 0) in dfs_file_ftruncate()
744 if (fd->vnode->fops->ioctl == NULL) in dfs_file_ftruncate()
747 result = fd->vnode->fops->ioctl(fd, RT_FIOFTRUNCATE, (void*)&length); in dfs_file_ftruncate()
751 fd->vnode->size = length; in dfs_file_ftruncate()
763 if (fd->vnode->type != FT_DEVICE || !fd->vnode->fops->ioctl) in dfs_file_mmap2()
767 else if (fd->vnode->type == FT_DEVICE && fd->vnode->fops->ioctl) in dfs_file_mmap2()
769 ret = fd->vnode->fops->ioctl(fd, RT_FIOMMAP2, mmap2); in dfs_file_mmap2()