Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 20 Nov 2009 22:22:53 +0000 (UTC)
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r199617 - head/sys/kern
Message-ID:  <200911202222.nAKMMr9J058050@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: kib
Date: Fri Nov 20 22:22:53 2009
New Revision: 199617
URL: http://svn.freebsd.org/changeset/base/199617

Log:
  On the return path from F_RDAHEAD and F_READAHEAD fcntls, do not
  unlock Giant twice.
  
  While there, bring conditions in the do/while loops closer to style,
  that also makes the lines fit into 80 columns.
  
  Reported and tested by:	dougb

Modified:
  head/sys/kern/kern_descrip.c

Modified: head/sys/kern/kern_descrip.c
==============================================================================
--- head/sys/kern/kern_descrip.c	Fri Nov 20 21:21:13 2009	(r199616)
+++ head/sys/kern/kern_descrip.c	Fri Nov 20 22:22:53 2009	(r199617)
@@ -718,14 +718,15 @@ kern_fcntl(struct thread *td, int fd, in
 			do {
 				new = old = fp->f_flag;
 				new |= FRDAHEAD;
-			} while (atomic_cmpset_rel_int(&fp->f_flag, old, new) == 0);
+			} while (!atomic_cmpset_rel_int(&fp->f_flag, old, new));
 readahead_vnlock_fail:
 			VFS_UNLOCK_GIANT(vfslocked);
+			vfslocked = 0;
 		} else {
 			do {
 				new = old = fp->f_flag;
 				new &= ~FRDAHEAD;
-			} while (atomic_cmpset_rel_int(&fp->f_flag, old, new) == 0);
+			} while (!atomic_cmpset_rel_int(&fp->f_flag, old, new));
 		}
 		fdrop(fp, td);
 		break;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200911202222.nAKMMr9J058050>