From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeff Garzik Subject: Re: [Patch 2/7] tabled: fix the endless recusion when reading long objects Date: Tue, 06 Apr 2010 13:02:10 -0400 Message-ID: <4BBB6912.3030706@garzik.org> References: <20100401195116.32142697@redhat.com> Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Return-path: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:sender:message-id:date:from :user-agent:mime-version:to:cc:subject:references:in-reply-to :content-type:content-transfer-encoding; bh=+fvmdq1Y7Un5+SZs3sa1lCIIhCqxsEArrnYv4dvHBms=; b=gK1sIMc2616b0I6z31MB54ZVmn5ZUSAAKy4nc57kY1s3XfZg+M4/GV5w+zgNLt2RbA GuODwdfwpzWRK8QL35M9yuzESSdCKMxd20M/apDmvNZa4peuU3FM9D4/O7QlrRkzhnpd ZSRU56ZQOnrWS6mqCP++3avbmVmSqgZ7GE5XQ= In-Reply-To: <20100401195116.32142697@redhat.com> Sender: hail-devel-owner@vger.kernel.org List-ID: Content-Type: text/plain; charset="us-ascii"; format="flowed" To: Pete Zaitcev Cc: Project Hail List , Jeff Darcy On 04/01/2010 09:51 PM, Pete Zaitcev wrote: > At certain network and disk speeds, tabled can blow its stack by > filling it with (essentially) endless recursion: > > #2 0x000000000040c077 in cli_write_free (cli=, tmp= > 0x7bb910, done=) at server.c:397 > #3 0x000000000040ca55 in cli_writable (cli=0x686e90) at server.c:525 > #4 0x000000000040da65 in cli_write_start (cli=0x686e90) at server.c:561 > #5 0x0000000000408ad5 in object_get_poke (cli=0x686e90) at object.c:1039 > #6 0x000000000040c077 in cli_write_free (cli=, tmp= > 0x7bb8d0, done=) at server.c:397 > #7 0x000000000040ca55 in cli_writable (cli=0x686e90) at server.c:525 > #8 0x000000000040da65 in cli_write_start (cli=0x686e90) at server.c:561 > #9 0x0000000000408ad5 in object_get_poke (cli=0x686e90) at object.c:1039 > #10 0x000000000040c077 in cli_write_free (cli=, tmp= > 0x7bb890, done=) at server.c:397 > > The fix is to deliver callbacks only from the top level. > > Callbacks must be delivered every time a send is completed, > which amounts to every call to is_writeable(). Since there > is a large number of callers to it, we found it advantageous > to run callbacks from every source of events. In other words, > every function that is passed to event_set must invoke > cli_write_run_compl. Mind that storage.c contains calls to > event_set. > > Signed-off-by: Pete Zaitcev > > --- > server/object.c | 4 +++ > server/server.c | 52 +++++++++++++++++++++++++++++++++++----------- > server/tabled.h | 6 +++++ > 3 files changed, 50 insertions(+), 12 deletions(-) applied 2-7