From: Suresh Jayaraman <sjayaraman-l3A5Bk7waGM@public.gmane.org>
To: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: smfrench-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH 13/15] cifs: convert cifsFileInfo->count to non-atomic counter
Date: Thu, 07 Oct 2010 17:42:57 +0530 [thread overview]
Message-ID: <4CADB949.2070205@suse.de> (raw)
In-Reply-To: <20101007071819.2446312b-xSBYVWDuneFaJnirhKH9O4GKTjYczspe@public.gmane.org>
On 10/07/2010 04:48 PM, Jeff Layton wrote:
> On Thu, 07 Oct 2010 14:18:50 +0530
> Suresh Jayaraman <sjayaraman-l3A5Bk7waGM@public.gmane.org> wrote:
>
>> On 10/07/2010 01:24 AM, Jeff Layton wrote:
>>> The count for cifsFileInfo is currently an atomic, but that just adds
>>> complexity for little value. We generally need to hold cifs_file_list_lock
>>> to traverse the lists anyway so we might as well make this counter
>>> non-atomic and simply use the cifs_file_list_lock to protect it.
>>>
>>> Signed-off-by: Jeff Layton <jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
>>> ---
>>> fs/cifs/cifsglob.h | 9 ++++++---
>>> fs/cifs/file.c | 8 +++++---
>>> 2 files changed, 11 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/fs/cifs/cifsglob.h b/fs/cifs/cifsglob.h
>>> index 531a768..f3c4e00 100644
>>> --- a/fs/cifs/cifsglob.h
>>> +++ b/fs/cifs/cifsglob.h
>>> @@ -393,16 +393,19 @@ struct cifsFileInfo {
>>> struct list_head llist; /* list of byte range locks we have. */
>>> bool invalidHandle:1; /* file closed via session abend */
>>> bool oplock_break_cancelled:1;
>>> - atomic_t count; /* reference count */
>>> + int count; /* refcount -- protected by cifs_file_list_lock */
>>> struct mutex fh_mutex; /* prevents reopen race after dead ses*/
>>> struct cifs_search_info srch_inf;
>>> struct work_struct oplock_break; /* work for oplock breaks */
>>> };
>>>
>>> -/* Take a reference on the file private data */
>>> +/*
>>> + * Take a reference on the file private data. Must be called with
>>> + * cifs_file_list_lock held for read or write.
>>> + */
>>> static inline void cifsFileInfo_get(struct cifsFileInfo *cifs_file)
>>> {
>>> - atomic_inc(&cifs_file->count);
>>> + ++cifs_file->count;
>>
>> Since we now use cifs_file_list_lock to protect cifs_file->count too,
>> shouldn't all the callers of cifsFileInfo_get() need to acquire a write
>> lock instead of read lock?
>>
>
> I puzzled over that too, but it's not really necessary. The lock is
> really there to make sure that the list traversals are safe from
> removals. We do need the write lock when inserting or removing the
> cifsFileInfo into the lists, but for incrementing a non-zero refcount a
> read lock is sufficient. That will prevent cifsFileInfo_put from
> racing in, decrementing the refcount and modifying the list since it
> needs a write lock.
Fine, but, isn't possible to get the refcount wrong due to calls to
cifsFileInfo_get() from multiple callers?
> TBH, I think it would be far simpler (and maybe even more efficient) to
> use a regular spinlock here, but I figured this would be easier to get
> past review.
>
I'm little worried about the overhead as I'm not sure whether all the
paths are low contention paths...
--
Suresh Jayaraman
next prev parent reply other threads:[~2010-10-07 12:12 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-10-06 19:54 [PATCH 00/15] cifs: clean up management of open filehandle (try #2) Jeff Layton
[not found] ` <1286394857-32541-1-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-10-06 19:54 ` [PATCH 01/15] cifs: keep dentry reference in cifsFileInfo instead of inode reference Jeff Layton
2010-10-06 19:54 ` [PATCH 02/15] cifs: don't use vfsmount to pin superblock for oplock breaks Jeff Layton
2010-10-06 19:54 ` [PATCH 03/15] cifs: eliminate cifs_posix_open_inode_helper Jeff Layton
2010-10-06 19:54 ` [PATCH 04/15] cifs: eliminate oflags option from cifs_new_fileinfo Jeff Layton
2010-10-06 19:54 ` [PATCH 05/15] cifs: eliminate the inode argument " Jeff Layton
2010-10-06 19:54 ` [PATCH 06/15] cifs: clean up cifs_reopen_file Jeff Layton
2010-10-06 19:54 ` [PATCH 07/15] cifs: cifs_write argument change and cleanup Jeff Layton
2010-10-06 19:54 ` [PATCH 08/15] cifs: eliminate pfile pointer from cifsFileInfo Jeff Layton
2010-10-06 19:54 ` [PATCH 09/15] cifs: move cifs_new_fileinfo to file.c Jeff Layton
2010-10-06 19:54 ` [PATCH 10/15] cifs: rename GlobalSMBSeslock to cifs_file_list_lock Jeff Layton
2010-10-06 19:54 ` [PATCH 11/15] cifs: move cifsFileInfo_put to file.c Jeff Layton
2010-10-06 19:54 ` [PATCH 12/15] cifs: move close processing from cifs_close to cifsFileInfo_put Jeff Layton
[not found] ` <1286394857-32541-13-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-10-07 7:07 ` Suresh Jayaraman
[not found] ` <4CAD71A7.20808-l3A5Bk7waGM@public.gmane.org>
2010-10-07 11:07 ` Jeff Layton
[not found] ` <20101007070726.0ef1b1a8-xSBYVWDuneFaJnirhKH9O4GKTjYczspe@public.gmane.org>
2010-10-08 9:34 ` Suresh Jayaraman
2010-10-06 19:54 ` [PATCH 13/15] cifs: convert cifsFileInfo->count to non-atomic counter Jeff Layton
[not found] ` <1286394857-32541-14-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-10-07 8:48 ` Suresh Jayaraman
[not found] ` <4CAD8972.9090406-l3A5Bk7waGM@public.gmane.org>
2010-10-07 11:18 ` Jeff Layton
[not found] ` <20101007071819.2446312b-xSBYVWDuneFaJnirhKH9O4GKTjYczspe@public.gmane.org>
2010-10-07 12:12 ` Suresh Jayaraman [this message]
[not found] ` <4CADB949.2070205-l3A5Bk7waGM@public.gmane.org>
2010-10-07 12:43 ` Jeff Layton
[not found] ` <20101007084334.0e03f586-xSBYVWDuneFaJnirhKH9O4GKTjYczspe@public.gmane.org>
2010-10-07 15:37 ` Steve French
[not found] ` <AANLkTi=MMzU6nr6+19PKW=gPKTdk9e-O5pjrYWmbV4AJ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2010-10-07 16:59 ` Jeff Layton
[not found] ` <20101007125932.4506f3e6-xSBYVWDuneFaJnirhKH9O4GKTjYczspe@public.gmane.org>
2010-10-07 17:42 ` Jeff Layton
2010-10-07 18:05 ` Christoph Hellwig
2010-10-06 19:54 ` [PATCH 14/15] cifs: wait for writeback to complete in cifs_flush Jeff Layton
2010-10-06 19:54 ` [PATCH 15/15] cifs: eliminate cifsInodeInfo->write_behind_rc Jeff Layton
2010-10-08 9:40 ` [PATCH 00/15] cifs: clean up management of open filehandle (try #2) Suresh Jayaraman
-- strict thread matches above, loose matches on Subject: below --
2010-10-08 17:30 [PATCH 00/15] cifs: clean up management of open filehandle (try #3) Jeff Layton
[not found] ` <1286559072-29032-1-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-10-08 17:31 ` [PATCH 13/15] cifs: convert cifsFileInfo->count to non-atomic counter Jeff Layton
[not found] ` <1286559072-29032-14-git-send-email-jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2010-10-11 5:46 ` Suresh Jayaraman
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=4CADB949.2070205@suse.de \
--to=sjayaraman-l3a5bk7wagm@public.gmane.org \
--cc=jlayton-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
--cc=linux-cifs-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=smfrench-Re5JQEeQqe8AvxtiuMwx3w@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.