From patchwork Tue Jun 17 06:06:16 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Yang X-Patchwork-Id: 360352 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id C33B9140099 for ; Tue, 17 Jun 2014 17:08:36 +1000 (EST) Received: from ozlabs.org (ozlabs.org [103.22.144.67]) by lists.ozlabs.org (Postfix) with ESMTP id B16CA1A038A for ; Tue, 17 Jun 2014 17:08:36 +1000 (EST) X-Original-To: linuxppc-dev@lists.ozlabs.org Delivered-To: linuxppc-dev@lists.ozlabs.org X-Greylist: delayed 3819 seconds by postgrey-1.34 at bilbo; Tue, 17 Jun 2014 17:07:55 EST Received: from mail1.windriver.com (mail1.windriver.com [147.11.146.13]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4B2F21A02AF for ; Tue, 17 Jun 2014 17:07:53 +1000 (EST) Received: from ALA-HCB.corp.ad.wrs.com (ala-hcb.corp.ad.wrs.com [147.11.189.41]) by mail1.windriver.com (8.14.5/8.14.5) with ESMTP id s5H66U4I022699 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=FAIL); Mon, 16 Jun 2014 23:06:30 -0700 (PDT) Received: from pek-wyang1-d1.wrs.com (128.224.162.170) by ALA-HCB.corp.ad.wrs.com (147.11.189.41) with Microsoft SMTP Server id 14.3.174.1; Mon, 16 Jun 2014 23:06:30 -0700 From: To: Subject: [PATCH v1] kexec:fs2dt: Refine kdump device_tree sort Date: Tue, 17 Jun 2014 14:06:16 +0800 Message-ID: <1402985176-10556-1-git-send-email-Wei.Yang@windriver.com> X-Mailer: git-send-email 1.7.9.5 MIME-Version: 1.0 Cc: linuxppc-dev@lists.ozlabs.org, wei.yang@windriver.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org Sender: "Linuxppc-dev" From: Yang Wei The commit b02d735bf was to rearrange the device-tree entries, and assumed that these entries are sorted in the ascending order. but acctually when I was validating kexec and kdump, the order of serial node still is changed. We should not only compare the length of directory name, but also compare the directory name, it would ensure that the order of device node is really in ascending order. Signed-off-by: Yang Wei --- Hi Simon, Please help me take a look at this patch. I validated it on freescale t4240qds. Thanks Wei kexec/fs2dt.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/kexec/fs2dt.c b/kexec/fs2dt.c index 1e5f074..0bffaf5 100644 --- a/kexec/fs2dt.c +++ b/kexec/fs2dt.c @@ -479,6 +479,9 @@ static int comparefunc(const struct dirent **dentry1, { char *str1 = (*(struct dirent **)dentry1)->d_name; char *str2 = (*(struct dirent **)dentry2)->d_name; + char* ptr1 = strchr(str1, '@'); + char* ptr2 = strchr(str2, '@'); + int len1, len2; /* * strcmp scans from left to right and fails to idetify for some @@ -486,9 +489,13 @@ static int comparefunc(const struct dirent **dentry1, * Therefore, we get the wrong sorted order like memory@10000000 and * memory@f000000. */ - if (strchr(str1, '@') && strchr(str2, '@') && - (strlen(str1) > strlen(str2))) - return 1; + if (ptr1 && ptr2) { + len1 = ptr1 - str1; + len2 = ptr2 - str2; + if (!strncmp(str1, str2, len1 >len2 ? len1: len2) && + (strlen(str1) > strlen(str2))) + return 1; + } return strcmp(str1, str2); }