From patchwork Sun Jun 10 05:05:06 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Allison Henderson X-Patchwork-Id: 10456509 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 27ADC603B4 for ; Sun, 10 Jun 2018 05:07:43 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 19F9420700 for ; Sun, 10 Jun 2018 05:07:43 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 0ED0725D9E; Sun, 10 Jun 2018 05:07:43 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI, RCVD_IN_DNSWL_HI, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 9351E20700 for ; Sun, 10 Jun 2018 05:07:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753671AbeFJFHl (ORCPT ); Sun, 10 Jun 2018 01:07:41 -0400 Received: from aserp2130.oracle.com ([141.146.126.79]:46730 "EHLO aserp2130.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932119AbeFJFHi (ORCPT ); Sun, 10 Jun 2018 01:07:38 -0400 Received: from pps.filterd (aserp2130.oracle.com [127.0.0.1]) by aserp2130.oracle.com (8.16.0.22/8.16.0.22) with SMTP id w5A571Bv007079 for ; Sun, 10 Jun 2018 05:07:38 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : subject : date : message-id : in-reply-to : references; s=corp-2017-10-26; bh=oAuphT4iO5bCmBTEqHRlhy/+LlWNhYQuj2+eOaoYXeU=; b=ecC+u5HY9GA+CQ/IvIZTa2+soW+i/E3LttkAydFY6QkF7WnL/De98Tn37hJl+mk3F9qZ AQMTer7go/6PosW6BjfigfPK0dBbucIOxtopGAgOo5T99xtLmLa/UMcsglzMdaq7VBKr HuBzpQT9QXGdq8X2VmRuo8dtRENbiYsvIV2E6IE0xQh/ctniYVdgPekxKyPoCoKy/g9L psYB/QOfx8yPI7mlNhK6x13WrIr4jWK3jcpgqMO5joLOhBkHek3qvCEJ+hyO8pAWVpq/ BQle6WfwGkG5PS2w0vbv14RNhNuURUMnTW+aNXqFlAByeY/LnWwkPWA7awPsC/zMVivG JA== Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by aserp2130.oracle.com with ESMTP id 2jg4dkt24e-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Sun, 10 Jun 2018 05:07:37 +0000 Received: from aserv0121.oracle.com (aserv0121.oracle.com [141.146.126.235]) by aserv0022.oracle.com (8.14.4/8.14.4) with ESMTP id w5A57boR032662 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Sun, 10 Jun 2018 05:07:37 GMT Received: from abhmp0007.oracle.com (abhmp0007.oracle.com [141.146.116.13]) by aserv0121.oracle.com (8.14.4/8.13.8) with ESMTP id w5A57b8h000579 for ; Sun, 10 Jun 2018 05:07:37 GMT Received: from localhost.localdomain (/72.210.40.165) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Sat, 09 Jun 2018 22:07:37 -0700 From: Allison Henderson To: linux-xfs@vger.kernel.org Subject: [PATCH v7 21/23] xfs: Add helper function xfs_attr_list_context_init Date: Sat, 9 Jun 2018 22:05:06 -0700 Message-Id: <1528607108-11059-22-git-send-email-allison.henderson@oracle.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1528607108-11059-1-git-send-email-allison.henderson@oracle.com> References: <1528607108-11059-1-git-send-email-allison.henderson@oracle.com> X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=8919 signatures=668702 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=1 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1805220000 definitions=main-1806100059 Sender: linux-xfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-xfs@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This patch adds a helper function xfs_attr_list_context_init used by xfs_attr_list. This function initializes the xfs_attr_list_context structure passed to xfs_attr_list_int. We will need this later to call xfs_attr_list_int_ilocked when the node is already locked. Signed-off-by: Allison Henderson --- fs/xfs/libxfs/xfs_attr.h | 3 ++ fs/xfs/xfs_attr_list.c | 72 +++++++++++++++++++++++++++++++----------------- 2 files changed, 50 insertions(+), 25 deletions(-) diff --git a/fs/xfs/libxfs/xfs_attr.h b/fs/xfs/libxfs/xfs_attr.h index d041734..79c516b 100644 --- a/fs/xfs/libxfs/xfs_attr.h +++ b/fs/xfs/libxfs/xfs_attr.h @@ -184,6 +184,9 @@ int xfs_attr_remove(struct xfs_inode *dp, const unsigned char *name, int xfs_attr_remove_args(struct xfs_da_args *args, int flags, bool roll_trans); int xfs_attr_list(struct xfs_inode *dp, char *buffer, int bufsize, int flags, struct attrlist_cursor_kern *cursor); +int xfs_attr_list_context_init(struct xfs_inode *dp, char *buffer, int bufsize, + int flags, struct attrlist_cursor_kern *cursor, + struct xfs_attr_list_context *context); int xfs_attr_args_init(struct xfs_da_args *args, struct xfs_inode *dp, const unsigned char *name, size_t namelen, int flags); int xfs_attr_calc_size(struct xfs_da_args *args, int *local); diff --git a/fs/xfs/xfs_attr_list.c b/fs/xfs/xfs_attr_list.c index 3e59a34..df8faf5 100644 --- a/fs/xfs/xfs_attr_list.c +++ b/fs/xfs/xfs_attr_list.c @@ -603,23 +603,19 @@ xfs_attr_put_listent( } /* - * Generate a list of extended attribute names and optionally - * also value lengths. Positive return value follows the XFS - * convention of being an error, zero or negative return code - * is the length of the buffer returned (negated), indicating - * success. + * Initializes an xfs_attr_list_context suitable for + * use by xfs_attr_list */ int -xfs_attr_list( - xfs_inode_t *dp, - char *buffer, - int bufsize, - int flags, - attrlist_cursor_kern_t *cursor) +xfs_attr_list_context_init( + xfs_inode_t *dp, + char *buffer, + int bufsize, + int flags, + struct attrlist_cursor_kern *cursor, + struct xfs_attr_list_context *context) { - xfs_attr_list_context_t context; struct attrlist *alist; - int error; /* * Validate the cursor. @@ -645,20 +641,46 @@ xfs_attr_list( /* * Initialize the output buffer. */ - memset(&context, 0, sizeof(context)); - context.dp = dp; - context.cursor = cursor; - context.resynch = 1; - context.flags = flags; - context.alist = buffer; - context.bufsize = (bufsize & ~(sizeof(int)-1)); /* align */ - context.firstu = context.bufsize; - context.put_listent = xfs_attr_put_listent; - - alist = (struct attrlist *)context.alist; + memset(context, 0, sizeof(xfs_attr_list_context_t)); + context->dp = dp; + context->cursor = cursor; + context->resynch = 1; + context->flags = flags; + context->alist = buffer; + context->bufsize = (bufsize & ~(sizeof(int)-1)); /* align */ + context->firstu = context->bufsize; + context->put_listent = xfs_attr_put_listent; + + alist = (struct attrlist *)context->alist; alist->al_count = 0; alist->al_more = 0; - alist->al_offset[0] = context.bufsize; + alist->al_offset[0] = context->bufsize; + + return 0; +} + +/* + * Generate a list of extended attribute names and optionally + * also value lengths. Positive return value follows the XFS + * convention of being an error, zero or negative return code + * is the length of the buffer returned (negated), indicating + * success. + */ +int +xfs_attr_list( + xfs_inode_t *dp, + char *buffer, + int bufsize, + int flags, + attrlist_cursor_kern_t *cursor) +{ + xfs_attr_list_context_t context; + int error; + + error = xfs_attr_list_context_init(dp, buffer, bufsize, flags, + cursor, &context); + if (error) + return error; error = xfs_attr_list_int(&context); ASSERT(error <= 0);