Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932553AbXHHPdU (ORCPT ); Wed, 8 Aug 2007 11:33:20 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1763938AbXHHPdI (ORCPT ); Wed, 8 Aug 2007 11:33:08 -0400 Received: from ebiederm.dsl.xmission.com ([166.70.28.69]:47704 "EHLO ebiederm.dsl.xmission.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1763904AbXHHPdF (ORCPT ); Wed, 8 Aug 2007 11:33:05 -0400 From: ebiederm@xmission.com (Eric W. Biederman) To: Tejun Heo Cc: Greg KH , linux-kernel@vger.kernel.org, satyam@infradead.org, cornelia.huck@de.ibm.com, stern@rowland.harvard.edu, Linux Containers , gregkh@suse.de Subject: Re: [PATCH 17/25] sysfs: Rewrite rename in terms of sysfs dirents References: <20070808085133.GI13674@htj.dyndns.org> Date: Wed, 08 Aug 2007 09:32:20 -0600 In-Reply-To: <20070808085133.GI13674@htj.dyndns.org> (Tejun Heo's message of "Wed, 8 Aug 2007 17:51:33 +0900") Message-ID: User-Agent: Gnus/5.110006 (No Gnus v0.6) Emacs/21.4 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2065 Lines: 69 Tejun Heo writes: >> int sysfs_rename_dir(struct kobject * kobj, const char *new_name) >> { >> - struct sysfs_dirent *sd; >> + struct sysfs_dirent *sd = kobj->sd; >> struct dentry *parent = NULL; >> struct dentry *old_dentry = NULL, *new_dentry = NULL; >> const char *dup_name = NULL; >> @@ -863,42 +863,41 @@ int sysfs_rename_dir(struct kobject * kobj, const char > *new_name) >> >> mutex_lock(&sysfs_rename_mutex); >> >> + error = 0; >> + if (strcmp(sd->s_name, new_name) == 0) >> + goto out; /* nothing to rename */ >> + >> /* get the original dentry */ >> old_dentry = sysfs_get_dentry(sd); >> if (IS_ERR(old_dentry)) { >> error = PTR_ERR(old_dentry); >> + goto out; >> } >> >> parent = old_dentry->d_parent; >> >> /* lock parent and get dentry for new name */ >> mutex_lock(&parent->d_inode->i_mutex); >> + mutex_lock(&sysfs_mutex); >> >> + error = -EEXIST; >> + if (sysfs_find_dirent(sd->s_parent, new_name)) >> goto out_unlock; >> >> + error = -ENOMEM; >> + new_dentry = d_alloc_name(parent, new_name); >> + if (!new_dentry) >> goto out_unlock; >> >> /* rename kobject and sysfs_dirent */ >> error = -ENOMEM; >> new_name = dup_name = kstrdup(new_name, GFP_KERNEL); >> if (!new_name) >> + goto out_unlock; >> >> error = kobject_set_name(kobj, "%s", new_name); >> if (error) >> + goto out_unlock; >> >> mutex_lock(&sysfs_mutex); > > sysfs_mutex is being grabbed twice and unlocked twice later. Ugh. That patch was supposed to remove the inner grab and release of sysfs_mutex. I guess I somehow failed to move that change all of the way down to this patch. #18 gets it right for sysfs_move_dir. And #20 fixes it but yes this patch is broken, and will mess up any git-bisect badly. So this patch needs to be respun. Eric - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/