* stuff
@ 2008-04-24 20:34 J. Bruce Fields
2008-04-25 17:12 ` don't call ->copy_lock methods on return of conflicting locks [was: Re: stuff] J. Bruce Fields
0 siblings, 1 reply; 3+ messages in thread
From: J. Bruce Fields @ 2008-04-24 20:34 UTC (permalink / raw)
To: Trond Myklebust; +Cc: linux-nfs
Trond--you mentioned noticing some locks_copy_locks() abuses; is this
what you were thinking of?
--b.
commit 07c5abe6899d8ab49368604e64894821d4f60bf9
Author: J. Bruce Fields <bfields@citi.umich.edu>
Date: Thu Apr 24 10:08:22 2008 -0400
locks: don't call ->copy_lock methods on return of conflicting locks
The file_lock structure is used both as a heavy-weight representation of
an active lock, with pointers to reference-counted structures, etc., and
as a simple container for parameters that describe a file lock.
The conflicting lock returned from __posix_lock_file is an example of
the latter; so don't call the filesystem or lock manager callbacks when
copying to it. This also saves the need for an unnecessary
locks_init_lock in the nfsv4 server.
Thanks to Trond for pointing out the error.
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Cc: Trond Myklebust <Trond.Myklebust@netapp.com>
diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c
index 1f122c1..4d81553 100644
--- a/fs/lockd/svclock.c
+++ b/fs/lockd/svclock.c
@@ -632,7 +632,7 @@ nlmsvc_update_deferred_block(struct nlm_block *block, struct file_lock *conf,
block->b_flags |= B_TIMED_OUT;
if (conf) {
if (block->b_fl)
- locks_copy_lock(block->b_fl, conf);
+ __locks_copy_lock(block->b_fl, conf);
}
}
diff --git a/fs/locks.c b/fs/locks.c
index 2e0fa66..e1ea2fe 100644
--- a/fs/locks.c
+++ b/fs/locks.c
@@ -224,7 +224,7 @@ static void locks_copy_private(struct file_lock *new, struct file_lock *fl)
/*
* Initialize a new lock from an existing file_lock structure.
*/
-static void __locks_copy_lock(struct file_lock *new, const struct file_lock *fl)
+void __locks_copy_lock(struct file_lock *new, const struct file_lock *fl)
{
new->fl_owner = fl->fl_owner;
new->fl_pid = fl->fl_pid;
@@ -833,7 +833,7 @@ static int __posix_lock_file(struct inode *inode, struct file_lock *request, str
if (!posix_locks_conflict(request, fl))
continue;
if (conflock)
- locks_copy_lock(conflock, fl);
+ __locks_copy_lock(conflock, fl);
error = -EAGAIN;
if (!(request->fl_flags & FL_SLEEP))
goto out;
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 55dfdd7..8799b87 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -2712,9 +2712,6 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
* Note: locks.c uses the BKL to protect the inode's lock list.
*/
- /* XXX?: Just to divert the locks_release_private at the start of
- * locks_copy_lock: */
- locks_init_lock(&conflock);
err = vfs_lock_file(filp, cmd, &file_lock, &conflock);
switch (-err) {
case 0: /* success! */
diff --git a/include/linux/fs.h b/include/linux/fs.h
index cc2be2c..6556f2f 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -973,6 +973,7 @@ extern int do_sync_mapping_range(struct address_space *mapping, loff_t offset,
/* fs/locks.c */
extern void locks_init_lock(struct file_lock *);
extern void locks_copy_lock(struct file_lock *, struct file_lock *);
+extern void __locks_copy_lock(struct file_lock *, const struct file_lock *);
extern void locks_remove_posix(struct file *, fl_owner_t);
extern void locks_remove_flock(struct file *);
extern void posix_test_lock(struct file *, struct file_lock *);
^ permalink raw reply related [flat|nested] 3+ messages in thread* don't call ->copy_lock methods on return of conflicting locks [was: Re: stuff]
2008-04-24 20:34 stuff J. Bruce Fields
@ 2008-04-25 17:12 ` J. Bruce Fields
0 siblings, 0 replies; 3+ messages in thread
From: J. Bruce Fields @ 2008-04-25 17:12 UTC (permalink / raw)
To: Trond Myklebust; +Cc: linux-nfs
And apologies for that subject line. It was a placeholder I forgot to
replace....
On Thu, Apr 24, 2008 at 04:34:03PM -0400, J. Bruce Fields wrote:
> Trond--you mentioned noticing some locks_copy_locks() abuses; is this
> what you were thinking of?
>
> --b.
>
> commit 07c5abe6899d8ab49368604e64894821d4f60bf9
> Author: J. Bruce Fields <bfields@citi.umich.edu>
> Date: Thu Apr 24 10:08:22 2008 -0400
>
> locks: don't call ->copy_lock methods on return of conflicting locks
>
> The file_lock structure is used both as a heavy-weight representation of
> an active lock, with pointers to reference-counted structures, etc., and
> as a simple container for parameters that describe a file lock.
>
> The conflicting lock returned from __posix_lock_file is an example of
> the latter; so don't call the filesystem or lock manager callbacks when
> copying to it. This also saves the need for an unnecessary
> locks_init_lock in the nfsv4 server.
>
> Thanks to Trond for pointing out the error.
>
> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
> Cc: Trond Myklebust <Trond.Myklebust@netapp.com>
>
> diff --git a/fs/lockd/svclock.c b/fs/lockd/svclock.c
> index 1f122c1..4d81553 100644
> --- a/fs/lockd/svclock.c
> +++ b/fs/lockd/svclock.c
> @@ -632,7 +632,7 @@ nlmsvc_update_deferred_block(struct nlm_block *block, struct file_lock *conf,
> block->b_flags |= B_TIMED_OUT;
> if (conf) {
> if (block->b_fl)
> - locks_copy_lock(block->b_fl, conf);
> + __locks_copy_lock(block->b_fl, conf);
> }
> }
>
> diff --git a/fs/locks.c b/fs/locks.c
> index 2e0fa66..e1ea2fe 100644
> --- a/fs/locks.c
> +++ b/fs/locks.c
> @@ -224,7 +224,7 @@ static void locks_copy_private(struct file_lock *new, struct file_lock *fl)
> /*
> * Initialize a new lock from an existing file_lock structure.
> */
> -static void __locks_copy_lock(struct file_lock *new, const struct file_lock *fl)
> +void __locks_copy_lock(struct file_lock *new, const struct file_lock *fl)
> {
> new->fl_owner = fl->fl_owner;
> new->fl_pid = fl->fl_pid;
> @@ -833,7 +833,7 @@ static int __posix_lock_file(struct inode *inode, struct file_lock *request, str
> if (!posix_locks_conflict(request, fl))
> continue;
> if (conflock)
> - locks_copy_lock(conflock, fl);
> + __locks_copy_lock(conflock, fl);
> error = -EAGAIN;
> if (!(request->fl_flags & FL_SLEEP))
> goto out;
> diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
> index 55dfdd7..8799b87 100644
> --- a/fs/nfsd/nfs4state.c
> +++ b/fs/nfsd/nfs4state.c
> @@ -2712,9 +2712,6 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
> * Note: locks.c uses the BKL to protect the inode's lock list.
> */
>
> - /* XXX?: Just to divert the locks_release_private at the start of
> - * locks_copy_lock: */
> - locks_init_lock(&conflock);
> err = vfs_lock_file(filp, cmd, &file_lock, &conflock);
> switch (-err) {
> case 0: /* success! */
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index cc2be2c..6556f2f 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -973,6 +973,7 @@ extern int do_sync_mapping_range(struct address_space *mapping, loff_t offset,
> /* fs/locks.c */
> extern void locks_init_lock(struct file_lock *);
> extern void locks_copy_lock(struct file_lock *, struct file_lock *);
> +extern void __locks_copy_lock(struct file_lock *, const struct file_lock *);
> extern void locks_remove_posix(struct file *, fl_owner_t);
> extern void locks_remove_flock(struct file *);
> extern void posix_test_lock(struct file *, struct file_lock *);
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 3+ messages in thread
* stuff
@ 2008-05-09 19:23 J. Bruce Fields
0 siblings, 0 replies; 3+ messages in thread
From: J. Bruce Fields @ 2008-05-09 19:23 UTC (permalink / raw)
To: linux-nfs
Cc: Aurelien Charbon, Neil Brown, Brian Haley,
YOSHIFUJI Hideaki / 吉藤英明
=46rom: J. Bruce Fields <bfields@citi.umich.edu>
Commit f15364bd4cf8799a7677b6daeed7b67d9139d974 ("IPv6 support for NFS
server export caches") dropped a couple spaces, rendering the output
here difficult to read.
(However note that we expect the output to be parsed only by humans, no=
t
machines, so this shouldn't have broken any userland software.)
Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu>
Cc: Aurelien Charbon <aurelien.charbon@bull.net>
Cc: Neil Brown <neilb@suse.de>
Cc: Brian Haley <brian.haley@hp.com>
Cc: YOSHIFUJI Hideaki / =E5=90=89=E8=97=A4=E8=8B=B1=E6=98=8E <yoshfuji=
@linux-ipv6.org>
---
net/sunrpc/svcauth_unix.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
I just noticed this while doing some debugging at Connectathon. I'm
undecided whether to take it seriously. Does anyone other than me use
these /content files? I suppose it should probably go into 2.6.26 but
not 2.6.25.x.
--b.
diff --git a/net/sunrpc/svcauth_unix.c b/net/sunrpc/svcauth_unix.c
index 3f30ee6..f24800f 100644
--- a/net/sunrpc/svcauth_unix.c
+++ b/net/sunrpc/svcauth_unix.c
@@ -278,7 +278,7 @@ static int ip_map_show(struct seq_file *m,
dom =3D im->m_client->h.name;
=20
if (ipv6_addr_v4mapped(&addr)) {
- seq_printf(m, "%s" NIPQUAD_FMT "%s\n",
+ seq_printf(m, "%s " NIPQUAD_FMT " %s\n",
im->m_class,
ntohl(addr.s6_addr32[3]) >> 24 & 0xff,
ntohl(addr.s6_addr32[3]) >> 16 & 0xff,
@@ -286,7 +286,7 @@ static int ip_map_show(struct seq_file *m,
ntohl(addr.s6_addr32[3]) >> 0 & 0xff,
dom);
} else {
- seq_printf(m, "%s" NIP6_FMT "%s\n",
+ seq_printf(m, "%s " NIP6_FMT " %s\n",
im->m_class, NIP6(addr), dom);
}
return 0;
--=20
1.5.5.rc1
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2008-05-09 19:23 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-24 20:34 stuff J. Bruce Fields
2008-04-25 17:12 ` don't call ->copy_lock methods on return of conflicting locks [was: Re: stuff] J. Bruce Fields
-- strict thread matches above, loose matches on Subject: below --
2008-05-09 19:23 stuff J. Bruce Fields
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox