Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 22 Feb 2010 20:47:57 -0800
From:      Tim Kientzle <kientzle@freebsd.org>
To:        Juergen Lock <nox@jelal.kn-bremen.de>
Cc:        freebsd-hackers@freebsd.org
Subject:   Re: "tar tfv /dev/cd0" speedup patch; Linux compatibility patches
Message-ID:  <4B835DFD.5060507@freebsd.org>
In-Reply-To: <20100222230311.GA19535@triton8.kn-bremen.de>
References:  <20100217215940.GA19713@triton8.kn-bremen.de> <20100219181247.GA35702@triton8.kn-bremen.de> <4B7F711E.6040402@freebsd.org> <201002200100.48161.jkim@FreeBSD.org> <20100220103329.GA35467@triton8.kn-bremen.de> <4B81DB31.70201@freebsd.org> <20100222230311.GA19535@triton8.kn-bremen.de>

next in thread | previous in thread | raw e-mail | index | archive | help
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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4B835DFD.5060507>