"tar tfv /dev/cd0" speedup patch; Linux compatibility patches
Tim Kientzle
kientzle at freebsd.org
Tue Feb 23 04:46:53 UTC 2010
Juergen Lock wrote:
> On Sun, Feb 21, 2010 at 05:17:37PM -0800, Tim Kientzle wrote:
>>
>> Could you try the current version of read_open_filename from:
>>
>> http://libarchive.googlecode.com/svn/trunk/libarchive/archive_read_open_filename.c
>
> Small but important bug:
>
> Index: archive_read_open_filename.c
> @@ -94,7 +94,7 @@ archive_read_open_filename(struct archiv
> struct read_file_data *mine;
> void *buffer;
> int fd;
> - int is_disk_like;
> + int is_disk_like = 0;
Ah. Good catch!
> Btw... the lseek + read combinations could also be replaced with
> pread(2), for the least amount of syscalls. :)
Unfortunately, pread() isn't as portable. It's
an interesting idea, though; maybe I'll play with that.
> (Especially since I
> noticed this version at least when ran on an optical disc with iso9660
> ends up doing lots of lseek()s towards the end without ever reading
> anything from the disc anymore...)
Fortunately, because there are no reads, those lseek()
requests are pretty cheap. But you're right, it
wouldn't be hard to eliminate the unnecessary system
calls.
> Patches are here: (made on stable/8, if they don't apply on head
> I'll have to make extra versions for that...)
> http://people.freebsd.org/~nox/linuxdisk-blk.patch [1]
> http://people.freebsd.org/~nox/lseek-seek_end.patch [2]
I'll let someone more familiar with the linuxolator code
comment on those.
> And yes, with these patches the Linux bsdtar now also runs fast
> on FreeBSD. :)
Excellent!
Thanks so much for your help. If you have any further
ideas (or patches ;-) for improving that libarchive
code, please let me know.
Cheers,
Tim
More information about the freebsd-hackers
mailing list