From fe8055abcf2253dabdeb9b34d27ec763b8a6c1d2 Mon Sep 17 00:00:00 2001 From: Marcus Brinkmann Date: Sat, 30 Dec 2000 18:22:29 +0000 Subject: 2000-12-30 Marcus Brinkmann * netfs.h (struct node): Adjust comment fixes by last change to be more in line with similar comments elsewhere. * make-node.c (netfs_make_node): Return 0 if malloc does. Reported by Neal H Walfield . 2000-12-29 Neal H Walfield * dir-lookup.c (netfs_S_dir_lookup): Do not bother zeroing np, it happens later anyway. Replace bcopy with memcpy. * file-get-translator.c (netfs_S_file_get_translator): Replace bcopy with memcpy. * io-seek.c (netfs_S_io_seek): Only get the lock if we need it. * io-stat.c (netfs_S_io_stat): Replace bcopy with memcpy. * io-write.c (netfs_S_io_write): Wait until the lock is needed. * netfs.h: Complete documentation revision. The locking protocol is now very explicit. * nput.c (netfs_nput): Added comment. * nrele.c (netfs_nrele): Likewise. * set-get-trans.c: Likewise. --- libnetfs/io-seek.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) (limited to 'libnetfs/io-seek.c') diff --git a/libnetfs/io-seek.c b/libnetfs/io-seek.c index 1e517ff4..401c5004 100644 --- a/libnetfs/io-seek.c +++ b/libnetfs/io-seek.c @@ -1,5 +1,5 @@ /* - Copyright (C) 1995, 1996 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 2000 Free Software Foundation, Inc. Written by Michael I. Bushnell, p/BSG. This file is part of the GNU Hurd. @@ -33,7 +33,6 @@ netfs_S_io_seek (struct protid *user, if (!user) return EOPNOTSUPP; - mutex_lock (&user->po->np->lock); switch (whence) { case SEEK_SET: @@ -47,17 +46,27 @@ netfs_S_io_seek (struct protid *user, break; case SEEK_END: - err = netfs_validate_stat (user->po->np, user->user); - if (!err) - user->po->filepointer = user->po->np->nn_stat.st_size + offset; - break; + { + struct node *np; + + np = user->po->np; + mutex_lock (&np->lock); + + err = netfs_validate_stat (np, user->user); + if (!err) + user->po->filepointer = np->nn_stat.st_size + offset; + + mutex_unlock (&np->lock); + + break; + } default: err = EINVAL; break; } + *newoffset = user->po->filepointer; - mutex_unlock (&user->po->np->lock); return err; } -- cgit v1.2.3