History log of /external/squashfs-tools/squashfs-tools/read_fs.c
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
98ef7c94502920658f49fbaadbf7319eb4a04124 18-Apr-2014 Phillip Lougher <phillip@squashfs.org.uk> read_fs: scan_inode_table(), fix memory leak on filesystem corruption

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
8bb17b0275fa35318ad35c8fd477023004f940aa 31-Mar-2014 Phillip Lougher <phillip@squashfs.org.uk> Mksquashfs: significantly optimise fragment duplicate checking

Remove the last remaining parallelisation bottleneck in
Mksquashfs - fragment duplicate checking which was previously done
on the single main thread.

Back in 2006 when I first parallelised Mksquashfs, doing this on the
main thread was initially not considered to be too much
of an issue. If you don't have (m)any duplicates then
you avoid the issue full stop. But even when you do have fragments
which need to be checked, the necessary work of memcmp (memory compare)
is not too arduous and is much faster than the upstream file reader thread,
and much much faster than the downstream fragment compressor thread(s),
and so if Mksquashfs is running slow then this is "not the bottleneck you're
looking for", that's going to either be fragment compression or
file reading. This is on the basis most duplicates are local and the
fragment referenced can be found in the fragment cache.

But often when I ran Mksquashfs and had a lot of duplicates the
performance of Mksquashfs would be disappointing, normally without
duplicates, I expected to get full processor utilisation, but with
duplicates you might get roughly 200% or even 100% (i.e. one processor
core), at least for the time it was hitting a run of duplicates in
the source filesystem. Increasing the size of the fragment
cache would reduce the performance hit. Which gave a substantial
hint the problem was fragment cache misses which caused fragment
blocks to be read back off disk and decompressed on the single
main thread. But it was evident that wasn't the whole story.

The culprit has always self-evidently been the single threaded
duplicate checking on the main thread, this has been apparent almost
since the initial parallelisation of Mksquashfs in 2006, but although
I've had my suspicions as to why (the hint above), with the
demands/prioritisation of extra functionality, this has remained on my
TODO list until now.

Analysis now has shown the problem to be a triple whammy:

1. With duplicates (and even without), there are substantial fragment
cache misses, which make the single main thread spend a lot of the
time duplicate checking reading in fragment blocks off disk,
decompressing them, and then memcmp'ing them for a match. This is
because with a large filesystem, many fragments match at the
checksum level even though they're not actually a match at the byte
level - the checksums eliminate most files, but if you've got a large
filesystem that still leaves multiple files which match, and this
match is random, and does not follow locality of reference. So
invariably these fragment blocks are no longer in the fragment
cache (if you're compressing 1Gbyte of files and have a 64Mbyte
(default) fragment cache, most checksum matches will invariably
not be in the cache, because they do not follow the "locality of
reference rules", the checksum matches can literally be anywhere
in the part of the filesystem already compressed and written to disk).
The checksum matches in theory could be reduced by improving the
discriminating power of the checksums, but this is a zero sum
game, the extra processing overhead of computing a more sophisticated
checksum for *all* blocks would easily outweigh the benefits of
less checksum matches.

2. Even with the knowledge the main thread spends a lot of the
time reading in and decompressing fragment blocks, we're left with
the fact the main thread has enough "bandwidth" to do this without
becoming a bottleneck, so there's more to the story.

The "more to the story" is that the main thread spends most of its
time asleep! As fragment compression is the bottleneck in any
Mksquashfs run, we run out of "empty fragment blocks" because all
of the fragment blocks become filled, and get queued on the
fragment compression threads waiting for them to be compressed. So
the main thread sleeps waiting for an "empty fragment block" even
though it has a queue of files which it could be duplicate checking.

3. When the main thread does wake up having got an "empty fragment block"
and it starts to do duplicate checking, if that duplicate checking takes
a long time (because it has to read in fragment blocks and decompress
them), then it 1. stops passing fragments to the fragment decompressor
threads, and 2. stops taking fragments from the reader thread... So
both the fragment compressor threads and the reader thread starve.

Now, because both the reader thread and the fragment compressor threads
have deep queues, this doesn't happen instantaenously, but only if
the main thread hits a run of files which need multiple fragment
blocks to be read off disk, and decompressed. Unfortunately, that
*does* happen.

