From patchwork Tue Oct 15 17:44:00 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Filipe Manana X-Patchwork-Id: 3046931 Return-Path: X-Original-To: patchwork-linux-btrfs@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id B79C8BF924 for ; Tue, 15 Oct 2013 17:45:07 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 9A60A20439 for ; Tue, 15 Oct 2013 17:45:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5E29A20114 for ; Tue, 15 Oct 2013 17:45:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933410Ab3JORpA (ORCPT ); Tue, 15 Oct 2013 13:45:00 -0400 Received: from mail-wi0-f176.google.com ([209.85.212.176]:52856 "EHLO mail-wi0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932510Ab3JORo7 (ORCPT ); Tue, 15 Oct 2013 13:44:59 -0400 Received: by mail-wi0-f176.google.com with SMTP id l12so5480792wiv.3 for ; Tue, 15 Oct 2013 10:44:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=EqbUbCciRoo/ehjP1CLT6LkqDpVAdjv7TBDxCDtLwwU=; b=NdK2LZ3gQddO0R2gJ7xYuQV9LYES0feD/S4+RJvVOiOUveDrr8Ys8l5fzUhTQnIW5d wMuvW+aRb6eIHi3B6qLq0iIUmx710BX2ksnQwU18Qu+dPhnPmvYorpH0DjKnVhJgjqgX pInIFK6td9musFGLT6FvQY085kTrg9RK7aV+ix5/iRPUEXSK6JzkvHjxgIUvTOCrcX18 4rK2+cvjROWfGzAxnRTje0NnMHlBc+oDq/ases2b9jHnp5Exr7nSp27QNxpL96zwxBoU fb4DxuHaHtfhJy3+q/M6UitTLGw2BTySR5HM0Jf6gn375c9dH4ndG1MI17eXZw4tBY2G i9Ow== X-Received: by 10.194.94.167 with SMTP id dd7mr3404755wjb.43.1381859098286; Tue, 15 Oct 2013 10:44:58 -0700 (PDT) Received: from storm-desktop.lan (bl5-77-122.dsl.telepac.pt. [82.154.77.122]) by mx.google.com with ESMTPSA id s4sm778225wiy.1.2013.10.15.10.44.56 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Tue, 15 Oct 2013 10:44:57 -0700 (PDT) From: Filipe David Borba Manana To: linux-btrfs@vger.kernel.org Cc: Filipe David Borba Manana Subject: [PATCH] Btrfs: fix incorrect inode acl reset Date: Tue, 15 Oct 2013 18:44:00 +0100 Message-Id: <1381859040-11211-1-git-send-email-fdmanana@gmail.com> X-Mailer: git-send-email 1.7.9.5 Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org X-Spam-Status: No, score=-7.3 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP When a directory has a default ACL and a subdirectory is created under that directory, btrfs_init_acl() is called when the subdirectory's inode is created to initialize the inode's ACL (inherited from the parent directory) but it was clearing the ACL from the inode after setting it if posix_acl_create() returned success, instead of clearing it only if it returned an error. To reproduce this issue: $ mkfs.btrfs -f /dev/loop0 $ mount /dev/loop0 /mnt $ mkdir /mnt/acl $ setfacl -d --set u::rwx,g::rwx,o::- /mnt/acl $ getfacl /mnt/acl user::rwx group::rwx other::r-x default:user::rwx default:group::rwx default:other::--- $ mkdir /mnt/acl/dir1 $ getfacl /mnt/acl/dir1 user::rwx group::rwx other::--- After unmounting and mounting again the filesystem, fgetacl returned the expected ACL: $ umount /mnt/acl $ mount /dev/loop0 /mnt $ getfacl /mnt/acl/dir1 user::rwx group::rwx other::--- default:user::rwx default:group::rwx default:other::--- Meaning that the underlying xattr was persisted. Reported-by: Giuseppe Fierro Signed-off-by: Filipe David Borba Manana --- fs/btrfs/acl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/fs/btrfs/acl.c b/fs/btrfs/acl.c index e15d2b0..0890c83 100644 --- a/fs/btrfs/acl.c +++ b/fs/btrfs/acl.c @@ -229,7 +229,7 @@ int btrfs_init_acl(struct btrfs_trans_handle *trans, if (ret > 0) { /* we need an acl */ ret = btrfs_set_acl(trans, inode, acl, ACL_TYPE_ACCESS); - } else { + } else if (ret < 0) { cache_no_acl(inode); } } else {