Home | History | Annotate | Download | only in ext2fs

Lines Matching full:channel

99 static errcode_t unix_open(const char *name, int flags, io_channel *channel);
100 static errcode_t unix_close(io_channel channel);
101 static errcode_t unix_set_blksize(io_channel channel, int blksize);
102 static errcode_t unix_read_blk(io_channel channel, unsigned long block,
104 static errcode_t unix_write_blk(io_channel channel, unsigned long block,
106 static errcode_t unix_flush(io_channel channel);
107 static errcode_t unix_write_byte(io_channel channel, unsigned long offset,
109 static errcode_t unix_set_option(io_channel channel, const char *option,
111 static errcode_t unix_get_stats(io_channel channel, io_stats *stats)
113 static void reuse_cache(io_channel channel, struct unix_private_data *data,
115 static errcode_t unix_read_blk64(io_channel channel, unsigned long long block,
117 static errcode_t unix_write_blk64(io_channel channel, unsigned long long block,
119 static errcode_t unix_discard(io_channel channel, unsigned long long block,
141 static errcode_t unix_get_stats(io_channel channel, io_stats *stats)
147 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
148 data = (struct unix_private_data *) channel->private_data;
160 static errcode_t raw_read_blk(io_channel channel,
171 size = (count < 0) ? -count : count * channel->block_size;
173 location = ((ext2_loff_t) block * channel->block_size) + data->offset;
178 if ((channel->align == 0) ||
179 (IS_ALIGNED(buf, channel->align) &&
180 IS_ALIGNED(size, channel->align))) {
202 actual = read(data->dev, data->bounce, channel->block_size);
203 if (actual != channel->block_size)
206 if (size > channel->block_size)
207 actual = channel->block_size;
216 if (channel->read_error)
217 retval = (channel->read_error)(channel, block, count, buf,
222 static errcode_t raw_write_blk(io_channel channel,
234 size = channel->block_size;
239 size = count * channel->block_size;
243 location = ((ext2_loff_t) block * channel->block_size) + data->offset;
249 if ((channel->align == 0) ||
250 (IS_ALIGNED(buf, channel->align) &&
251 IS_ALIGNED(size, channel->align))) {
270 if (size < channel->block_size) {
272 channel->block_size);
273 if (actual != channel->block_size) {
279 if (size > channel->block_size)
280 actual = channel->block_size;
282 actual = write(data->dev, data->bounce, channel->block_size);
283 if (actual != channel->block_size)
291 if (channel->write_error)
292 retval = (channel->write_error)(channel, block, count, buf,
303 static errcode_t alloc_cache(io_channel channel,
318 retval = io_channel_alloc_buf(channel, 0, &cache->buf);
322 if (channel->align) {
325 retval = io_channel_alloc_buf(channel, 0, &data->bounce);
385 static void reuse_cache(io_channel channel, struct unix_private_data *data,
389 raw_write_blk(channel, data, cache->block, 1, cache->buf);
400 static errcode_t flush_cached_blocks(io_channel channel,
420 retval = raw_write_blk(channel, data,
469 static errcode_t unix_open(const char *name, int flags, io_channel *channel)
621 *channel = io;
640 static errcode_t unix_close(io_channel channel)
645 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
646 data = (struct unix_private_data *) channel->private_data;
649 if (--channel->refcount > 0)
653 retval = flush_cached_blocks(channel, data, 0);
660 ext2fs_free_mem(&channel->private_data);
661 if (channel->name)
662 ext2fs_free_mem(&channel->name);
663 ext2fs_free_mem(&channel);
667 static errcode_t unix_set_blksize(io_channel channel, int blksize)
672 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
673 data = (struct unix_private_data *) channel->private_data;
676 if (channel
678 if ((retval = flush_cached_blocks(channel, data, 0)))
682 channel->block_size = blksize;
684 if ((retval = alloc_cache(channel, data)))
691 static errcode_t unix_read_blk64(io_channel channel, unsigned long long block,
700 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
701 data = (struct unix_private_data *) channel->private_data;
705 return raw_read_blk(channel, data, block, count, buf);
712 if ((retval = flush_cached_blocks(channel, data, 0)))
714 return raw_read_blk(channel, data, block, count, buf);
724 memcpy(cp, cache->buf, channel->block_size);
727 cp += channel->block_size;
736 reuse_cache(channel, data, cache, block);
737 if ((retval = raw_read_blk(channel, data, block, 1,
742 memcpy(cp, cache->buf, channel->block_size);
756 if ((retval = raw_read_blk(channel, data, block, i, cp)))
763 reuse_cache(channel, data, cache, block++);
764 memcpy(cache->buf, cp, channel->block_size);
765 cp += channel->block_size;
772 static errcode_t unix_read_blk(io_channel channel, unsigned long block,
775 return unix_read_blk64(channel, block, count, buf);
778 static errcode_t unix_write_blk64(io_channel channel, unsigned long long block,
787 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
788 data = (struct unix_private_data *) channel->private_data;
792 return raw_write_blk(channel, data, block, count, buf);
799 if ((retval = flush_cached_blocks(channel, data, 1)))
801 return raw_write_blk(channel, data, block, count, buf);
809 writethrough = channel->flags & CHANNEL_FLAGS_WRITETHROUGH;
811 retval = raw_write_blk(channel, data, block, count, buf);
818 reuse_cache(channel, data, cache, block);
820 memcpy(cache->buf, cp, channel->block_size);
824 cp += channel->block_size;
830 static errcode_t unix_write_blk(io_channel channel, unsigned long block,
833 return unix_write_blk64(channel, block, count, buf);
836 static errcode_t unix_write_byte(io_channel channel, unsigned long offset,
843 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
844 data = (struct unix_private_data *) channel->private_data;
847 if (channel->align != 0) {
858 if ((retval = flush_cached_blocks(channel, data, 1)))
875 static errcode_t unix_flush(io_channel channel)
880 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
881 data = (struct unix_private_data *) channel->private_data;
885 retval = flush_cached_blocks(channel, data, 0);
891 static errcode_t unix_set_option(io_channel channel, const char *option,
898 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
899 data = (struct unix_private_data *) channel->private_data;
921 static errcode_t unix_discard(io_channel channel, unsigned long long block,
927 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL);
928 data = (struct unix_private_data *) channel->private_data;
931 if (channel->flags & CHANNEL_FLAGS_BLOCK_DEVICE) {
935 range[0] = (__uint64_t)(block) * channel->block_size;
936 range[1] = (__uint64_t)(count) * channel->block_size;
950 (off_t)(block) * channel->block_size,
951 (off_t)(count) * channel->block_size);