• Home
  • Raw
  • Download

Lines Matching refs:file

35 #define BMAP_BUFFER (file->buf + fs->blocksize)
41 ext2_file_t file; in ext2fs_file_open2() local
52 retval = ext2fs_get_mem(sizeof(struct ext2_file), &file); in ext2fs_file_open2()
56 memset(file, 0, sizeof(struct ext2_file)); in ext2fs_file_open2()
57 file->magic = EXT2_ET_MAGIC_EXT2_FILE; in ext2fs_file_open2()
58 file->fs = fs; in ext2fs_file_open2()
59 file->ino = ino; in ext2fs_file_open2()
60 file->flags = flags & EXT2_FILE_MASK; in ext2fs_file_open2()
63 memcpy(&file->inode, inode, sizeof(struct ext2_inode)); in ext2fs_file_open2()
65 retval = ext2fs_read_inode(fs, ino, &file->inode); in ext2fs_file_open2()
70 retval = ext2fs_get_array(3, fs->blocksize, &file->buf); in ext2fs_file_open2()
74 *ret = file; in ext2fs_file_open2()
78 if (file->buf) in ext2fs_file_open2()
79 ext2fs_free_mem(&file->buf); in ext2fs_file_open2()
80 ext2fs_free_mem(&file); in ext2fs_file_open2()
93 ext2_filsys ext2fs_file_get_fs(ext2_file_t file) in ext2fs_file_get_fs() argument
95 if (file->magic != EXT2_ET_MAGIC_EXT2_FILE) in ext2fs_file_get_fs()
97 return file->fs; in ext2fs_file_get_fs()
103 struct ext2_inode *ext2fs_file_get_inode(ext2_file_t file) in ext2fs_file_get_inode() argument
105 if (file->magic != EXT2_ET_MAGIC_EXT2_FILE) in ext2fs_file_get_inode()
107 return &file->inode; in ext2fs_file_get_inode()
111 ext2_ino_t ext2fs_file_get_inode_num(ext2_file_t file) in ext2fs_file_get_inode_num() argument
113 if (file->magic != EXT2_ET_MAGIC_EXT2_FILE) in ext2fs_file_get_inode_num()
115 return file->ino; in ext2fs_file_get_inode_num()
122 errcode_t ext2fs_file_flush(ext2_file_t file) in ext2fs_file_flush() argument
129 EXT2_CHECK_MAGIC(file, EXT2_ET_MAGIC_EXT2_FILE); in ext2fs_file_flush()
130 fs = file->fs; in ext2fs_file_flush()
132 if (!(file->flags & EXT2_FILE_BUF_VALID) || in ext2fs_file_flush()
133 !(file->flags & EXT2_FILE_BUF_DIRTY)) in ext2fs_file_flush()
137 if (file->physblock && file->inode.i_flags & EXT4_EXTENTS_FL) { in ext2fs_file_flush()
138 retval = ext2fs_bmap2(fs, file->ino, &file->inode, BMAP_BUFFER, in ext2fs_file_flush()
139 0, file->blockno, &ret_flags, &dontcare); in ext2fs_file_flush()
143 retval = ext2fs_bmap2(fs, file->ino, &file->inode, in ext2fs_file_flush()
145 file->blockno, 0, in ext2fs_file_flush()
146 &file->physblock); in ext2fs_file_flush()
156 if (!file->physblock) { in ext2fs_file_flush()
157 retval = ext2fs_bmap2(fs, file->ino, &file->inode, in ext2fs_file_flush()
158 BMAP_BUFFER, file->ino ? BMAP_ALLOC : 0, in ext2fs_file_flush()
159 file->blockno, 0, &file->physblock); in ext2fs_file_flush()
164 retval = io_channel_write_blk64(fs->io, file->physblock, 1, file->buf); in ext2fs_file_flush()
168 file->flags &= ~EXT2_FILE_BUF_DIRTY; in ext2fs_file_flush()
177 static errcode_t sync_buffer_position(ext2_file_t file) in sync_buffer_position() argument
182 b = file->pos / file->fs->blocksize; in sync_buffer_position()
183 if (b != file->blockno) { in sync_buffer_position()
184 retval = ext2fs_file_flush(file); in sync_buffer_position()
187 file->flags &= ~EXT2_FILE_BUF_VALID; in sync_buffer_position()
189 file->blockno = b; in sync_buffer_position()
202 static errcode_t load_buffer(ext2_file_t file, int dontfill) in load_buffer() argument
204 ext2_filsys fs = file->fs; in load_buffer()
208 if (!(file->flags & EXT2_FILE_BUF_VALID)) { in load_buffer()
209 retval = ext2fs_bmap2(fs, file->ino, &file->inode, in load_buffer()
210 BMAP_BUFFER, 0, file->blockno, &ret_flags, in load_buffer()
211 &file->physblock); in load_buffer()
215 if (file->physblock && in load_buffer()
218 file->physblock, in load_buffer()
219 1, file->buf); in load_buffer()
223 memset(file->buf, 0, fs->blocksize); in load_buffer()
225 file->flags |= EXT2_FILE_BUF_VALID; in load_buffer()
231 errcode_t ext2fs_file_close(ext2_file_t file) in ext2fs_file_close() argument
235 EXT2_CHECK_MAGIC(file, EXT2_ET_MAGIC_EXT2_FILE); in ext2fs_file_close()
237 retval = ext2fs_file_flush(file); in ext2fs_file_close()
239 if (file->buf) in ext2fs_file_close()
240 ext2fs_free_mem(&file->buf); in ext2fs_file_close()
241 ext2fs_free_mem(&file); in ext2fs_file_close()
248 ext2fs_file_read_inline_data(ext2_file_t file, void *buf, in ext2fs_file_read_inline_data() argument
256 fs = file->fs; in ext2fs_file_read_inline_data()
257 retval = ext2fs_inline_data_get(fs, file->ino, &file->inode, in ext2fs_file_read_inline_data()
258 file->buf, &size); in ext2fs_file_read_inline_data()
262 if (file->pos >= size) in ext2fs_file_read_inline_data()
265 count = size - file->pos; in ext2fs_file_read_inline_data()
268 memcpy(buf, file->buf + file->pos, count); in ext2fs_file_read_inline_data()
269 file->pos += count; in ext2fs_file_read_inline_data()
279 errcode_t ext2fs_file_read(ext2_file_t file, void *buf, in ext2fs_file_read() argument
288 EXT2_CHECK_MAGIC(file, EXT2_ET_MAGIC_EXT2_FILE); in ext2fs_file_read()
289 fs = file->fs; in ext2fs_file_read()
292 if (file->inode.i_flags & EXT4_INLINE_DATA_FL) in ext2fs_file_read()
293 return ext2fs_file_read_inline_data(file, buf, wanted, got); in ext2fs_file_read()
295 while ((file->pos < EXT2_I_SIZE(&file->inode)) && (wanted > 0)) { in ext2fs_file_read()
296 retval = sync_buffer_position(file); in ext2fs_file_read()
299 retval = load_buffer(file, 0); in ext2fs_file_read()
303 start = file->pos % fs->blocksize; in ext2fs_file_read()
307 left = EXT2_I_SIZE(&file->inode) - file->pos ; in ext2fs_file_read()
311 memcpy(ptr, file->buf+start, c); in ext2fs_file_read()
312 file->pos += c; in ext2fs_file_read()
326 ext2fs_file_write_inline_data(ext2_file_t file, const void *buf, in ext2fs_file_write_inline_data() argument
334 fs = file->fs; in ext2fs_file_write_inline_data()
335 retval = ext2fs_inline_data_get(fs, file->ino, &file->inode, in ext2fs_file_write_inline_data()
336 file->buf, &size); in ext2fs_file_write_inline_data()
340 if (file->pos < size) { in ext2fs_file_write_inline_data()
341 count = nbytes - file->pos; in ext2fs_file_write_inline_data()
342 memcpy(file->buf + file->pos, buf, count); in ext2fs_file_write_inline_data()
344 retval = ext2fs_inline_data_set(fs, file->ino, &file->inode, in ext2fs_file_write_inline_data()
345 file->buf, count); in ext2fs_file_write_inline_data()
351 file->pos += count; in ext2fs_file_write_inline_data()
354 if (count != 0 && EXT2_I_SIZE(&file->inode) < file->pos) { in ext2fs_file_write_inline_data()
357 rc = ext2fs_file_set_size2(file, file->pos); in ext2fs_file_write_inline_data()
368 retval = ext2fs_inline_data_expand(fs, file->ino); in ext2fs_file_write_inline_data()
378 retval = ext2fs_read_inode(fs, file->ino, &file->inode); in ext2fs_file_write_inline_data()
385 errcode_t ext2fs_file_write(ext2_file_t file, const void *buf, in ext2fs_file_write() argument
393 EXT2_CHECK_MAGIC(file, EXT2_ET_MAGIC_EXT2_FILE); in ext2fs_file_write()
394 fs = file->fs; in ext2fs_file_write()
396 if (!(file->flags & EXT2_FILE_WRITE)) in ext2fs_file_write()
400 if (file->inode.i_flags & EXT4_INLINE_DATA_FL) { in ext2fs_file_write()
401 retval = ext2fs_file_write_inline_data(file, buf, nbytes, in ext2fs_file_write()
410 retval = sync_buffer_position(file); in ext2fs_file_write()
414 start = file->pos % fs->blocksize; in ext2fs_file_write()
423 retval = load_buffer(file, (c == fs->blocksize)); in ext2fs_file_write()
431 if (!file->physblock) { in ext2fs_file_write()
432 retval = ext2fs_bmap2(fs, file->ino, &file->inode, in ext2fs_file_write()
434 file->ino ? BMAP_ALLOC : 0, in ext2fs_file_write()
435 file->blockno, 0, in ext2fs_file_write()
436 &file->physblock); in ext2fs_file_write()
441 file->flags |= EXT2_FILE_BUF_DIRTY; in ext2fs_file_write()
442 memcpy(file->buf+start, ptr, c); in ext2fs_file_write()
443 file->pos += c; in ext2fs_file_write()
451 if (count != 0 && EXT2_I_SIZE(&file->inode) < file->pos) { in ext2fs_file_write()
454 rc = ext2fs_file_set_size2(file, file->pos); in ext2fs_file_write()
464 errcode_t ext2fs_file_llseek(ext2_file_t file, __u64 offset, in ext2fs_file_llseek() argument
467 EXT2_CHECK_MAGIC(file, EXT2_ET_MAGIC_EXT2_FILE); in ext2fs_file_llseek()
470 file->pos = offset; in ext2fs_file_llseek()
472 file->pos += offset; in ext2fs_file_llseek()
474 file->pos = EXT2_I_SIZE(&file->inode) + offset; in ext2fs_file_llseek()
479 *ret_pos = file->pos; in ext2fs_file_llseek()
484 errcode_t ext2fs_file_lseek(ext2_file_t file, ext2_off_t offset, in ext2fs_file_lseek() argument
491 retval = ext2fs_file_llseek(file, loffset, whence, &ret_loffset); in ext2fs_file_lseek()
501 errcode_t ext2fs_file_get_lsize(ext2_file_t file, __u64 *ret_size) in ext2fs_file_get_lsize() argument
503 if (file->magic != EXT2_ET_MAGIC_EXT2_FILE) in ext2fs_file_get_lsize()
505 *ret_size = EXT2_I_SIZE(&file->inode); in ext2fs_file_get_lsize()
512 ext2_off_t ext2fs_file_get_size(ext2_file_t file) in ext2fs_file_get_size() argument
516 if (ext2fs_file_get_lsize(file, &size)) in ext2fs_file_get_size()
524 static errcode_t ext2fs_file_zero_past_offset(ext2_file_t file, in ext2fs_file_zero_past_offset() argument
527 ext2_filsys fs = file->fs; in ext2fs_file_zero_past_offset()
537 retval = sync_buffer_position(file); in ext2fs_file_zero_past_offset()
542 retval = ext2fs_bmap2(fs, file->ino, NULL, NULL, 0, in ext2fs_file_zero_past_offset()
574 errcode_t ext2fs_file_set_size2(ext2_file_t file, ext2_off64_t size) in ext2fs_file_set_size2() argument
580 EXT2_CHECK_MAGIC(file, EXT2_ET_MAGIC_EXT2_FILE); in ext2fs_file_set_size2()
582 if (size && ext2fs_file_block_offset_too_big(file->fs, &file->inode, in ext2fs_file_set_size2()
583 (size - 1) / file->fs->blocksize)) in ext2fs_file_set_size2()
585 truncate_block = ((size + file->fs->blocksize - 1) >> in ext2fs_file_set_size2()
586 EXT2_BLOCK_SIZE_BITS(file->fs->super)); in ext2fs_file_set_size2()
587 old_size = EXT2_I_SIZE(&file->inode); in ext2fs_file_set_size2()
588 old_truncate = ((old_size + file->fs->blocksize - 1) >> in ext2fs_file_set_size2()
589 EXT2_BLOCK_SIZE_BITS(file->fs->super)); in ext2fs_file_set_size2()
591 retval = ext2fs_inode_size_set(file->fs, &file->inode, size); in ext2fs_file_set_size2()
595 if (file->ino) { in ext2fs_file_set_size2()
596 retval = ext2fs_write_inode(file->fs, file->ino, &file->inode); in ext2fs_file_set_size2()
601 retval = ext2fs_file_zero_past_offset(file, size); in ext2fs_file_set_size2()
608 return ext2fs_punch(file->fs, file->ino, &file->inode, 0, in ext2fs_file_set_size2()
612 errcode_t ext2fs_file_set_size(ext2_file_t file, ext2_off_t size) in ext2fs_file_set_size() argument
614 return ext2fs_file_set_size2(file, size); in ext2fs_file_set_size()