From owner-freebsd-fs@freebsd.org Thu Feb 2 16:29:40 2017 Return-Path: Delivered-To: freebsd-fs@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id EBF87CCE561 for ; Thu, 2 Feb 2017 16:29:40 +0000 (UTC) (envelope-from slw@zxy.spb.ru) Received: from zxy.spb.ru (zxy.spb.ru [195.70.199.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id B03F06DB for ; Thu, 2 Feb 2017 16:29:40 +0000 (UTC) (envelope-from slw@zxy.spb.ru) Received: from slw by zxy.spb.ru with local (Exim 4.86 (FreeBSD)) (envelope-from ) id 1cZKGP-000OrR-RH; Thu, 02 Feb 2017 19:29:37 +0300 Date: Thu, 2 Feb 2017 19:29:37 +0300 From: Slawa Olhovchenkov To: Steven Hartland Cc: freebsd-fs@freebsd.org Subject: Re: ZFS: mkdir: File too large Message-ID: <20170202162937.GE26493@zxy.spb.ru> References: <20170202115304.GA26493@zxy.spb.ru> <20170202142455.GB26493@zxy.spb.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.24 (2015-08-30) X-SA-Exim-Connect-IP: X-SA-Exim-Mail-From: slw@zxy.spb.ru X-SA-Exim-Scanned: No (on zxy.spb.ru); SAEximRunCond expanded to false X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 02 Feb 2017 16:29:41 -0000 On Thu, Feb 02, 2017 at 03:58:30PM +0000, Steven Hartland wrote: > On 02/02/2017 14:24, Slawa Olhovchenkov wrote: > >> Try tracing SET_ERROR for EFBIG with dtrace to determine underlying > >> cause. > > 0 37281 none:set-error set-error 27 > > zfs.ko`zfs_freebsd_mkdir+0x3a3 > > kernel`VOP_MKDIR_APV+0x8a > > kernel`kern_mkdirat+0x1e1 > > kernel`amd64_syscall+0x50e > > kernel`0xffffffff8079499b > > > > (kgdb) x zfs_freebsd_mkdir+0x3a3 > > 0xffffffff81171813 : 0xb4b78b45 > > Current language: auto; currently minimal > > (kgdb) info line *0xffffffff81171813 > > Line 2145 of "/usr/src/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c" starts at address 0xffffffff81171813 and ends at 0xffffffff8117181a . > > > > 2138 /* > > 2139 * Add a new entry to the directory. > > 2140 */ > > 2141 getnewvnode_reserve(1); > > 2142 tx = dmu_tx_create(zfsvfs->z_os); > > 2143 dmu_tx_hold_zap(tx, dzp->z_id, TRUE, dirname); > > 2144 dmu_tx_hold_zap(tx, DMU_NEW_OBJECT, FALSE, NULL); > > 2145 fuid_dirtied = zfsvfs->z_fuid_dirty; > > 2146 if (fuid_dirtied) > > 2147 zfs_fuid_txhold(zfsvfs, tx); > > 2148 if (!zfsvfs->z_use_sa && acl_ids.z_aclp->z_acl_bytes > ZFS_ACE_SPACE) { > > 2149 dmu_tx_hold_write(tx, DMU_NEW_OBJECT, 0, > > 2150 acl_ids.z_aclp->z_acl_bytes); > > 2151 } > > > > PS: Please, CC me > Having a cursory look I'm going to guess -> > zfs_freebsd_mkdir > dmu_tx_assign > dmu_tx_try_assign > dmu_tx_count_write > if (txh->txh_space_towrite + txh->txh_space_tooverwrite > > 2 * DMU_MAX_ACCESS) > err = SET_ERROR(EFBIG); zfs_freebsd_mkdir dmu_tx_hold_zap(tx, DMU_NEW_OBJECT, FALSE, NULL); dmu_tx_count_write return err = EFBIG Not sure about check txh->txh_space_towrite/txh->txh_space_tooverwrite: dtrace: failed to compile script /mnt/big.d: line 30: printf( ) argument #3 is incompatible with conversion #2 prototype: conversion: %d prototype: char, short, int, long, or long long argument: refcount_t out: if (refcount_count(&txh->txh_space_towrite) + refcount_count(&txh->txh_space_tooverwrite) > 2 * DMU_MAX_ACCESS) err = SET_ERROR(EFBIG);