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
|