From: aaptel@suse.com (Aurélien Aptel)
To: linux-sparse@vger.kernel.org
Subject: wrong "imbalanced unlock" warning?
Date: Mon, 29 Jan 2018 17:32:53 +0100 [thread overview]
Message-ID: <87k1w0d3re.fsf@suse.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 1524 bytes --]
Hi,
While compiling the kernel cifs for-next (from here [1]) I've run into a
strange sparse warning.
fs/cifs/smbdirect.c:1943:56: warning: context imbalance in 'smbd_recv_buf' - unexpected unlock
The code is basically doing:
int queue_length;
....
queue_length = info->reassembly_queue_length;
....
/*
* No need to lock if we are not at the
* end of the queue
*/
if (!queue_length)
spin_lock_irq(&info->reassembly_queue_lock);
list_del(&response->list);
queue_removed++;
if (!queue_length)
spin_unlock_irq(&info->reassembly_queue_lock);
I don't think there's anything wrong with this code. I've tried adding a
test in sparse validation/context.c to reproduce the warning:
add this at the bottom:
static void warn_cifs(void)
{
int x;
x = condition;
if(!x)
a();
if(!x)
r();
}
a() adds a lock, r() removes it.
and in validation/ run
./test-suite single context.c
TEST Check -Wcontext (context.c)
context.c passed !
I've played around with the test and tried to make it similar to
smbdirect.c code (see attached file). Place it in validation and run
./test-suite single cifs.c
I've also checked out my system revision of sparse, but I couldn't make
it fail either.
Although it doesn't look like it, maybe there is an issue in
smbdirect.c, what do you think?
1: git://git.samba.org/sfrench/cifs-2.6.git tip is 36c7ce4a17f2 as of
now
make sure to enable INFINIBAND, CIFS and CIFS_SMB_DIRECT
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: cifs.c --]
[-- Type: text/x-csrc, Size: 679 bytes --]
static void lock(void) __attribute__((context(0,1)))
{
__context__(1);
}
static void unlock(void) __attribute__((context(1,0)))
{
__context__(-1);
}
extern int cond, cond2;
static void foo (void)
{
}
static void warn_cifs(void)
{
again:
if (cond) {
return;
}
if (cond) {
int x;
x = cond2;
while (cond) {
if (cond) {
goto read_rfc1002_done;
}
if (cond) {
x--;
if (!x)
lock();
foo();
if (!x)
unlock();
} else
foo();
}
lock();
foo();
unlock();
read_rfc1002_done:
return;
}
if (cond)
return;
goto again;
}
/*
* check-name: Check -Wcontext bis
*
* check-error-start
* check-error-end
*/
[-- Attachment #3: Type: text/plain, Size: 245 bytes --]
--
Aurélien Aptel / SUSE Labs Samba Team
GPG: 1839 CB5F 9F5B FB9B AA97 8C99 03C8 A49B 521B D5D3
SUSE Linux GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
GF: Felix Imendörffer, Jane Smithard, Graham Norton, HRB 21284 (AG Nürnberg)
next reply other threads:[~2018-01-29 16:32 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-01-29 16:32 Aurélien Aptel [this message]
2018-01-29 18:24 ` wrong "imbalanced unlock" warning? Luc Van Oostenryck
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=87k1w0d3re.fsf@suse.com \
--to=aaptel@suse.com \
--cc=linux-sparse@vger.kernel.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.