From: Matthew Wilcox <willy@debian.org>
To: Andy Tai <lichengtai@yahoo.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: file locking (fcntl) bug in 2.4.19
Date: Fri, 30 Aug 2002 13:25:21 +0100 [thread overview]
Message-ID: <20020830132521.Y28676@parcelfarce.linux.theplanet.co.uk> (raw)
Yep, 2.4 & 2.5 are broken. Here's a patch which both marcelo and alan
refuse to apply, but fixes the problem.
diff -urNX dontdiff linux-2418/fs/locks.c linux-2418-acct/fs/locks.c
--- linux-2418/fs/locks.c Thu Oct 11 08:52:18 2001
+++ linux-2418-acct/fs/locks.c Mon Jul 1 16:23:36 2002
@@ -134,15 +134,9 @@
static kmem_cache_t *filelock_cache;
/* Allocate an empty lock structure. */
-static struct file_lock *locks_alloc_lock(int account)
+static struct file_lock *locks_alloc_lock(void)
{
- struct file_lock *fl;
- if (account && current->locks >= current->rlim[RLIMIT_LOCKS].rlim_cur)
- return NULL;
- fl = kmem_cache_alloc(filelock_cache, SLAB_KERNEL);
- if (fl)
- current->locks++;
- return fl;
+ return kmem_cache_alloc(filelock_cache, SLAB_KERNEL);
}
/* Free a lock which is not in use. */
@@ -152,7 +146,6 @@
BUG();
return;
}
- current->locks--;
if (waitqueue_active(&fl->fl_wait))
panic("Attempting to free lock with active wait queue");
@@ -219,7 +212,7 @@
/* Fill in a file_lock structure with an appropriate FLOCK lock. */
static struct file_lock *flock_make_lock(struct file *filp, unsigned int type)
{
- struct file_lock *fl = locks_alloc_lock(1);
+ struct file_lock *fl = locks_alloc_lock();
if (fl == NULL)
return NULL;
@@ -348,7 +341,7 @@
/* Allocate a file_lock initialised to this type of lease */
static int lease_alloc(struct file *filp, int type, struct file_lock **flp)
{
- struct file_lock *fl = locks_alloc_lock(1);
+ struct file_lock *fl = locks_alloc_lock();
if (fl == NULL)
return -ENOMEM;
@@ -712,7 +705,7 @@
size_t count)
{
struct file_lock *fl;
- struct file_lock *new_fl = locks_alloc_lock(0);
+ struct file_lock *new_fl = locks_alloc_lock();
int error;
if (new_fl == NULL)
@@ -872,8 +865,8 @@
* We may need two file_lock structures for this operation,
* so we get them in advance to avoid races.
*/
- new_fl = locks_alloc_lock(0);
- new_fl2 = locks_alloc_lock(0);
+ new_fl = locks_alloc_lock();
+ new_fl2 = locks_alloc_lock();
error = -ENOLCK; /* "no luck" */
if (!(new_fl && new_fl2))
goto out_nolock;
@@ -1426,7 +1419,7 @@
int fcntl_setlk(unsigned int fd, unsigned int cmd, struct flock *l)
{
struct file *filp;
- struct file_lock *file_lock = locks_alloc_lock(0);
+ struct file_lock *file_lock = locks_alloc_lock();
struct flock flock;
struct inode *inode;
int error;
@@ -1582,7 +1575,7 @@
int fcntl_setlk64(unsigned int fd, unsigned int cmd, struct flock64 *l)
{
struct file *filp;
- struct file_lock *file_lock = locks_alloc_lock(0);
+ struct file_lock *file_lock = locks_alloc_lock();
struct flock64 flock;
struct inode *inode;
int error;
--
Revolutions do not require corporate support.
next reply other threads:[~2002-08-30 12:20 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-08-30 12:25 Matthew Wilcox [this message]
2002-08-30 20:50 ` file locking (fcntl) bug in 2.4.19 Andy Tai
2002-08-31 4:13 ` Andy Tai
-- strict thread matches above, loose matches on Subject: below --
2002-08-30 3:52 Andy Tai
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=20020830132521.Y28676@parcelfarce.linux.theplanet.co.uk \
--to=willy@debian.org \
--cc=lichengtai@yahoo.com \
--cc=linux-kernel@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox