Lines Matching full:channel
166 static errcode_t unix_get_stats(io_channel channel, io_stats *stats) in unix_get_stats() argument
172 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL); in unix_get_stats()
173 data = (struct unix_private_data *) channel->private_data; in unix_get_stats()
211 static errcode_t raw_read_blk(io_channel channel, in raw_read_blk() argument
225 size = (count < 0) ? -count : (ext2_loff_t) count * channel->block_size; in raw_read_blk()
229 location = ((ext2_loff_t) block * channel->block_size) + data->offset; in raw_read_blk()
236 if ((channel->align == 0) || in raw_read_blk()
237 (IS_ALIGNED(buf, channel->align) && in raw_read_blk()
238 IS_ALIGNED(location, channel->align) && in raw_read_blk()
239 IS_ALIGNED(size, channel->align))) { in raw_read_blk()
248 ((channel->align == 0) || in raw_read_blk()
249 (IS_ALIGNED(buf, channel->align) && in raw_read_blk()
250 IS_ALIGNED(location, channel->align) && in raw_read_blk()
251 IS_ALIGNED(size, channel->align)))) { in raw_read_blk()
259 if ((channel->align == 0) || in raw_read_blk()
260 (IS_ALIGNED(buf, channel->align) && in raw_read_blk()
261 IS_ALIGNED(location, channel->align) && in raw_read_blk()
262 IS_ALIGNED(size, channel->align))) { in raw_read_blk()
291 if (channel->align == 0) in raw_read_blk()
292 channel->align = 1; in raw_read_blk()
293 if ((channel->block_size > channel->align) && in raw_read_blk()
294 (channel->block_size % channel->align) == 0) in raw_read_blk()
295 align_size = channel->block_size; in raw_read_blk()
297 align_size = channel->align; in raw_read_blk()
335 if (channel->read_error) in raw_read_blk()
336 retval = (channel->read_error)(channel, block, count, buf, in raw_read_blk()
343 static errcode_t raw_write_blk(io_channel channel, in raw_write_blk() argument
358 size = channel->block_size; in raw_write_blk()
363 size = (ext2_loff_t) count * channel->block_size; in raw_write_blk()
369 location = ((ext2_loff_t) block * channel->block_size) + data->offset; in raw_write_blk()
376 if ((channel->align == 0) || in raw_write_blk()
377 (IS_ALIGNED(buf, channel->align) && in raw_write_blk()
378 IS_ALIGNED(location, channel->align) && in raw_write_blk()
379 IS_ALIGNED(size, channel->align))) { in raw_write_blk()
387 ((channel->align == 0) || in raw_write_blk()
388 (IS_ALIGNED(buf, channel->align) && in raw_write_blk()
389 IS_ALIGNED(location, channel->align) && in raw_write_blk()
390 IS_ALIGNED(size, channel->align)))) { in raw_write_blk()
397 if ((channel->align == 0) || in raw_write_blk()
398 (IS_ALIGNED(buf, channel->align) && in raw_write_blk()
399 IS_ALIGNED(location, channel->align) && in raw_write_blk()
400 IS_ALIGNED(size, channel->align))) { in raw_write_blk()
429 if (channel->align == 0) in raw_write_blk()
430 channel->align = 1; in raw_write_blk()
431 if ((channel->block_size > channel->align) && in raw_write_blk()
432 (channel->block_size % channel->align) == 0) in raw_write_blk()
433 align_size = channel->block_size; in raw_write_blk()
435 align_size = channel->align; in raw_write_blk()
489 if (((flags & RAW_WRITE_NO_HANDLER) == 0) && channel->write_error) in raw_write_blk()
490 retval = (channel->write_error)(channel, block, count, buf, in raw_write_blk()
501 static errcode_t alloc_cache(io_channel channel, in alloc_cache() argument
516 retval = io_channel_alloc_buf(channel, 0, &cache->buf); in alloc_cache()
520 if (channel->align || data->flags & IO_FLAG_FORCE_BOUNCE) { in alloc_cache()
523 retval = io_channel_alloc_buf(channel, 0, &data->bounce); in alloc_cache()
583 static errcode_t reuse_cache(io_channel channel, in reuse_cache() argument
590 retval = raw_write_blk(channel, data, cache->block, 1, in reuse_cache()
612 static errcode_t flush_cached_blocks(io_channel channel, in flush_cached_blocks() argument
626 retval = raw_write_blk(channel, data, in flush_cached_blocks()
651 if (cache->write_err && channel->write_error) { in flush_cached_blocks()
658 if (io_channel_alloc_buf(channel, 0, in flush_cached_blocks()
663 channel->block_size); in flush_cached_blocks()
665 (channel->write_error)(channel, err_block, in flush_cached_blocks()
666 1, err_buf, channel->block_size, -1, in flush_cached_blocks()
721 int flags, io_channel *channel, in unix_open_channel() argument
890 *channel = io; in unix_open_channel()
910 io_channel *channel) in unixfd_open() argument
932 return unix_open_channel(str_fd, fd, flags, channel, unixfd_io_manager); in unixfd_open()
936 io_channel *channel) in unix_open() argument
960 return unix_open_channel(name, fd, flags, channel, unix_io_manager); in unix_open()
963 static errcode_t unix_close(io_channel channel) in unix_close() argument
968 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL); in unix_close()
969 data = (struct unix_private_data *) channel->private_data; in unix_close()
972 if (--channel->refcount > 0) in unix_close()
976 retval = flush_cached_blocks(channel, data, 0); in unix_close()
990 ext2fs_free_mem(&channel->private_data); in unix_close()
991 if (channel->name) in unix_close()
992 ext2fs_free_mem(&channel->name); in unix_close()
993 ext2fs_free_mem(&channel); in unix_close()
997 static errcode_t unix_set_blksize(io_channel channel, int blksize) in unix_set_blksize() argument
1002 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL); in unix_set_blksize()
1003 data = (struct unix_private_data *) channel->private_data; in unix_set_blksize()
1006 if (channel->block_size != blksize) { in unix_set_blksize()
1010 if ((retval = flush_cached_blocks(channel, data, FLUSH_NOLOCK))){ in unix_set_blksize()
1017 channel->block_size = blksize; in unix_set_blksize()
1019 retval = alloc_cache(channel, data); in unix_set_blksize()
1026 static errcode_t unix_read_blk64(io_channel channel, unsigned long long block, in unix_read_blk64() argument
1035 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL); in unix_read_blk64()
1036 data = (struct unix_private_data *) channel->private_data; in unix_read_blk64()
1040 return raw_read_blk(channel, data, block, count, buf); in unix_read_blk64()
1043 return raw_read_blk(channel, data, block, count, buf); in unix_read_blk64()
1049 if ((retval = flush_cached_blocks(channel, data, 0))) in unix_read_blk64()
1051 return raw_read_blk(channel, data, block, count, buf); in unix_read_blk64()
1062 memcpy(cp, cache->buf, channel->block_size); in unix_read_blk64()
1065 cp += channel->block_size; in unix_read_blk64()
1080 if ((retval = raw_read_blk(channel, data, block, i, cp))) in unix_read_blk64()
1087 retval = reuse_cache(channel, data, in unix_read_blk64()
1091 memcpy(cache->buf, cp, channel->block_size); in unix_read_blk64()
1095 cp += channel->block_size; in unix_read_blk64()
1102 if (cache->write_err && channel->write_error) { in unix_read_blk64()
1109 if (io_channel_alloc_buf(channel, 0, &err_buf)) in unix_read_blk64()
1112 memcpy(err_buf, cache->buf, channel->block_size); in unix_read_blk64()
1114 (channel->write_error)(channel, err_block, 1, err_buf, in unix_read_blk64()
1115 channel->block_size, -1, in unix_read_blk64()
1125 static errcode_t unix_read_blk(io_channel channel, unsigned long block, in unix_read_blk() argument
1128 return unix_read_blk64(channel, block, count, buf); in unix_read_blk()
1131 static errcode_t unix_write_blk64(io_channel channel, unsigned long long block, in unix_write_blk64() argument
1140 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL); in unix_write_blk64()
1141 data = (struct unix_private_data *) channel->private_data; in unix_write_blk64()
1145 return raw_write_blk(channel, data, block, count, buf, 0); in unix_write_blk64()
1148 return raw_write_blk(channel, data, block, count, buf, 0); in unix_write_blk64()
1154 if ((retval = flush_cached_blocks(channel, data, in unix_write_blk64()
1157 return raw_write_blk(channel, data, block, count, buf, 0); in unix_write_blk64()
1165 writethrough = channel->flags & CHANNEL_FLAGS_WRITETHROUGH; in unix_write_blk64()
1167 retval = raw_write_blk(channel, data, block, count, buf, 0); in unix_write_blk64()
1177 err = reuse_cache(channel, data, cache, block); in unix_write_blk64()
1182 memcpy(cache->buf, cp, channel->block_size); in unix_write_blk64()
1186 cp += channel->block_size; in unix_write_blk64()
1192 if (cache->write_err && channel->write_error) { in unix_write_blk64()
1199 if (io_channel_alloc_buf(channel, 0, &err_buf)) in unix_write_blk64()
1202 memcpy(err_buf, cache->buf, channel->block_size); in unix_write_blk64()
1204 (channel->write_error)(channel, err_block, 1, err_buf, in unix_write_blk64()
1205 channel->block_size, -1, in unix_write_blk64()
1215 static errcode_t unix_cache_readahead(io_channel channel, in unix_cache_readahead() argument
1222 data = (struct unix_private_data *)channel->private_data; in unix_cache_readahead()
1225 (ext2_loff_t)block * channel->block_size + data->offset, in unix_cache_readahead()
1226 (ext2_loff_t)count * channel->block_size, in unix_cache_readahead()
1233 static errcode_t unix_write_blk(io_channel channel, unsigned long block, in unix_write_blk() argument
1236 return unix_write_blk64(channel, block, count, buf); in unix_write_blk()
1239 static errcode_t unix_write_byte(io_channel channel, unsigned long offset, in unix_write_byte() argument
1246 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL); in unix_write_byte()
1247 data = (struct unix_private_data *) channel->private_data; in unix_write_byte()
1250 if (channel->align != 0) { in unix_write_byte()
1261 if ((retval = flush_cached_blocks(channel, data, FLUSH_INVALIDATE))) in unix_write_byte()
1280 static errcode_t unix_flush(io_channel channel) in unix_flush() argument
1285 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL); in unix_flush()
1286 data = (struct unix_private_data *) channel->private_data; in unix_flush()
1290 retval = flush_cached_blocks(channel, data, 0); in unix_flush()
1299 static errcode_t unix_set_option(io_channel channel, const char *option, in unix_set_option() argument
1307 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL); in unix_set_option()
1308 data = (struct unix_private_data *) channel->private_data; in unix_set_option()
1331 retval = flush_cached_blocks(channel, data, 0); in unix_set_option()
1344 static errcode_t unix_discard(io_channel channel, unsigned long long block, in unix_discard() argument
1350 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL); in unix_discard()
1351 data = (struct unix_private_data *) channel->private_data; in unix_discard()
1354 if (channel->flags & CHANNEL_FLAGS_BLOCK_DEVICE) { in unix_discard()
1358 range[0] = (__u64)(block) * channel->block_size + data->offset; in unix_discard()
1359 range[1] = (__u64)(count) * channel->block_size; in unix_discard()
1373 (off_t)(block) * channel->block_size + data->offset, in unix_discard()
1374 (off_t)(count) * channel->block_size); in unix_discard()
1419 static errcode_t unix_zeroout(io_channel channel, unsigned long long block, in unix_zeroout() argument
1425 EXT2_CHECK_MAGIC(channel, EXT2_ET_MAGIC_IO_CHANNEL); in unix_zeroout()
1426 data = (struct unix_private_data *) channel->private_data; in unix_zeroout()
1432 if (!(channel->flags & CHANNEL_FLAGS_BLOCK_DEVICE)) { in unix_zeroout()
1446 (block + count) * channel->block_size + data->offset) { in unix_zeroout()
1448 (block + count) * channel->block_size + data->offset); in unix_zeroout()
1455 (off_t)(block) * channel->block_size + data->offset, in unix_zeroout()
1456 (off_t)(count) * channel->block_size); in unix_zeroout()