From: Jamie Lokier <jamie@shareable.org>
To: "Joseph D. Wagner" <theman@josephdwagner.info>
Cc: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org,
"'Matthew Wilcox'" <willy@debian.org>
Subject: Re: [PATCH] fs/locks.c fcntl_setlease did not check if a file was opened for writing before granting a read lease
Date: Thu, 27 Nov 2003 16:50:43 +0000 [thread overview]
Message-ID: <20031127165043.GA19669@mail.shareable.org> (raw)
In-Reply-To: <000301c3b504$689afbf0$0201a8c0@joe>
Joseph D. Wagner wrote:
> But I THINK this is how a patch would fix the problem, in theory.
Sorry, it won't.
> + if ((arg == F_RDLCK)
> + && ((dentry->d_flags & O_WRONLY)
> + || (dentry->d_flags & O_RDWR)
> + || (dentry->d_flags & O_CREAT)
> + || (dentry->d_flags & O_TRUNC)
> + || (inode->i_flags & O_WRONLY)
> + || (inode->i_flags & O_RDWR)
> + || (inode->i_flags & O_CREAT)
> + || (inode->i_flags & O_TRUNC)))
> + goto out_unlock;
dentry->d_flags is a combination of the S_ flags, not O_ flags.
E.g. S_SYNC, S_NOATIME etc.
inode->i_flags is a combination of the DCACHE_ flags.
E.g. DCACHE_AUTOFS_PENDING, DCACHE_REFERENCED tc.
To detect if anyone has the file open for writing, you'll a new count
field which keeps track of writer references. Something like this:
if ((arg == F_RDLCK)
&& ((atomic_read(&inode->i_writer_count) != 0)))
You'll also need to modify all the places where that needs to be
maintained.
Btw, I'm not sure why the F_WRLCK case needs to check d_count and
i_count. Isn't it enough to check d_count? Won't all opens reference
the inode through a dentry?:
> if ((arg == F_WRLCK)
> && ((atomic_read(&dentry->d_count) > 1)
> || (atomic_read(&inode->i_count) > 1)))
-- Jamie
next prev parent reply other threads:[~2003-11-27 16:50 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-11-27 16:35 [PATCH] fs/locks.c fcntl_setlease did not check if a file was opened for writing before granting a read lease Joseph D. Wagner
2003-11-27 16:50 ` Jamie Lokier [this message]
2003-11-27 17:45 ` Nikita Danilov
2003-11-27 18:03 ` Jamie Lokier
2003-11-27 8:49 ` Joseph D. Wagner
2003-11-28 1:15 ` Jamie Lokier
2003-12-02 10:53 ` Sean Neakums
2003-12-03 2:02 ` Jamie Lokier
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=20031127165043.GA19669@mail.shareable.org \
--to=jamie@shareable.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=theman@josephdwagner.info \
--cc=willy@debian.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.