rpms/kernel/F-7 kernel-2.6.spec, 1.3188, 1.3189 linux-2.6-sysfs-inode-allocator-oops.patch, 1.1, 1.2

Dave Jones (davej) fedora-extras-commits at redhat.com
Tue May 22 17:45:27 UTC 2007


Author: davej

Update of /cvs/pkgs/rpms/kernel/F-7
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv27910

Modified Files:
	kernel-2.6.spec linux-2.6-sysfs-inode-allocator-oops.patch 
Log Message:
Eric fixed the sysfs allocator changes


Index: kernel-2.6.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/kernel-2.6.spec,v
retrieving revision 1.3188
retrieving revision 1.3189
diff -u -r1.3188 -r1.3189
--- kernel-2.6.spec	22 May 2007 15:40:03 -0000	1.3188
+++ kernel-2.6.spec	22 May 2007 17:44:52 -0000	1.3189
@@ -1322,7 +1322,7 @@
 # Allow large files on UDF
 %patch1660 -p1
 # fix oops in sysfs_readdir
-#%patch1670 -p1
+%patch1670 -p1
 # Fix XFS umount bug.
 %patch1681 -p1
 # Align kernel data segment to page boundary.
@@ -2417,7 +2417,7 @@
 - Disable sparse checking for now.
 
 * Tue May 22 2007 Dave Jones <davej at redhat.com>
-- Drop sysfs allocator changes. (They broke sysfs horribly).
+- Fix the sysfs allocator changes.
 
 * Tue May 22 2007 Dave Jones <davej at redhat.com>
 - Prevent going idle with softirq pending.

linux-2.6-sysfs-inode-allocator-oops.patch:

Index: linux-2.6-sysfs-inode-allocator-oops.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/F-7/linux-2.6-sysfs-inode-allocator-oops.patch,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- linux-2.6-sysfs-inode-allocator-oops.patch	22 May 2007 04:05:19 -0000	1.1
+++ linux-2.6-sysfs-inode-allocator-oops.patch	22 May 2007 17:44:52 -0000	1.2
@@ -1,90 +1,93 @@
-From davej  Mon May 21 15:08:08 2007
-Return-path: <linux-kernel-owner+davej=40kernelslacker.org-S1764269AbXEUTES at vger.kernel.org>
-X-Spam-Checker-Version: SpamAssassin 3.1.8 (2007-02-13) on
-	gelk.kernelslacker.org
-X-Spam-Level: 
-X-Spam-Status: No, score=-2.6 required=5.0 tests=AWL,BAYES_00 autolearn=ham
-	version=3.1.8
-Envelope-to: davej at kernelslacker.org
-Delivery-date: Mon, 21 May 2007 20:04:31 +0100
-Received: from testure.choralone.org [194.9.77.134]
+From davej  Tue May 22 12:17:24 2007
+Return-Path: <sandeen at redhat.com>
+Received: from pobox.devel.redhat.com [10.11.255.8]
 	by gelk.kernelslacker.org with IMAP (fetchmail-6.3.6)
-	for <davej at localhost> (single-drop); Mon, 21 May 2007 15:08:08 -0400 (EDT)
-Received: from vger.kernel.org ([209.132.176.167])
-	by testure.choralone.org with esmtp (Exim 4.63)
-	(envelope-from <linux-kernel-owner+davej=40kernelslacker.org-S1764269AbXEUTES at vger.kernel.org>)
-	id 1HqDBG-0005jI-Tn
-	for davej at kernelslacker.org; Mon, 21 May 2007 20:04:31 +0100
-Received: (majordomo at vger.kernel.org) by vger.kernel.org via listexpand
-	id S1764269AbXEUTES (ORCPT <rfc822;davej at kernelslacker.org>);
-	Mon, 21 May 2007 15:04:18 -0400
-Received: (majordomo at vger.kernel.org) by vger.kernel.org id S1756769AbXEUTED
-	(ORCPT <rfc822;linux-kernel-outgoing>);
-	Mon, 21 May 2007 15:04:03 -0400
-Received: from mx1.redhat.com ([66.187.233.31]:34360 "EHLO mx1.redhat.com"
-	rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP
-	id S1756759AbXEUTEA (ORCPT <rfc822;linux-kernel at vger.kernel.org>);
-	Mon, 21 May 2007 15:04:00 -0400
+	for <davej at localhost> (single-drop); Tue, 22 May 2007 12:17:24 -0400 (EDT)
+Received: from pobox.devel.redhat.com ([unix socket])
+	 by pobox.devel.redhat.com (Cyrus v2.2.12-Invoca-RPM-2.2.12-8.1.RHEL4) with LMTPA;
+	 Tue, 22 May 2007 12:13:29 -0400
+X-Sieve: CMU Sieve 2.2
 Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254])
