Skip site navigation (1)Skip section navigation (2)
Date:       Wed, 21 Jun 2000 07:25:19 +1000
From:      Peter Jeremy <peter.jeremy@alcatel.com.au>
To:        Alfred Perlstein <bright@wintelcom.net>
Cc:        arch@FreeBSD.ORG
Subject:   Re: kblob discussion.
Message-ID:  <00Jun21.072527est.115222@border.alcanet.com.au>
In-Reply-To: <20000619111309.E26801@fw.wintelcom.net>; from bright@wintelcom.net on Tue, Jun 20, 2000 at 04:15:17AM %2B1000
References:  <20000619111309.E26801@fw.wintelcom.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2000-Jun-20 04:15:17 +1000, Alfred Perlstein <bright@wintelcom.net> wrote:
>It's a new syscall, less overhead than sendfile and useful for
>serving small chunks of data very quickly.

What is the behaviour of kblobs across fork() and exec()?
Can that be controlled (along the lines of fcntl(...,F_[SG]ETFD,...))?
How do you destroy a kblob when it's no longer needed?

>/*
> * see sendfile(2), but instead of the fd referencing a vnode it
> * references a fd returned from kblob
> */
>int kblobsend __P((int, int, off_t, size_t, struct sf_hdtr *,
>		off_t *, int));

Wouldn't it be easier for kblob(2) to return an fd from the same
pool as files/sockets - in which case it could just be passed to
sendfile(2) which would internally distiguish between a file and
a kblob.

Also it seems that the current API (for both sendfile(2) and
kblobsend(2)) contains an unnecessarily arbitrary restriction
that you want to send an optional header, a single object, then
an optional trailer.  Using writev(2) as a model, how about the
following:

struct io_obj {
	enum { OBJ_FILE, OBJ_KBLOB, OBJ_DATA }	obj_type;
	union {
		const void	*obj_data;	/* OBJ_DATA */
		int		obj_fd;		/* OBJ_FILE, OBJ_KBLOB */
	}	u;
	size_t			obj_size;	/* 0 for entire file/kblob */
	off_t			obj_offset;	/* start offset in object */
};

ssize_t writeobj(int sock, const struct io_obj *objp, int nobj);

This would allow an arbitrary assortment of objects to be written
in a single syscall.  It also offers a possible path to readobj(2)
(which would be able to read directly into a file, user memory, or
create a kblob()).

Peter


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?00Jun21.072527est.115222>