mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Brian Pawlowski <beepy@netapp.com>
To: wrona@mat.uni.torun.pl (Michal Wronski)
Cc: linux-kernel@vger.kernel.org, golbi@mat.uni.torun.pl
Subject: Re: [PATCH] 1/2 POSIX message queues
Date: Tue, 25 Nov 2003 05:29:47 -0800 (PST)	[thread overview]
Message-ID: <200311251329.hAPDTlL12292@orbit-fe.eng.netapp.com> (raw)
In-Reply-To: <Pine.GSO.4.58.0311251233040.12527@Juliusz> from Michal Wronski at "Nov 25, 3 12:40:24 pm"

And in teh end, satisfying Torvalds is all up to Tove.

> Here is improved version of mqueues (against 2.6.0-test10).
> As suggested it is split into two patches.
> The first one moves free/load/store_msg from msg.c to util.c
> The second one contains mqueues specific code.
> 
> We have applied some fixes and added support for sysctls. Each parameter
> is now tunable. Global limit for messages size was removed.
> Also there are some changes taken from J. Korty patch to make this code
> more arch portable.
> 
> New library is available at:
> http://www.mat.uni.torun.pl/~wrona/posix_ipc
> 
> Regards,
> Michal
> 
> 
> 
> diff -urN 2.6.0-test10-orig_1/ipc/msg.c 2.6.0-test10-patched_1/ipc/msg.c
> --- 2.6.0-test10-orig_1/ipc/msg.c	2003-11-07 17:07:13.000000000 +0100
> +++ 2.6.0-test10-patched_1/ipc/msg.c	2003-11-21 17:11:17.000000000 +0100
> @@ -51,11 +51,6 @@
>  	struct task_struct* tsk;
>  };
> 
> -struct msg_msgseg {
> -	struct msg_msgseg* next;
> -	/* the next part of the message follows immediately */
> -};
> -
>  #define SEARCH_ANY		1
>  #define SEARCH_EQUAL		2
>  #define SEARCH_NOTEQUAL		3
> @@ -129,106 +124,6 @@
>  	return msg_buildid(id,msq->q_perm.seq);
>  }
> 
> -static void free_msg(struct msg_msg* msg)
> -{
> -	struct msg_msgseg* seg;
> -
> -	security_msg_msg_free(msg);
> -
> -	seg = msg->next;
> -	kfree(msg);
> -	while(seg != NULL) {
> -		struct msg_msgseg* tmp = seg->next;
> -		kfree(seg);
> -		seg = tmp;
> -	}
> -}
> -
> -static struct msg_msg* load_msg(void* src, int len)
> -{
> -	struct msg_msg* msg;
> -	struct msg_msgseg** pseg;
> -	int err;
> -	int alen;
> -
> -	alen = len;
> -	if(alen > DATALEN_MSG)
> -		alen = DATALEN_MSG;
> -
> -	msg = (struct msg_msg *) kmalloc (sizeof(*msg) + alen, GFP_KERNEL);
> -	if(msg==NULL)
> -		return ERR_PTR(-ENOMEM);
> -
> -	msg->next = NULL;
> -	msg->security = NULL;
> -
> -	if (copy_from_user(msg+1, src, alen)) {
> -		err = -EFAULT;
> -		goto out_err;
> -	}
> -
> -	len -= alen;
> -	src = ((char*)src)+alen;
> -	pseg = &msg->next;
> -	while(len > 0) {
> -		struct msg_msgseg* seg;
> -		alen = len;
> -		if(alen > DATALEN_SEG)
> -			alen = DATALEN_SEG;
> -		seg = (struct msg_msgseg *) kmalloc (sizeof(*seg) + alen, GFP_KERNEL);
> -		if(seg==NULL) {
> -			err=-ENOMEM;
> -			goto out_err;
> -		}
> -		*pseg = seg;
> -		seg->next = NULL;
> -		if(copy_from_user (seg+1, src, alen)) {
> -			err = -EFAULT;
> -			goto out_err;
> -		}
> -		pseg = &seg->next;
> -		len -= alen;
> -		src = ((char*)src)+alen;
> -	}
> -
> -	err = security_msg_msg_alloc(msg);
> -	if (err)
> -		goto out_err;
> -
> -	return msg;
> -
> -out_err:
> -	free_msg(msg);
> -	return ERR_PTR(err);
> -}
> -
> -static int store_msg(void* dest, struct msg_msg* msg, int len)
> -{
> -	int alen;
> -	struct msg_msgseg *seg;
> -
> -	alen = len;
> -	if(alen > DATALEN_MSG)
> -		alen = DATALEN_MSG;
> -	if(copy_to_user (dest, msg+1, alen))
> -		return -1;
> -
> -	len -= alen;
> -	dest = ((char*)dest)+alen;
> -	seg = msg->next;
> -	while(len > 0) {
> -		alen = len;
> -		if(alen > DATALEN_SEG)
> -			alen = DATALEN_SEG;
> -		if(copy_to_user (dest, seg+1, alen))
> -			return -1;
> -		len -= alen;
> -		dest = ((char*)dest)+alen;
> -		seg=seg->next;
> -	}
> -	return 0;
> -}
> -
>  static inline void ss_add(struct msg_queue* msq, struct msg_sender* mss)
>  {
>  	mss->tsk=current;
> diff -urN 2.6.0-test10-orig_1/ipc/util.c 2.6.0-test10-patched_1/ipc/util.c
> --- 2.6.0-test10-orig_1/ipc/util.c	2003-11-07 17:07:13.000000000 +0100
> +++ 2.6.0-test10-patched_1/ipc/util.c	2003-11-21 17:11:17.000000000 +0100
> @@ -611,3 +611,107 @@
>  }
> 
>  #endif /* CONFIG_SYSVIPC */
> +
> +#ifdef CONFIG_SYSVIPC
> +
> +void free_msg(struct msg_msg* msg)
> +{
> +	struct msg_msgseg* seg;
> +
> +	security_msg_msg_free(msg);
> +
> +	seg = msg->next;
> +	kfree(msg);
> +	while(seg != NULL) {
> +		struct msg_msgseg* tmp = seg->next;
> +		kfree(seg);
> +		seg = tmp;
> +	}
> +}
> +
> +struct msg_msg* load_msg(void* src, int len)
> +{
> +	struct msg_msg* msg;
> +	struct msg_msgseg** pseg;
> +	int err;
> +	int alen;
> +
> +	alen = len;
> +	if(alen > DATALEN_MSG)
> +		alen = DATALEN_MSG;
> +
> +	msg = (struct msg_msg *) kmalloc (sizeof(*msg) + alen, GFP_KERNEL);
> +	if(msg==NULL)
> +		return ERR_PTR(-ENOMEM);
> +
> +	msg->next = NULL;
> +	msg->security = NULL;
> +
> +	if (copy_from_user(msg+1, src, alen)) {
> +		err = -EFAULT;
> +		goto out_err;
> +	}
> +
> +	len -= alen;
> +	src = ((char*)src)+alen;
> +	pseg = &msg->next;
> +	while(len > 0) {
> +		struct msg_msgseg* seg;
> +		alen = len;
> +		if(alen > DATALEN_SEG)
> +			alen = DATALEN_SEG;
> +		seg = (struct msg_msgseg *) kmalloc (sizeof(*seg) + alen, GFP_KERNEL);
> +		if(seg==NULL) {
> +			err=-ENOMEM;
> +			goto out_err;
> +		}
> +		*pseg = seg;
> +		seg->next = NULL;
> +		if(copy_from_user (seg+1, src, alen)) {
> +			err = -EFAULT;
> +			goto out_err;
> +		}
> +		pseg = &seg->next;
> +		len -= alen;
> +		src = ((char*)src)+alen;
> +	}
> +
> +	err = security_msg_msg_alloc(msg);
> +	if (err)
> +		goto out_err;
> +
> +	return msg;
> +
> +out_err:
> +	free_msg(msg);
> +	return ERR_PTR(err);
> +}
> +
> +int store_msg(void* dest, struct msg_msg* msg, int len)
> +{
> +	int alen;
> +	struct msg_msgseg *seg;
> +
> +	alen = len;
> +	if(alen > DATALEN_MSG)
> +		alen = DATALEN_MSG;
> +	if(copy_to_user (dest, msg+1, alen))
> +		return -1;
> +
> +	len -= alen;
> +	dest = ((char*)dest)+alen;
> +	seg = msg->next;
> +	while(len > 0) {
> +		alen = len;
> +		if(alen > DATALEN_SEG)
> +			alen = DATALEN_SEG;
> +		if(copy_to_user (dest, seg+1, alen))
> +			return -1;
> +		len -= alen;
> +		dest = ((char*)dest)+alen;
> +		seg=seg->next;
> +	}
> +	return 0;
> +}
> +
> +#endif /* CONFIG_SYSVIPC */
> diff -urN 2.6.0-test10-orig_1/ipc/util.h 2.6.0-test10-patched_1/ipc/util.h
> --- 2.6.0-test10-orig_1/ipc/util.h	2003-11-07 17:07:13.000000000 +0100
> +++ 2.6.0-test10-patched_1/ipc/util.h	2003-11-21 17:11:17.000000000 +0100
> @@ -25,6 +25,16 @@
>  	struct kern_ipc_perm* p;
>  };
> 
> +struct msg_msgseg {
> +	struct msg_msgseg* next;
> +	/* the next part of the message follows immediately */
> +};
> +
> +void free_msg(struct msg_msg* msg);
> +struct msg_msg* load_msg(void* src, int len);
> +int store_msg(void* dest, struct msg_msg* msg, int len);
> +
> +
>  void __init ipc_init_ids(struct ipc_ids* ids, int size);
> 
>  /* must be called with ids->sem acquired.*/
> -
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/


  reply	other threads:[~2003-11-25 13:30 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-11-25 11:40 Michal Wronski
2003-11-25 13:29 ` Brian Pawlowski [this message]
  -- strict thread matches above, loose matches on Subject: below --
2003-10-03 15:57 [PATCH] [1/2] posix " Peter Wächtler

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200311251329.hAPDTlL12292@orbit-fe.eng.netapp.com \
    --to=beepy@netapp.com \
    --cc=golbi@mat.uni.torun.pl \
    --cc=linux-kernel@vger.kernel.org \
    --cc=wrona@mat.uni.torun.pl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®