-	by mx1.redhat.com (8.13.1/8.13.1) with ESMTP id l4LJ2jKD024422;
-	Mon, 21 May 2007 15:02:45 -0400
+	by pobox.devel.redhat.com (8.13.1/8.13.1) with ESMTP id l4MGDTbW017176
+	for <davej at pobox.devel.redhat.com>; Tue, 22 May 2007 12:13:29 -0400
 Received: from pobox-2.corp.redhat.com (pobox-2.corp.redhat.com [10.11.255.15])
-	by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id l4LJ2jrr005611;
-	Mon, 21 May 2007 15:02:45 -0400
+	by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id l4MGDSWd011185
+	for <davej at int-mx1.corp.redhat.com>; Tue, 22 May 2007 12:13:28 -0400
 Received: from [10.15.80.10] (neon.msp.redhat.com [10.15.80.10])
-	by pobox-2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id l4LJ2ig9005229;
-	Mon, 21 May 2007 15:02:44 -0400
-Message-ID: <4651ECD3.3060703 at redhat.com>
-Date:	Mon, 21 May 2007 14:02:43 -0500
-From:	Eric Sandeen <sandeen at redhat.com>
-User-Agent: Thunderbird 1.5.0.10 (X11/20070302)
+	by pobox-2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id l4MGDRKc021458
+	for <davej at redhat.com>; Tue, 22 May 2007 12:13:27 -0400
+Resent-From: Eric Sandeen <sandeen at redhat.com>
+Resent-To: Dave Jones <davej at redhat.com>
+Resent-Date: Tue, 22 May 2007 11:13:16 -0500
+Resent-Message-Id: <4653169C.3060803 at redhat.com>
+Resent-User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.8.0.10) Gecko/20070302 Fedora/1.5.0.10-1.fc6 pango-text Thunderbird/1.5.0.10
+Received: from pobox-2.corp.redhat.com ([unix socket])
+	 by pobox-2.corp.redhat.com (Cyrus v2.2.12-Invoca-RPM-2.2.12-8.1.RHEL4) with LMTPA;
+	 Mon, 21 May 2007 22:32:53 -0400
+X-Sieve: CMU Sieve 2.2
+Received: from int-mx1.corp.redhat.com (int-mx1.corp.redhat.com [172.16.52.254])
+	by pobox-2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id l4M2Wr9W026945
+	for <esandeen at pobox-2.corp.redhat.com>; Mon, 21 May 2007 22:32:53 -0400
+Received: from mx1.redhat.com (mx1.redhat.com [172.16.48.31])
+	by int-mx1.corp.redhat.com (8.13.1/8.13.1) with ESMTP id l4M2WqlW016766
+	for <sandeen at redhat.com>; Mon, 21 May 2007 22:32:52 -0400
+Received: from sandeen.net (sandeen.net [209.173.210.139])
+	by mx1.redhat.com (8.13.1/8.13.1) with ESMTP id l4M2WmPs016891
+	for <sandeen at redhat.com>; Mon, 21 May 2007 22:32:48 -0400
+Received: from liberator.sandeen.net (liberator.sandeen.net [10.0.0.4])
+	(using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits))
+	(No client certificate requested)
+	by sandeen.net (Postfix) with ESMTP id 4EC1818077E83;
+	Mon, 21 May 2007 21:32:42 -0500 (CDT)
+Message-ID: <46525648.8050807 at sandeen.net>
+Date: Mon, 21 May 2007 21:32:40 -0500
+From: Eric Sandeen <sandeen at sandeen.net>
+User-Agent: Thunderbird 2.0.0.0 (Macintosh/20070326)
 MIME-Version: 1.0
-To:	Eric Sandeen <sandeen at redhat.com>
-CC:	Linux Kernel Mailing List <linux-kernel at vger.kernel.org>,
-	Tejun Heo <htejun at gmail.com>,
-	Maneesh Soni <maneesh at in.ibm.com>, stable at kernel.org
-Subject: Re: [stable] [PATCH] - fix oops in sysfs_readdir
-References: <4651E0C9.3080609 at redhat.com>
-In-Reply-To: <4651E0C9.3080609 at redhat.com>
-Content-Type: text/plain; charset=ISO-8859-1
+To: Eric Sandeen <sandeen at redhat.com>
+CC: Andrew Morton <akpm at linux-foundation.org>,
+        Linux Kernel Mailing List <linux-kernel at vger.kernel.org>,
+        Tejun Heo <htejun at gmail.com>, Maneesh Soni <maneesh at in.ibm.com>,
+        stable at kernel.org
+Subject: Re: [stable] [PATCH] - store sysfs inode nrs in s_ino to avoid readdir
+ oopses
+References: <4651E0C9.3080609 at redhat.com> <20070521153935.b549db8f.akpm at linux-foundation.org> <465236EF.40102 at redhat.com>
+In-Reply-To: <465236EF.40102 at redhat.com>
+Content-Type: text/plain; charset=ISO-8859-1; format=flowed
 Content-Transfer-Encoding: 7bit
