From patchwork Sun Dec 18 14:24:30 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tao Ma X-Patchwork-Id: 132078 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id D2C8AB6FCC for ; Mon, 19 Dec 2011 01:37:44 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752142Ab1LROhS (ORCPT ); Sun, 18 Dec 2011 09:37:18 -0500 Received: from oproxy7-pub.bluehost.com ([67.222.55.9]:55442 "HELO oproxy7-pub.bluehost.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with SMTP id S1751939Ab1LROgk (ORCPT ); Sun, 18 Dec 2011 09:36:40 -0500 Received: (qmail 1187 invoked by uid 0); 18 Dec 2011 14:36:40 -0000 Received: from unknown (HELO box585.bluehost.com) (66.147.242.185) by oproxy7.bluehost.com with SMTP; 18 Dec 2011 14:36:40 -0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tao.ma; s=default; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From; bh=MYET5YZm42GgPMR8JciW05KHOhrVJFFq/6/IYivB+v4=; b=LWvujGlmd0kVj+b5vgTNgmmBKZsUgEWzq6aZiM2cwGI9fjs1+Fz3w2Nn4aaEcwYRp89Etddw0rp4yQBQcpfe3gL62ZcOsfk1b4D4YQ+Er15zbJhYt/lLYz/Pg/flpwTZ; Received: from [111.193.15.203] (helo=localhost.localdomain) by box585.bluehost.com with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.76) (envelope-from ) id 1RcHjj-0003vr-8t; Sun, 18 Dec 2011 07:29:14 -0700 From: Tao Ma To: linux-ext4@vger.kernel.org Cc: adilger@dilger.ca, tytso@mit.edu, linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org Subject: [PATCH V3 13/21] ext4: Create a new function search_dir. Date: Sun, 18 Dec 2011 22:24:30 +0800 Message-Id: <1324218278-2460-13-git-send-email-tm@tao.ma> X-Mailer: git-send-email 1.7.5.4 In-Reply-To: <1324218278-2460-1-git-send-email-tm@tao.ma> References: <4EEDF6B1.7050206@tao.ma> <1324218278-2460-1-git-send-email-tm@tao.ma> X-Identified-User: {1390:box585.bluehost.com:colyli:tao.ma} {sentby:smtp auth 111.193.15.203 authed with tm@tao.ma} Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org From: Tao Ma search_dirblock is used to search a dir block, but the code is almost the same for searching an inline dir. So create a new fuction search_dir and let search_dirblock call it. Signed-off-by: Tao Ma --- fs/ext4/ext4.h | 7 +++++++ fs/ext4/namei.c | 26 +++++++++++++++++++------- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 25d6e58..16efcad 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h @@ -1967,6 +1967,13 @@ extern int ext4_orphan_add(handle_t *, struct inode *); extern int ext4_orphan_del(handle_t *, struct inode *); extern int ext4_htree_fill_tree(struct file *dir_file, __u32 start_hash, __u32 start_minor_hash, __u32 *next_hash); +extern int search_dir(struct buffer_head *bh, + char *search_buf, + int buf_size, + struct inode *dir, + const struct qstr *d_name, + unsigned int offset, + struct ext4_dir_entry_2 **res_dir); /* resize.c */ extern int ext4_group_add(struct super_block *sb, diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index 77312dc..6e97dd2 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c @@ -794,11 +794,13 @@ static inline int ext4_match (int len, const char * const name, /* * Returns 0 if not found, -1 on failure, and 1 on success */ -static inline int search_dirblock(struct buffer_head *bh, - struct inode *dir, - const struct qstr *d_name, - unsigned int offset, - struct ext4_dir_entry_2 ** res_dir) +int search_dir(struct buffer_head *bh, + char *search_buf, + int buf_size, + struct inode *dir, + const struct qstr *d_name, + unsigned int offset, + struct ext4_dir_entry_2 **res_dir) { struct ext4_dir_entry_2 * de; char * dlimit; @@ -806,8 +808,8 @@ static inline int search_dirblock(struct buffer_head *bh, const char *name = d_name->name; int namelen = d_name->len; - de = (struct ext4_dir_entry_2 *) bh->b_data; - dlimit = bh->b_data + dir->i_sb->s_blocksize; + de = (struct ext4_dir_entry_2 *)search_buf; + dlimit = search_buf + buf_size; while ((char *) de < dlimit) { /* this code is executed quadratically often */ /* do minimal checking `by hand' */ @@ -832,6 +834,16 @@ static inline int search_dirblock(struct buffer_head *bh, return 0; } +static inline int search_dirblock(struct buffer_head *bh, + struct inode *dir, + const struct qstr *d_name, + unsigned int offset, + struct ext4_dir_entry_2 **res_dir) +{ + return search_dir(bh, bh->b_data, dir->i_sb->s_blocksize, dir, + d_name, offset, res_dir); +} + /* * ext4_find_entry()