All of lore.kernel.org
 help / color / mirror / Atom feed
From: Steve Dickson <SteveD@redhat.com>
To: "J. Bruce Fields" <bfields@fieldses.org>
Cc: Neil Brown <neilb@suse.de>, Chuck Lever <chuck.lever@oracle.com>,
	Phil Endecott
	<phil_bnaqb_endecott-wZDNlLIRyE5g9hUCZPvPmw@public.gmane.org>,
	linux-nfs@vger.kernel.org
Subject: Re: Make sm-notify faster if there are no servers to notify
Date: Fri, 05 Dec 2008 14:12:27 -0500	[thread overview]
Message-ID: <49397D1B.3000701@RedHat.com> (raw)
In-Reply-To: <20081205172913.GB29227@fieldses.org>

J. Bruce Fields wrote:
> On Fri, Dec 05, 2008 at 11:38:24AM -0500, bfields wrote:
>> On Fri, Dec 05, 2008 at 08:26:44AM -0500, Steve Dickson wrote:
>>> J. Bruce Fields wrote:
>>>>> I think it would still be valuable to replace the 'sync' with two
>>>>> 'fsync's, one of the file, one on the directory.
>>>> Sure, may as well.--b.
>>>>
>>> Something similar to this:
>>>
>>> diff -up nfs-utils/utils/statd/sm-notify.c.orig nfs-utils/utils/statd/sm-notify.c
>>> --- nfs-utils/utils/statd/sm-notify.c.orig	2008-11-17 15:06:13.000000000 -0500
>>> +++ nfs-utils/utils/statd/sm-notify.c	2008-12-05 08:21:52.000000000 -0500
>>> @@ -211,12 +211,6 @@ usage:		fprintf(stderr,
>>>  	backup_hosts(_SM_DIR_PATH, _SM_BAK_PATH);
>>>  	get_hosts(_SM_BAK_PATH);
>>>  
>>> -	/* If there are not hosts to notify, just exit */
>>> -	if (!hosts) {
>>> -		nsm_log(LOG_DEBUG, "No hosts to notify; exiting");
>>> -		return 0;
>>> -	}
>> This was still a huge boot-time win in the common case, so now that
>> we've committed to it I'd rather not regress.  Let's just skip the
>> sync()s/fsncy()s in the !hosts case--that looks to me like the simplest
>> correct solution for now.
> 
> My argument for correctness: if we don't sync in that case, then on
> reboot the rename that updates the state will either have happened or
> (if a crash comes too soon) not.
> 
> It is OK for that update to not happen as long as we're assured it
> happens before the first lock request is made or replied to, or the
> first monitor request completes, as, in the absence of any notifies,
> those are the only points at which the new state will be exposed to the
> outside world.
Doesn't the sync() have to happen before the file is first
read by stated. Meaning before statd:main() calls load_state_number()?

> 
> The first lock request will also require an upcall to statd.  So we're
> OK as long as any monitor requests (from either the local kernel or
> remote peers) do a sync.
> 
> And statd should be doing a sync before responding to any monitor
> request.  As long as the SM_DIR is on the same filesystem as the state
> file, that would do the job....  But now that I look, I see statd is
> using an open with O_SYNC to ensure the new statd record hits stable
> storage.  Which we can't count on being enough.
> 
> How about adding an explicit fsync() of the state file (and parent
> directory) to statd's first succesful creation of a statd record,
> together with a comment explaining this?  So around about line 194 in
> utils/statd/monitor.c:sm_mon_1_svc()?
If we do the sync()/fsync() here we will also have to update MY_STATE
since that's what is the number used in the RPCs. But also I think
doing the sync this late be a bit waste since there is real good
chance the rename has already been sync-ed out by previous sync()
during boot up... or am I missing something... 

steved.


  parent reply	other threads:[~2008-12-05 19:14 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-10-29  0:13 Make sm-notify faster if there are no servers to notify Phil Endecott
     [not found] ` <1225239200402-YnoLgZYwwYuCbKHnblo0pmrPP3OPMK55cpQHUIT47Ck@public.gmane.org>
2008-10-29 17:18   ` J. Bruce Fields
2008-10-29 17:30     ` Phil Endecott
     [not found]       ` <1225301403729-YnoLgZYwwYuCbKHnblo0pmrPP3OPMK55cpQHUIT47Ck@public.gmane.org>
2008-10-29 17:37         ` J. Bruce Fields
2008-10-29 17:45           ` Phil Endecott
     [not found]             ` <1225302305994-YnoLgZYwwYuCbKHnblo0pmrPP3OPMK55cpQHUIT47Ck@public.gmane.org>
2008-10-29 18:41               ` J. Bruce Fields
2008-10-29 20:30                 ` Chuck Lever
2008-10-29 21:11                   ` J. Bruce Fields
2008-11-09 19:25                     ` J. Bruce Fields
2008-11-10  0:52                       ` Chuck Lever
2008-11-10  0:55                         ` J. Bruce Fields
2008-11-10  1:00                           ` Chuck Lever
2008-11-10  9:40                         ` Phil Endecott
2008-11-10 13:41                     ` Steve Dickson
     [not found]                       ` <49183A12.7010707-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2008-12-04 21:10                         ` J. Bruce Fields
2008-12-05  3:34                           ` Neil Brown
     [not found]                             ` <18744.41310.635618.148281-wvvUuzkyo1EYVZTmpyfIwg@public.gmane.org>
2008-12-05  3:58                               ` J. Bruce Fields
2008-12-05 13:26                                 ` Steve Dickson
     [not found]                                   ` <49392C14.7000709-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2008-12-05 16:38                                     ` J. Bruce Fields
2008-12-05 17:29                                       ` J. Bruce Fields
2008-12-05 18:41                                         ` Chuck Lever
2008-12-06  2:42                                           ` J. Bruce Fields
2008-12-08 19:50                                             ` Chuck Lever
2008-12-11 22:44                                               ` J. Bruce Fields
2008-12-05 19:12                                         ` Steve Dickson [this message]
     [not found]                                           ` <49397D1B.3000701-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2008-12-06  2:49                                             ` J. Bruce Fields
2008-12-05 18:42                                       ` Steve Dickson
     [not found]                                         ` <4939760A.9050304-AfCzQyP5zfLQT0dZR+AlfA@public.gmane.org>
2008-12-06  3:08                                           ` J. Bruce Fields
2008-10-31 17:52           ` Steve Dickson

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=49397D1B.3000701@RedHat.com \
    --to=steved@redhat.com \
    --cc=bfields@fieldses.org \
    --cc=chuck.lever@oracle.com \
    --cc=linux-nfs@vger.kernel.org \
    --cc=neilb@suse.de \
    --cc=phil_bnaqb_endecott-wZDNlLIRyE5g9hUCZPvPmw@public.gmane.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.