Lines Matching refs:file

238 ssize_t rw_verify_area(struct dfs_file *file, off_t *ppos, size_t count)  in rw_verify_area()  argument
266 off_t dfs_file_get_fpos(struct dfs_file *file) in dfs_file_get_fpos() argument
268 if (file) in dfs_file_get_fpos()
270 if (file->vnode->type == FT_REGULAR) in dfs_file_get_fpos()
272 rt_mutex_take(&file->pos_lock, RT_WAITING_FOREVER); in dfs_file_get_fpos()
274 return file->fpos; in dfs_file_get_fpos()
291 void dfs_file_set_fpos(struct dfs_file *file, off_t fpos) in dfs_file_set_fpos() argument
293 if (file) in dfs_file_set_fpos()
295 if (file->vnode->type != FT_REGULAR) in dfs_file_set_fpos()
297 rt_mutex_take(&file->pos_lock, RT_WAITING_FOREVER); in dfs_file_set_fpos()
299 file->fpos = fpos; in dfs_file_set_fpos()
300 rt_mutex_release(&file->pos_lock); in dfs_file_set_fpos()
312 void dfs_file_init(struct dfs_file *file) in dfs_file_init() argument
314 if (file) in dfs_file_init()
316 rt_memset(file, 0x00, sizeof(struct dfs_file)); in dfs_file_init()
317 file->magic = DFS_FD_MAGIC; in dfs_file_init()
318 rt_mutex_init(&file->pos_lock, "fpos", RT_IPC_FLAG_PRIO); in dfs_file_init()
319 rt_atomic_store(&(file->ref_count), 1); in dfs_file_init()
328 void dfs_file_deinit(struct dfs_file *file) in dfs_file_deinit() argument
330 if (file) in dfs_file_deinit()
332 rt_mutex_detach(&file->pos_lock); in dfs_file_deinit()
344 static void dfs_file_unref(struct dfs_file *file) in dfs_file_unref() argument
351 if (rt_atomic_load(&(file->ref_count)) == 1) in dfs_file_unref()
354 if (file->dentry) in dfs_file_unref()
356 … DLOG(msg, "dfs_file", "dentry", DLOG_MSG, "dfs_dentry_unref(dentry(%s))", file->dentry->pathname); in dfs_file_unref()
357 dfs_dentry_unref(file->dentry); in dfs_file_unref()
358 file->dentry = RT_NULL; in dfs_file_unref()
360 else if (file->vnode) in dfs_file_unref()
362 if (file->vnode->ref_count > 1) in dfs_file_unref()
364 rt_atomic_sub(&(file->vnode->ref_count), 1); in dfs_file_unref()
366 else if (file->vnode->ref_count == 1) in dfs_file_unref()
368 rt_free(file->vnode); in dfs_file_unref()
369 file->vnode = RT_NULL; in dfs_file_unref()
373 LOG_I("release a file: %p", file); in dfs_file_unref()
565 int dfs_file_open(struct dfs_file *file, const char *path, int oflags, mode_t mode) in dfs_file_open() argument
577 if (file && path) in dfs_file_open()
699 file->dentry = dentry; in dfs_file_open()
700 file->vnode = dentry->vnode; in dfs_file_open()
701 file->fops = dentry->mnt->fs_ops->default_fops; in dfs_file_open()
702 file->flags = oflags; in dfs_file_open()
709 if (!(file->vnode->mode & S_IWUSR)) in dfs_file_open()
717 if (!(file->vnode->mode & S_IRUSR)) in dfs_file_open()
725 if (!(file->vnode->mode & S_IXUSR)) in dfs_file_open()
732 if (permission && file->fops->open) in dfs_file_open()
736 if (dfs_is_mounted(file->vnode->mnt) == 0) in dfs_file_open()
739 ret = file->fops->open(file); in dfs_file_open()
751 dfs_file_unref(file); in dfs_file_open()
756 if ((S_ISCHR(file->vnode->mode)) || (S_ISBLK(file->vnode->mode))) in dfs_file_open()
758 file->fops = file->vnode->fops; in dfs_file_open()
765 dfs_file_unref(file); in dfs_file_open()
780 if (!(fflags & DFS_F_FWRITE) || file->vnode->type == FT_DIRECTORY) in dfs_file_open()
788 if (file->fops->truncate) in dfs_file_open()
792 if (dfs_is_mounted(file->vnode->mnt) == 0) in dfs_file_open()
795 if (file->vnode->aspace) in dfs_file_open()
797 dfs_aspace_clean(file->vnode->aspace); in dfs_file_open()
800 ret = file->fops->truncate(file, 0); in dfs_file_open()
811 dfs_file_unref(file); in dfs_file_open()
814 file->flags &= ~O_TRUNC; in dfs_file_open()
840 int dfs_file_close(struct dfs_file *file) in dfs_file_close() argument
844 if (file) in dfs_file_close()
848 rt_atomic_t ref_count = rt_atomic_load(&(file->ref_count)); in dfs_file_close()
850 if (ref_count == 1 && file->fops && file->fops->close) in dfs_file_close()
852 … DLOG(msg, "dfs_file", file->dentry->mnt->fs_ops->name, DLOG_MSG, "fops->close(file)"); in dfs_file_close()
854 if (file->vnode->aspace) in dfs_file_close()
856 dfs_aspace_flush(file->vnode->aspace); in dfs_file_close()
859 ret = file->fops->close(file); in dfs_file_close()
864 dfs_file_unref(file); in dfs_file_close()
868 LOG_W("close file:%s failed on low level file system", file->dentry->pathname); in dfs_file_close()
874 dfs_file_unref(file); in dfs_file_close()
898 ssize_t dfs_file_pread(struct dfs_file *file, void *buf, size_t len, off_t offset) in dfs_file_pread() argument
902 if (file) in dfs_file_pread()
905 if (!(dfs_fflags(file->flags) & DFS_F_FREAD)) in dfs_file_pread()
909 else if (!file->fops || !file->fops->read) in dfs_file_pread()
913 else if (file->vnode && file->vnode->type != FT_DIRECTORY) in dfs_file_pread()
917 ret = rw_verify_area(file, &pos, len); in dfs_file_pread()
922 if (dfs_is_mounted(file->vnode->mnt) == 0) in dfs_file_pread()
925 if (file->vnode->aspace && !(file->flags & O_DIRECT)) in dfs_file_pread()
927 ret = dfs_aspace_read(file, buf, len, &pos); in dfs_file_pread()
932 ret = file->fops->read(file, buf, len, &pos); in dfs_file_pread()
959 ssize_t dfs_file_read(struct dfs_file *file, void *buf, size_t len) in dfs_file_read() argument
963 if (file) in dfs_file_read()
966 if (!(dfs_fflags(file->flags) & DFS_F_FREAD)) in dfs_file_read()
970 else if (!file->fops || !file->fops->read) in dfs_file_read()
974 else if (file->vnode && file->vnode->type != FT_DIRECTORY) in dfs_file_read()
977 off_t pos = dfs_file_get_fpos(file); in dfs_file_read()
979 ret = rw_verify_area(file, &pos, len); in dfs_file_read()
984 if (dfs_is_mounted(file->vnode->mnt) == 0) in dfs_file_read()
987 if (file->vnode->aspace && !(file->flags & O_DIRECT)) in dfs_file_read()
989 ret = dfs_aspace_read(file, buf, len, &pos); in dfs_file_read()
994 ret = file->fops->read(file, buf, len, &pos); in dfs_file_read()
1003 dfs_file_set_fpos(file, pos); in dfs_file_read()
1026 ssize_t dfs_file_pwrite(struct dfs_file *file, const void *buf, size_t len, off_t offset) in dfs_file_pwrite() argument
1030 if (file) in dfs_file_pwrite()
1032 if (!(dfs_fflags(file->flags) & DFS_F_FWRITE)) in dfs_file_pwrite()
1037 else if (!file->fops || !file->fops->write) in dfs_file_pwrite()
1042 else if (file->vnode && file->vnode->type != FT_DIRECTORY) in dfs_file_pwrite()
1046 ret = rw_verify_area(file, &pos, len); in dfs_file_pwrite()
1050 DLOG(msg, "dfs_file", file->dentry->mnt->fs_ops->name, DLOG_MSG, in dfs_file_pwrite()
1053 if (dfs_is_mounted(file->vnode->mnt) == 0) in dfs_file_pwrite()
1056 if (file->vnode->aspace && !(file->flags & O_DIRECT)) in dfs_file_pwrite()
1058 ret = dfs_aspace_write(file, buf, len, &pos); in dfs_file_pwrite()
1063 ret = file->fops->write(file, buf, len, &pos); in dfs_file_pwrite()
1066 if (file->flags & O_SYNC) in dfs_file_pwrite()
1068 file->fops->flush(file); in dfs_file_pwrite()
1099 ssize_t dfs_file_write(struct dfs_file *file, const void *buf, size_t len) in dfs_file_write() argument
1103 if (file) in dfs_file_write()
1105 if (!(dfs_fflags(file->flags) & DFS_F_FWRITE)) in dfs_file_write()
1110 else if (!file->fops || !file->fops->write) in dfs_file_write()
1115 else if (file->vnode && file->vnode->type != FT_DIRECTORY) in dfs_file_write()
1119 if (!(file->flags & O_APPEND)) in dfs_file_write()
1122 pos = dfs_file_get_fpos(file); in dfs_file_write()
1126 pos = file->vnode->size; in dfs_file_write()
1129 ret = rw_verify_area(file, &pos, len); in dfs_file_write()
1133 DLOG(msg, "dfs_file", file->dentry->mnt->fs_ops->name, DLOG_MSG, in dfs_file_write()
1136 if (dfs_is_mounted(file->vnode->mnt) == 0) in dfs_file_write()
1139 if (file->vnode->aspace && !(file->flags & O_DIRECT)) in dfs_file_write()
1141 ret = dfs_aspace_write(file, buf, len, &pos); in dfs_file_write()
1146 ret = file->fops->write(file, buf, len, &pos); in dfs_file_write()
1149 if (file->flags & O_SYNC) in dfs_file_write()
1151 file->fops->flush(file); in dfs_file_write()
1159 if (!(file->flags & O_APPEND)) in dfs_file_write()
1162 dfs_file_set_fpos(file, pos); in dfs_file_write()
1185 off_t generic_dfs_lseek(struct dfs_file *file, off_t offset, int whence) in generic_dfs_lseek() argument
1192 foffset = file->fpos + offset; in generic_dfs_lseek()
1194 foffset = file->vnode->size + offset; in generic_dfs_lseek()
1214 off_t dfs_file_lseek(struct dfs_file *file, off_t offset, int wherece) in dfs_file_lseek() argument
1218 if (file && file->fops->lseek) in dfs_file_lseek()
1220 if (dfs_is_mounted(file->vnode->mnt) == 0) in dfs_file_lseek()
1223 off_t pos = dfs_file_get_fpos(file); in dfs_file_lseek()
1224 retval = file->fops->lseek(file, offset, wherece); in dfs_file_lseek()
1230 dfs_file_set_fpos(file, pos); in dfs_file_lseek()
1387 int dfs_file_fstat(struct dfs_file *file, struct stat *buf) in dfs_file_fstat() argument
1391 if (file) in dfs_file_fstat()
1393 if (file->fops && file->fops->ioctl) in dfs_file_fstat()
1495 int dfs_file_ioctl(struct dfs_file *file, int cmd, void *args) in dfs_file_ioctl() argument
1499 if (file) in dfs_file_ioctl()
1501 if (file->fops && file->fops->ioctl) in dfs_file_ioctl()
1503 if (dfs_is_mounted(file->vnode->mnt) == 0) in dfs_file_ioctl()
1505 ret = file->fops->ioctl(file, cmd, args); in dfs_file_ioctl()
1556 struct dfs_file *file; in dfs_file_fcntl() local
1558 file = fd_get(fd); in dfs_file_fcntl()
1559 if (file) in dfs_file_fcntl()
1567 ret = file->mode; in dfs_file_fcntl()
1570 file->mode = arg; in dfs_file_fcntl()
1573 ret = file->flags; in dfs_file_fcntl()
1591 file->flags &= ~mask; in dfs_file_fcntl()
1592 file->flags |= flags; in dfs_file_fcntl()
1636 int dfs_file_fsync(struct dfs_file *file) in dfs_file_fsync() argument
1640 if (file) in dfs_file_fsync()
1642 if (file->fops->flush) in dfs_file_fsync()
1644 if (dfs_is_mounted(file->vnode->mnt) == 0) in dfs_file_fsync()
1647 if (file->vnode->aspace) in dfs_file_fsync()
1649 dfs_aspace_flush(file->vnode->aspace); in dfs_file_fsync()
1652 ret = file->fops->flush(file); in dfs_file_fsync()
2211 int dfs_file_ftruncate(struct dfs_file *file, off_t length) in dfs_file_ftruncate() argument
2215 if (file) in dfs_file_ftruncate()
2217 if (file->fops->truncate) in dfs_file_ftruncate()
2219 if (dfs_is_mounted(file->vnode->mnt) == 0) in dfs_file_ftruncate()
2222 if (file->vnode->aspace) in dfs_file_ftruncate()
2224 dfs_aspace_clean(file->vnode->aspace); in dfs_file_ftruncate()
2227 ret = file->fops->truncate(file, length); in dfs_file_ftruncate()
2264 int dfs_file_flush(struct dfs_file *file) in dfs_file_flush() argument
2268 if (file) in dfs_file_flush()
2270 if (file->fops->flush) in dfs_file_flush()
2272 if (dfs_is_mounted(file->vnode->mnt) == 0) in dfs_file_flush()
2275 if (file->vnode->aspace) in dfs_file_flush()
2277 dfs_aspace_flush(file->vnode->aspace); in dfs_file_flush()
2280 ret = file->fops->flush(file); in dfs_file_flush()
2316 int dfs_file_getdents(struct dfs_file *file, struct dirent *dirp, size_t nbytes) in dfs_file_getdents() argument
2320 if (file) in dfs_file_getdents()
2322 if (file->vnode && S_ISDIR(file->vnode->mode)) in dfs_file_getdents()
2324 if (file->fops && file->fops->getdents) in dfs_file_getdents()
2326 … DLOG(msg, "dfs_file", file->dentry->mnt->fs_ops->name, DLOG_MSG, "fops->getdents()"); in dfs_file_getdents()
2328 if (dfs_is_mounted(file->vnode->mnt) == 0) in dfs_file_getdents()
2330 ret = file->fops->getdents(file, dirp, nbytes); in dfs_file_getdents()
2434 struct dfs_file file; in dfs_file_access() local
2436 dfs_file_init(&file); in dfs_file_access()
2438 if (dfs_file_open(&file, path, O_RDONLY, mode) >= 0) in dfs_file_access()
2441 dfs_file_close(&file); in dfs_file_access()
2448 dfs_file_deinit(&file); in dfs_file_access()
2472 int dfs_file_mmap2(struct dfs_file *file, struct dfs_mmap2_args *mmap2) in dfs_file_mmap2() argument
2476 if (file && mmap2) in dfs_file_mmap2()
2478 if (file->vnode->type == FT_REGULAR) in dfs_file_mmap2()
2480 ret = dfs_file_mmap(file, mmap2); in dfs_file_mmap2()
2487 else if (file->vnode->type != FT_DEVICE || !file->vnode->fops->ioctl) in dfs_file_mmap2()
2491 else if (file->vnode->type == FT_DEVICE && file->vnode->fops->ioctl) in dfs_file_mmap2()
2493 if (dfs_is_mounted(file->vnode->mnt) == 0) in dfs_file_mmap2()
2495 ret = file->vnode->fops->ioctl(file, RT_FIOMMAP2, mmap2); in dfs_file_mmap2()
2543 struct dfs_file file; in ls() local
2567 dfs_file_init(&file); in ls()
2571 if (dfs_file_open(&file, path, O_DIRECTORY, 0) >= 0) in ls()
2583 length = dfs_file_getdents(&file, &dirent, sizeof(struct dirent)); in ls()
2690 dfs_file_close(&file); in ls()
2697 dfs_file_deinit(&file); in ls()
2715 struct dfs_file file; in cat() local
2723 dfs_file_init(&file); in cat()
2726 if (dfs_file_open(&file, filename, O_RDONLY, 0) < 0) in cat()
2729 dfs_file_deinit(&file); in cat()
2737 length = dfs_file_read(&file, (void *)buffer, sizeof(buffer) - 1); in cat()
2747 dfs_file_close(&file); in cat()
2748 dfs_file_deinit(&file); in cat()
2840 struct dfs_file file; in copydir() local
2842 dfs_file_init(&file); in copydir()
2844 if (dfs_file_open(&file, src, O_DIRECTORY, 0) < 0) in copydir()
2847 dfs_file_deinit(&file); in copydir()
2855 length = dfs_file_getdents(&file, &dirent, sizeof(struct dirent)); in copydir()
2899 dfs_file_close(&file); in copydir()
2900 dfs_file_deinit(&file); in copydir()
3030 FINSH_FUNCTION_EXPORT(copy, copy file or dir)