So, we end up with the situation the main thread doesn't duplicate
check files ahead of time because it is blocked on the fragment
compressor threads. When it does wake up and do duplicate checking
(because it didn't do it ahead of time), it ends up starving the
fragment compressor threads and reader thread for that duration -
hence we get a CPU utilisation of 100% *or less* because only
that main thread is running.

The solution is to move duplicate checking to multiple
one per-core front end processing threads ahead of the main thread
(interposed between the reader thread and the main thread). So
the front-end threads do duplicate checking on behalf of the
main thread. This eliminates the main thread bottleneck at a stroke,
because the front-end threads can duplicate check ahead of time,
even though the main thread is blocked on the fragment
compressors.

In theory simple, in practice extremely difficult. Two issues have
to be dealt with:

1. It introduces a level of fragment cache synchronisation hitherto
avoided due to clever design in Mksquashfs. Mksquashfs parallelisation
is coded on the producer-consumer principle. The producer thread
creates buffers in the cache, fills them in, and then passes them
to the consumer thread via a queue, the consumer thread only "sees"
the buffers when they're read from the queue, at which time the
consumer and producer has inherently synchronised, because the
consumer only gets them once the producer thread has explicitly done
with the buffer. This technique AFAIK was introduced in CSP
(communicating sequential processes) and was adopted in the largely
forgotten about descendant OCCAM. This technique eliminates
explicit buffer locking.

The front-end threads break this model because we get multiple
threads opportunistically looking up fragments in the fragment
cache, and then creating them if they're not available. So we
get the problem threads can lookup buffers and get them whilst
they're still being filled in, and we get races where two
threads can simultaneously create the same buffers. This can,
obviously, be dealt with by introducing the concept of "locked"
buffers etc. but it means adding an additional set of cache APIs
only for the fragment processing threads.

2. The front-end threads have to synchronise with the main thread
to do duplicate checking. At the time the front-end threads
do duplicate checking, there may exist no duplicates, but the
duplicate may exist being duplicate checked itself. Think of the
case where we have two files alphabetically one after another, say
"a" and "b", "a" goes to front-end thread 1, and "b" goes to
front-end thread 2, at this time neither file "exists" because it's
being duplicate checked, thread 2 cannot determine file "b" is
a duplicate of file "a" because it doesn't "exist" at this time.

This has to be done without introducing an inherent synchronisation
point on the main thread, which will only reintroduce the main thread
bottleneck "by the back door".

But is actually more complex than that. There are two additional
points where synchronisation with the main thread "by the back door"
has to be avoided to get optimum performance. But, you'll have to look
at the code because this commit entry is too long as it is.

But, the upshot of this improvement, is Mksquashfs speeds up by 10% -
60% depemding on the ratio of duplicate files to non-duplicate
files in the source filesystem, which is a significant improvement.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
b4fc3bf1abd7cf8d65cc68ad742a254d76f5da09 06-Feb-2014 Phillip Lougher <phillip@squashfs.org.uk> Mksquashfs: optimise duplicate checking when appending

When Mksquashfs is appending, the checksums for the fragments
in the original filesystem are lazily computed on demand - when
we get a possible duplicate where the possible duplicate fragment
is stored in a fragment block in the original filesystem, it is
read off disk, decompressed, and the fragment checksum computed.

This allows fast startup as the fragment checksums are not computed
upfront, and of course if we never get a possible duplicate stored
in a particular original fragment block, it is never read off disk.

But, when we read the original fragment block off disk, we compute
the checksum for the fragment of interest only, and then store
the fragment block in the fragment cache.

If we get a reference to another fragment stored in that
fragment block, and the fragment block is still in the cache, then
we re-use it. If on the other hand, the fragment block has been
aged out of the cache, we have to re-read and re-decompress
the same fragment block. This adds uncessary overhead, and in
certain filesystems, where there's lots of duplicate matches
but distributed in time, we may end up re-reading the same
fragment blocks many times.

This commit adds an optimisation, when we read a fragment block off
disk, we compute the fragment checksums for *all* the fragments
stored in the fragment block. This avoids the situation where we
have to re-read the fragment block off disk if the fragment block
disappears from the fragment cache before we get another
duplicate check reference to that fragment block.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
ce2fef5e9d6e31648e93bda430fee37f0929c583 05-Feb-2014 Phillip Lougher <phillip@squashfs.org.uk> Mksquashfs: move a couple of things into mksquashfs.h

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
9077fad8779e259fa03326b567644374e98ff171 05-Jan-2014 Phillip Lougher <phillip@squashfs.org.uk> unsquashfs/read_fs: Always_use_fragments should be Always-use-fragments

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
48c97065cf29dff24d01d94b39f4fdc6cef815f2 30-Dec-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs.c: fix missing space in ERROR message

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
47d52fe6f28cb8650ed8d1abb745137579f35e13 21-Jun-2013 Phillip Lougher <phillip@squashfs.org.uk> mksquashfs: add additional comment concerning use of compressor_extract_options

Add additional comment to the effect that compressor_extract_options is also
used to ensure that we know how decompress a filesystem compressed with the
compression options in the filesystem.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
ef15e43b707f22d64c13e9b2ca0eae8b165a1690 19-Apr-2013 Phillip Lougher <phillip@squashfs.org.uk> Move SQUASHFS_LEXX and SQUASHFS_SWAP_{SHORTS:INTS:LONGS} into squashfs_swap.h

Plus move definition of SQUASHFS_MEMCPY as well into squashfs_swap.h

Now that the separate implementations in mksquashfs.h and read_fs.h
are identical we can have one implementation, and we can
put it with the other swap macros.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
690d91306e8b20400ae8c36fd558604189b70bdc 18-Apr-2013 Phillip Lougher <phillip@squashfs.org.uk> Swap source and destination in macros in disk -> host reading code

Many years ago when Squashfs used bitfields the copying swap
macros relied on s(source) (the first parameter) to be a pointer
to the appropriate structure type.

When swapping from the host order to disk order, source was a
pointer to the appropriate type, and destination was an unaligned
pointer. However, when swapping from disk order to host order in
code that read from disk, it was the destination that was a pointer
to the appropriate type, and source was an unaligned pointer. To
accomodate this, the sense of the parameters was swapped, so the
destination pointer was given first, and then the source pointer.

This was a fairly horrible hack. Now that the rewritten swap
macros no longer require either the source or destination pointer
to be of the appropriate type, we can swap the parameters around
in the disk -> host reading code, so that all code uses
source then destination order.

Note: the Unsquashfs code that reads legacy 1.x, 2.x and 3.x
filesystems still uses the original bitfield swapping macros,
and the requirement that the first parameter is of the appropriate
type remains, this could be changed too (as there's no longer
any code which uses the macros to swap from host -> disk order)
but the swapping code is fossilised and in deep maintenance mode, and
only essential changes are made. This largely cosmetic change
(especially as the code isn't developed anymore and so any
additional swapping macros is unlikely) isn't considered sufficiently
essential to risk adding inadvertant bugs.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
9451938650abe45e8714660f420c0546ccb7a6aa 06-Mar-2013 Phillip Lougher <phillip@squashfs.org.uk> mksquashfs: Add ERRORs if read_fs_bytes() fails in duplicate checking

Add some ERRORs if read_fs_bytes() fails when trying to read
back datablocks or fragments from the output filesystem when
checking for duplicates.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
9f0a2c69377ffd7b2d066a4a06963d895727ae52 03-Mar-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs: add remaining missing ERRORs if read_fs_bytes() returns failure

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
4d7c0724196a5fce8fefa6ee923c79be7c94301b 03-Mar-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs: Don't report ERROR if squashfs_readdir returns failure

Squashfs_readdir() now reports ERROR, and so we don't need to do
it in the caller. This brings squashfs_readdir() into line with
the other table reading routines which report ERROR.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
2a315732458c990f8e8185aac72d6c0a55350fff 03-Mar-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs: add remaining missing ERRORs if read_block() returns failure

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
3d5c06089c65e94ad819477d8a933f93476e8b7d 01-Mar-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs: We should print ERROR message if compression options reading fails

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
0372aa056962a0dbdcbb45de9be23f522d645029 01-Mar-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs: Add additional ERROR message to read_super()

Continue adding more understandable user-orientated error messages.

If we fail to read a Squashfs superblock then add the error
message "wrong filesystem or corrupted filesystem".

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
63ce1770edbdcc36ab48a1dba63af4636dcb69bd 01-Mar-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs: add ERROR message in read_super()

If read_fs_bytes() fails we should report we failed
to find the superblock, as is already done if we find
what we've read doesn't match a Squashfs superblock.

Also whilst doing this continue the practice of more understandable
user-orientated error messages such as "wrong filesystem or
coprrupted filesystem".

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
1a734af8bd761a7737b56a55a9de04f3753500ac 24-Feb-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs: remove ERROR message on scan_inode_table() failure

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
45f78347049325b32c0ab96e6858f3f2bb993532 24-Feb-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs: Add error message in scan_inode_table() if filesystem is corrupted

Add an error message if filesystem is corrupted. Also rename the label
to corrupt, as it is now only use for those failures.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
9facf01876801ce86eb06004959ab4aebb27fd39 24-Feb-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs: use MEM_ERROR() for out of space handling

Replace hand crafted ERROR() messages with dedicated
MEM_ERROR() macro.

In the process fix a one case where mem failure resulted in a
silent faulure.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
e465085a0a75ed749a9ec5edaff2ea5cd5b47997 25-Jan-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs: reformat scan_inode_table() tidying code

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
7e08fad7a62bdbbbe39e1248c3c4b05f5caf9e2c 24-Jan-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs: Further harden scan_inode_table() against corrupted filesystems

Add a lot more sanity checks to the data read from the
filesystem.

Also ensure we do not try to access beyond the malloced buffer
holding the data.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
a761c26cd25620f6dfaf7a452ee2ad6cfab9e1e3 20-Jan-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs: When reading directory pass expected number of bytes to read_block()

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
125de73c204b2b92c03ee9bff16dd595e71656af 21-Jan-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs: check the root inode block is found in scan_inode_table()

Further hardening of read_fs. If the filesystem is corrupted we may
get the situation where in the inode_table metatadata block scan we
fail to find the metadata block containing the root inode. In this
case *root_inode_block will be used unitialised.

Add code to check against the small possibility this happens. In the
majority of cases if the filesystem is corrupted we will fail to read
a metadata block in the block scan, and so we will never get to this
place in the code, however, it could happen and so it needs to be
guarded against.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
2b7242f3271eabb76c6c8ecdfeb9db2e97376488 21-Jan-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs: check metadata blocks are expected size in scan_inode_table()

Note we can't use expected in read_block() here because at the time
of calling read_block() we don't know what the expected size is.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
751e32fd169afa63e97a2d4d6f47aede3e98862a 20-Jan-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs: When reading lookup_table pass expected number of bytes to read_block()

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
852db8287892bb34537830311de63c0cc5563783 20-Jan-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs: When reading fragment_table pass expected number of bytes to read_block()

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
197c9f6f6fde6e9aea7e269c936f26ff2f8466fe 20-Jan-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs: When reading id_table pass expected number of bytes to read_block()

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
b5db9ddc5eadd38b7a34b50ac64c9c4f61a551b2 20-Jan-2013 Phillip Lougher <phillip@squashfs.org.uk> read_fs: prevent buffer {over|under}flow in read_block() with corrupted filesystems

Prevent buffer overflow and underflow in read_block() with corrupted
filesystems.

Overflow is easy to understand, read_block() is called to read the next
metadata block pointed to by <start>... Often the buffer passed in is
large enough to hold the expected return bytes, which can be less than
SQUASHFS_METADATA_SIZE. For example filesystem tables are compressed
in SQUASHFS_METADATA_SIZEd chunks, the last compressed chunk will normally
be smaller than SQUASHFS_METADATA_SIZE, so when read_block() is called,
the passed buffer is only large enough to hold the expected size.

Underflow is rather more subtle, when read_block() is called, it is
expected that the returned block will fill the expected amount of
bytes in the filesystem table (stored as an array). If the returned
block is smaller than expected, then there will be uninitialised
data in the filesystem table which will cause unexpected behaviour later.

Fix both cases by passing in an additional parameter <expected>
which contains the expected number of bytes in the metadata block.
Refuse to read blocks which are larger than expected to avoid
buffer overflow and also return error if the block proves to be
smaller than expected, to avoid using unitialised data.

For the callers where the expected number of bytes is unknown support
<expected> containing 0, in which case the metadata block is checked to
ensure it doesn't overflow a SQUASHFS_METADATA_SIZEd buffer. Callers of
read_block() with <expected> == 0 are expected to pass in a
SQUASHFS_METADATA_SIZEd buffer. For instance with compressor specific
options data, the correct length is only known by the compressor specific
code, and this is later called to check the length.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
096135f7430824033f597e47906a24d087f47a34 26-Dec-2012 Phillip Lougher <phillip@squashfs.org.uk> read_fs: fix small memory leaks in read_filesystem()

Fix some memory leaks in read_filesystem()... Mostly
these are in the error path (where mksquashfs will shortly abort).

There is one (id_table) which is not in the error path, and so
this missing free may have leaked a couple of Kbytes when using
Mksquashfs to append to a filesystem.

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
83d42a3fc898962aa1f1e8387f2ccb1114e0d294 01-Nov-2012 Phillip Lougher <phillip@squashfs.org.uk> Update email address

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
2477d0defc9d6dade582bb36596eed2e3cfddf8c 24-Oct-2012 Phillip Lougher <phillip@squashfs.org.uk> error.h: consolidate the various error macros into one header file

This eliminates the multiple separate implementations and brings
all the files into line with respect to synchronising with the
progress bar and exiting squashfs calling prep_exit_mksquashfs().

Signed-off-by: Phillip Lougher <phillip@squashfs.org.uk>
/external/squashfs-tools/squashfs-tools/read_fs.c
f25a97dc4ba98debc223096be21d6624ae59063e 31-Dec-2010 plougher <plougher> get rid of global.h include
/external/squashfs-tools/squashfs-tools/read_fs.c
64e83fda63a1b8408ffbfa466e6c67b0de7a8c99 31-Dec-2010 plougher <plougher> get rid of squashfs_super_block typedef
/external/squashfs-tools/squashfs-tools/read_fs.c
9b393553bbca1d7efc755a4b73e64407a526ef11 31-Dec-2010 plougher <plougher> get rid of squashfs_dir_entry typedef
/external/squashfs-tools/squashfs-tools/read_fs.c
2611d39a5fcea87d4d5160d3d9bfe1c6aa92729c 31-Dec-2010 plougher <plougher> get rid of squashfs_ldir_inode_header typedef
/external/squashfs-tools/squashfs-tools/read_fs.c
9d80a6074011ca775b99c2ca2466ef077f6d1157 31-Dec-2010 plougher <plougher> get rid of squashfs_dir_inode_header typedef
/external/squashfs-tools/squashfs-tools/read_fs.c
5ae6e956cc5d10aee13744cef8c0caa4208a169e 31-Dec-2010 plougher <plougher> get rid of squashfs_symlink_inode_header typedef
/external/squashfs-tools/squashfs-tools/read_fs.c
1e6ac4a05f89feba7b41571ef0936aa1a3d445df 31-Dec-2010 plougher <plougher> get rid of squashfs_lreg_inode_header typedef
/external/squashfs-tools/squashfs-tools/read_fs.c
8701ed64d3241ac3c86db2b6e303769450eac867 31-Dec-2010 plougher <plougher> get rid of squashfs_reg_inode_header typedef
/external/squashfs-tools/squashfs-tools/read_fs.c
0b4ee5b4b390a9c2c92dfaa3eec9bdee1182e061 31-Dec-2010 plougher <plougher> get rid of squashfs_ldev_inode_header typedef
/external/squashfs-tools/squashfs-tools/read_fs.c
c70c63397c3d8117c9f24ec29fa52ba401ea1608 31-Dec-2010 plougher <plougher> get rid of squashfs_dev_inode_header typedef
/external/squashfs-tools/squashfs-tools/read_fs.c
aa0d122348bd8ec500bee33654caf5f34f6644d6 31-Dec-2010 plougher <plougher> get rid of squashfs_lipc_inode_header typedef
/external/squashfs-tools/squashfs-tools/read_fs.c
e56b9862d07a7c6202090d74b86d28639ede52ca 31-Dec-2010 plougher <plougher> get rid of squashfs_ipc_inode_header typedef
/external/squashfs-tools/squashfs-tools/read_fs.c
2bd2b72b3de5817f9b16e6677a02c217363136f6 31-Dec-2010 plougher <plougher> get rid of squashfs_dir_index typedef
/external/squashfs-tools/squashfs-tools/read_fs.c
520e1a144c9a6c957754f93dc8830f884fe5669b 31-Dec-2010 plougher <plougher> get rid of squashfs_dir_header typedef
/external/squashfs-tools/squashfs-tools/read_fs.c
8ed84b96ca36da8147993935b951918359d8f20a 31-Dec-2010 plougher <plougher> get rid of squashfs_fragment_entry typedef
/external/squashfs-tools/squashfs-tools/read_fs.c
2625a3d8f39b94c4841bd605361f4b575b0dc1a5 31-Dec-2010 plougher <plougher> get rid of squashfs_fragment_index typedef
/external/squashfs-tools/squashfs-tools/read_fs.c
8973a12943b86e759a6391995271fa620d73483f 31-Dec-2010 plougher <plougher> get rid of squashfs_inode_header typedef
/external/squashfs-tools/squashfs-tools/read_fs.c
b48442b2e37b3cb7efbffb032968f115eec7963c 31-Dec-2010 plougher <plougher> Use compressor_uncompress()
/external/squashfs-tools/squashfs-tools/read_fs.c
f6310758b1c84e5f7223425bfaaee97eb962a506 30-Dec-2010 plougher <plougher> Add aligned attribute to the buffer definition
/external/squashfs-tools/squashfs-tools/read_fs.c
317959322c665d211788f07227abcba61984ec88 29-Dec-2010 plougher <plougher> Fix code that calls compressor_extract_options - even if there
is no compressor options present we still want to call the
compressor to set the default options (the defaults may have been
changed by the user specifying options on the command line which
need to be over-ridden).
/external/squashfs-tools/squashfs-tools/read_fs.c
5924372bba7ac923cca996e74716128a98f668af 28-Dec-2010 plougher <plougher> Add code to read_super() that reads any compressor specific options from
disk and passes it to the compressor via extract_options().
/external/squashfs-tools/squashfs-tools/read_fs.c
540c7abc405a7a26373d5299e77122eae1365c56 28-Dec-2010 plougher <plougher> Get rid of offset - unnecessary since check_data was removed in 4.0
/external/squashfs-tools/squashfs-tools/read_fs.c
1031268dc09bac693d8c6d8e913cbf984f0592f5 15-Dec-2010 plougher <plougher> Print no_xattrs flag
/external/squashfs-tools/squashfs-tools/read_fs.c
a10230e410599e3cf1c4ea7fa9a2ba11d4e8eaa1 15-Dec-2010 plougher <plougher> Print nox flag
/external/squashfs-tools/squashfs-tools/read_fs.c
f09d9a6589de25eb4b9c9891277a717c1053a400 08-Dec-2010 plougher <plougher> Add missing print
/external/squashfs-tools/squashfs-tools/read_fs.c
96eedecdf4d075f5b860f8bf3eaab2a8ea2a805b 04-Dec-2010 plougher <plougher> Move call to scan_inode_table out of if.
/external/squashfs-tools/squashfs-tools/read_fs.c
1a00ad1a4d97d54f83e41cc3d684de048bad3c10 04-Dec-2010 plougher <plougher> When appending to an empty filesystem, scan_inode_table returned a file
0 files, which would be incorrectly tr
/external/squashfs-tools/squashfs-tools/read_fs.c
9c0688ef8954e7e335a62479ba0408d585d47853 16-Sep-2010 plougher <plougher> Add missing TRACE statement for xattr_id_table_start
/external/squashfs-tools/squashfs-tools/read_fs.c
f70baa71b82a57a9a6a989fd3a3e5a8caa1510b6 04-Sep-2010 plougher <plougher> Remove #ifdef'ed out obsolete code
/external/squashfs-tools/squashfs-tools/read_fs.c
860c1f3d8aa4ba40d587382a91821bea03b023c5 11-Aug-2010 plougher <plougher> Make XATTR support conditionally compilable. This is to support platforms
and c libraries that lack xattr support.
/external/squashfs-tools/squashfs-tools/read_fs.c
1ebb6e9932d448097d769f1366d8adaae797ea64 22-Jul-2010 plougher <plougher> Wrap some lines
/external/squashfs-tools/squashfs-tools/read_fs.c
8d4404d1f63a558f4903eb8c939bd4306a805d0f 21-Jul-2010 plougher <plougher> Update copyright
/external/squashfs-tools/squashfs-tools/read_fs.c
e5fb079cfd23503856ad5ab30fa55f71666f13b1 17-Jul-2010 plougher <plougher> Move get_xattrs from read_fs.c to xattr.c, therefore putting all mksquashfs
specfic xattr code into one file.
/external/squashfs-tools/squashfs-tools/read_fs.c
8935dc25479321709c74c2f8214cf5365669100e 02-Jul-2010 plougher <plougher> Add initial support for reading xattrs in unsquashfs using the shared code in
read_xattrs.c. Currently this does nothing as unsquashfs does nothing with
the xattr data...

Plus move get_xattrs out of read_xattrs.c into read_fs.c. It is only used
by mksquashfs, and having it in read_xattrs.c causes link failure in
unsquashfs as generate_xattr is missing.
/external/squashfs-tools/squashfs-tools/read_fs.c
923b301e304637fd5e587eb05a6f44558abae2bd 18-Jun-2010 plougher <plougher> Change unsquashfs read_block() to take a void * rather than a char *.
Plus remove obsolete sBlk parameter in mksquashfs read_block() - thereby
unifying the signatures.
/external/squashfs-tools/squashfs-tools/read_fs.c
374444c9b3c6331d781625bec0a7550e05d01ed6 18-Jun-2010 plougher <plougher> add external definition for get_xattrs()
/external/squashfs-tools/squashfs-tools/read_fs.c
3306cb2b54a60a32664617118336ac141e1471b6 18-Jun-2010 plougher <plougher> change read_fs_bytes() from taking char * to taking void *
/external/squashfs-tools/squashfs-tools/read_fs.c
1d065e9f3c6d22a629134837a55538fb8619cfb4 18-Jun-2010 plougher <plougher> Rename read_destination() to read_fs_bytes(). Also don't abort on
I/O error inside read_fs_bytes and instead correctly pass the error up to
higher levels.
/external/squashfs-tools/squashfs-tools/read_fs.c
1b129839fa96a755f011fcaf1d06adc7cd6c28d2 18-Jun-2010 plougher <plougher> move xattr read code into separate read_xattrs.c file
/external/squashfs-tools/squashfs-tools/read_fs.c
570f436c85a99435180a3ec9aeb1c94135ab0e77 17-Jun-2010 plougher <plougher> Add support for reading xattrs in append
/external/squashfs-tools/squashfs-tools/read_fs.c
e6e0e1bdf98ad6faa63527e5bbdd3bd5e7e97a9e 12-May-2010 plougher <plougher> Add support for xattrs. File system can store up to 2^48 compressed
bytes of xattr data, and the number of xattrs per inode is unlimited.
Each xattr value can be up to 4 Gbytes. Xattrs are supported for
files, directories, device nodes and symbolic links.
/external/squashfs-tools/squashfs-tools/read_fs.c
363ddaa1fcfd7e2bb186cb78990c43e491ea981d 24-Feb-2010 plougher <plougher> Fix TRACE statement warning.
/external/squashfs-tools/squashfs-tools/read_fs.c
46aefa984f924b2187e8f104fafed15899200237 24-Feb-2010 plougher <plougher> Fix alignment issues.
/external/squashfs-tools/squashfs-tools/read_fs.c
764dab5cd71bda25bc755de08908dbbd58c1a450 24-Aug-2009 plougher <plougher> Enable compression default to be selected via Makefile
/external/squashfs-tools/squashfs-tools/read_fs.c
52a452e54bf1da51f608c6df98d1e0a66c35453e 07-Aug-2009 plougher <plougher> Make display_compressors() take an indent string
/external/squashfs-tools/squashfs-tools/read_fs.c
bb98803edb506b6e99693892350ebeca99c6a3df 06-Aug-2009 plougher <plougher> Print compression used when reading existing filesystem for appending, and
state the -comp option will be ignored
/external/squashfs-tools/squashfs-tools/read_fs.c
00fbc436e1933255139ce2f0ffe78b307c902fd4 03-Aug-2009 plougher <plougher> Dislay compressions available when trying to append to a filesystem
with an unsupported compression type
/external/squashfs-tools/squashfs-tools/read_fs.c
9699c654883f9dddd7851901f4b8378bf9bac934 31-Jul-2009 plougher <plougher> Remove now redundant include of zlib.h
/external/squashfs-tools/squashfs-tools/read_fs.c
9f1e0e214eaff51604105b88153f2d77bc398158 31-Jul-2009 plougher <plougher> Replace zlib uncompress with compressor op
/external/squashfs-tools/squashfs-tools/read_fs.c
34c07d5be0cabec0f7eac86d4b0b24392dcc07c0 30-Jul-2009 plougher <plougher> Add support for compression framework in append code
/external/squashfs-tools/squashfs-tools/read_fs.c
730ef508553ce562277b5d34fd272716e7ed6f13 21-Apr-2009 plougher <plougher> Add missing return value checks for read_block(). Also fixes -Wall warnings
/external/squashfs-tools/squashfs-tools/read_fs.c
e6d6143d60f8f71167f8bb3e4d21a43188dd95fb 31-Mar-2009 plougher <plougher> Yet more tidying
/external/squashfs-tools/squashfs-tools/read_fs.c
169d54f8cd07949d5708ff6ca7d48a06185ff604 30-Mar-2009 plougher <plougher> Fix bug caused by code tidying
/external/squashfs-tools/squashfs-tools/read_fs.c
e69aac119c4660c567d5159729b9875c3330e4bb 30-Mar-2009 plougher <plougher> Code tidy
/external/squashfs-tools/squashfs-tools/read_fs.c
06a19d326d8a13f8ef000d9197af9bb584c3f922 30-Mar-2009 plougher <plougher> Rename read_bytes() to read_destination() and add new read_bytes() function
which deals with EINTR and read() returning EOF or less bytes than expected.
/external/squashfs-tools/squashfs-tools/read_fs.c
62521ad1b88d5412d40936fcc0b2c4196a28a7c7 20-Mar-2009 plougher <plougher> Remove unnecessary space in printf
/external/squashfs-tools/squashfs-tools/read_fs.c
e2d0c0769aa9f7503e391435480203b9e538b436 03-Mar-2009 plougher <plougher> Get rid of unecessary casts
/external/squashfs-tools/squashfs-tools/read_fs.c
20f620fc0e00f5844dddd9532a6b708a23750803 21-Feb-2009 plougher <plougher> Update error message - should be please convert to a Squashfs 4 filesystem
/external/squashfs-tools/squashfs-tools/read_fs.c
61343797593e92ad2cf75b221398c138e1fee058 21-Feb-2009 plougher <plougher> Add inline swapping macros, and conditional #if check for big endian
architectures, the swapping macros now handle this
/external/squashfs-tools/squashfs-tools/read_fs.c
d9b631e9e82c9e0d0e14b7f3d0f2965c523b113d 08-Feb-2009 plougher <plougher> Update date on copyright message.
/external/squashfs-tools/squashfs-tools/read_fs.c
2702e98268c66397751f9ed996a6460f216dba34 08-Feb-2009 plougher <plougher> Make swapping code only compiled on big-endian systems.
/external/squashfs-tools/squashfs-tools/read_fs.c
f83fbe8fc5e688b288f34865cc885a5711118221 26-Jan-2009 plougher <plougher> Re-add commented out superblock swap.
/external/squashfs-tools/squashfs-tools/read_fs.c
44ef17666dae467d17864838f8f08b263958b749 26-Jan-2009 plougher <plougher> Fix signedness
/external/squashfs-tools/squashfs-tools/read_fs.c
78c548ea4206b3c451a1690789e75a77fa6bcfa9 26-Jan-2009 plougher <plougher> Uodate swap macro usage
/external/squashfs-tools/squashfs-tools/read_fs.c
80a46f4c9fd4b452fd9cb6f5987976e0bb6837e6 07-Aug-2008 plougher <plougher> Remove obsolete big endian/little endian code. 4.0 layout is little endian.
/external/squashfs-tools/squashfs-tools/read_fs.c
1b899fc316f7eba7a31da12dc0c9b69ada441059 07-Aug-2008 plougher <plougher> Merge development 4.0 branch onto HEAD. New 4.0 layout is considered
stable and reasonably working - Mksquashfs should generate correct
4.0 filesystems, and the kernel code can mount them. Swapping and Unsquashfs
still broken, but these can be fixed on MAIN...
/external/squashfs-tools/squashfs-tools/read_fs.c
f1cdb557030f345c6cc1f68b52ab89589f2fed81 12-Nov-2007 plougher <plougher> small code cleanup
/external/squashfs-tools/squashfs-tools/read_fs.c
f6cd337f8de328e2b448b9f29c00d9132748f7fe 19-Aug-2007 plougher <plougher> Update email address.
/external/squashfs-tools/squashfs-tools/read_fs.c
4c99cb7f458d8e1c598f1c80793daf3696c9b528 14-Jun-2007 plougher <plougher> Increase max block size to 1 Mbyte, and default block size to 128 Kbytes
/external/squashfs-tools/squashfs-tools/read_fs.c
02bc3bcabf2b219f63961f07293b83629948f026 25-Feb-2007 plougher <plougher> updated mksquashfs to 3.2-r2
/external/squashfs-tools/squashfs-tools/read_fs.c
0e45365737bf5283627e32253f2279c4d9fa32d0 06-Nov-2006 plougher <plougher> Uodate mksquashfs to mksquashfs3.1-r2 with NFS support
/external/squashfs-tools/squashfs-tools/read_fs.c
5507dd92370ba35d9f1671483beb0d4e47058293 06-Nov-2006 plougher <plougher> Update to par_mksquashfs version 3.1
/external/squashfs-tools/squashfs-tools/read_fs.c
a80224fac55b3b5b60bc5ef3a97e3dd525c828bb 17-Aug-2006 plougher <plougher> Fixed fragment_table rounding bug, and inode number append bug.
/external/squashfs-tools/squashfs-tools/read_fs.c
1a35122f8bd26beb614ccb9b9113677b198436a1 02-Aug-2006 plougher <plougher> fix for appending to filesystems larger than 4 GB.
/external/squashfs-tools/squashfs-tools/read_fs.c
9b5bf8c73c0eaf4f1ba0461615f4ed0d405a30cc 20-Mar-2006 plougher <plougher> Update CVS repository to the 3.0 release
/external/squashfs-tools/squashfs-tools/read_fs.c
058eae41952c33345bd0ef290aea8eef37f3ca92 30-Jan-2006 plougher <plougher> Fixed appending.
/external/squashfs-tools/squashfs-tools/read_fs.c
df70c3e920ad82bcc5f5f33d5b7c313be6c2ea4f 27-Jan-2006 plougher <plougher> Additional appending fixes. Not yet tested, and so appending is
still disabled.
/external/squashfs-tools/squashfs-tools/read_fs.c
4c9b090b96c10193f33f9985a5a5c11eb1d23ae3 25-Jan-2006 plougher <plougher> Initial work on getting appending working
/external/squashfs-tools/squashfs-tools/read_fs.c
769592935b09063a5493ebeb530c599753ece5d2 24-Jan-2006 plougher <plougher> Updated release date and copyright information
/external/squashfs-tools/squashfs-tools/read_fs.c
87c0c4afbf3b8ecc814f6bac4d90b70d1e109f44 27-Dec-2005 plougher <plougher> Fixed the endianness MACRO detection. It should work (at least) for Linux
and BSD systems.
/external/squashfs-tools/squashfs-tools/read_fs.c
8cb05cde913bb04297020629566540981a649273 12-Dec-2005 plougher <plougher> A couple of minor code changes, mainly to allow Mksquashfs to build on
Mac OS X without warnings.
/external/squashfs-tools/squashfs-tools/read_fs.c
c2759614989e149db2bad2e8845b4d9f9123cf89 23-Nov-2005 plougher <plougher> Updated email address and copyright dates.
/external/squashfs-tools/squashfs-tools/read_fs.c
1f413c84d736495fd61ff05ebe52c3a01a4d95c2 18-Nov-2005 plougher <plougher> Initial revision
/external/squashfs-tools/squashfs-tools/read_fs.c