-Sender:	linux-kernel-owner at vger.kernel.org
-Precedence: bulk
-X-Mailing-List:	linux-kernel at vger.kernel.org
+X-RedHat-Spam-Score: -1.44 
 Status: RO
-Content-Length: 3548
-Lines: 108
+Content-Length: 3622
+Lines: 107
+
+(2nd try, better(?) changelog, quilt refreshed(!) patch)
 
-Eric Sandeen wrote:
+--
 
-> This is a non-ida backport of Tejun's patch in -mm at:
-> ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.22-rc1/2.6.22-rc1-mm1/broken-out/gregkh-driver-sysfs-allocate-inode-number-using-ida.patch
-> for the 2.6.16 -stable tree - it follows the same scheme of using s_ino to safely
-> store & retrieve the inode number of sysfs entries for use in sysfs_readdir,
-> but uses a brain-dead-simple inode nr allocator rather than ida, which would
-> bring along a lot of newer, more complex code.
->
-> No, this doesn't guarantee uniqueness of sysfs inode numbers, but then
-> the code in -stable today doesn't either - and with this change, at least
-> it shouldn't oops.
->
-> Comments?
->
-> Thanks,
->
-> -Eric
-Here's one that works w/2.6.21... the global should probably be an atomic 
-or lock-protected, I suppose, but again, if we don't guarantee uniqueness
-anyway...?
+Backport of
+ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.22-rc1/2.6.22-rc1-mm1/broken-out/gregkh-driver-sysfs-allocate-inode-number-using-ida.patch
+
+For regular files in sysfs, sysfs_readdir wants to traverse
+sysfs_dirent->s_dentry->d_inode->i_ino to get to the inode number.
+But, the dentry can be reclaimed under memory pressure, and there
+is no synchronization with readdir.  This patch follows Tejun's
+scheme of allocating and storing an inode number in the new s_ino
+member of a sysfs_dirent, when dirents are created, and retrieving 
+it from there for readdir, so that the pointer chain doesn't have 
+to be traversed.
+
+Tejun's upstream patch uses a new-ish "ida" allocator which brings along
+some extra complexity; this -stable patch has a brain-dead incrementing
+counter which does not guarantee uniqueness, but because sysfs doesn't 
+hash inodes as iunique expects, uniqueness wasn't guaranteed today anyway.
 
 Signed-off-by: Eric Sandeen <sandeen at redhat.com>
 
 Index: linux-2.6.21/fs/sysfs/dir.c
-
 ===================================================================
 --- linux-2.6.21.orig/fs/sysfs/dir.c
 +++ linux-2.6.21/fs/sysfs/dir.c
-@@ -32,6 +32,14 @@ static struct dentry_operations sysfs_de
+@@ -30,6 +30,14 @@ static struct dentry_operations sysfs_de
  	.d_iput		= sysfs_d_iput,
  };
  
@@ -99,7 +102,15 @@
  /*
   * Allocates a new sysfs_dirent and links it to the parent sysfs_dirent
   */
-@@ -511,7 +519,7 @@ static int sysfs_readdir(struct file * f
+@@ -41,6 +49,7 @@ static struct sysfs_dirent * __sysfs_new
+ 	if (!sd)
+ 		return NULL;
+ 
++	sd->s_ino = sysfs_get_inum();
+ 	atomic_set(&sd->s_count, 1);
+ 	atomic_set(&sd->s_event, 1);
+ 	INIT_LIST_HEAD(&sd->s_children);
+@@ -509,7 +518,7 @@ static int sysfs_readdir(struct file * f
  
  	switch (i) {
  		case 0:
@@ -108,7 +119,7 @@
  			if (filldir(dirent, ".", 1, i, ino, DT_DIR) < 0)
  				break;
  			filp->f_pos++;
-@@ -540,10 +548,7 @@ static int sysfs_readdir(struct file * f
+@@ -538,10 +547,7 @@ static int sysfs_readdir(struct file * f
  
  				name = sysfs_get_name(next);
  				len = strlen(name);
@@ -157,10 +168,3 @@
  	struct iattr		* s_iattr;
  	atomic_t		s_event;
 
-
--
-To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
-the body of a message to majordomo at vger.kernel.org
-More majordomo info at  http://vger.kernel.org/majordomo-info.html
-Please read the FAQ at  http://www.tux.org/lkml/
-




More information about the fedora-extras-commits mailing list