ZFS: mkdir: File too large

Slawa Olhovchenkov slw at zxy.spb.ru
Thu Feb 2 15:04:19 UTC 2017


On Thu, Feb 02, 2017 at 05:52:51PM +0300, Slawa Olhovchenkov wrote:

> On Thu, Feb 02, 2017 at 02:50:01PM +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 <zfs_freebsd_mkdir+931>:     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 <zfs_freebsd_mkdir+931> and ends at 0xffffffff8117181a <zfs_freebsd_mkdir+938>.
> > >
> > >    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
> > What OS ver as those offsets seem odd?

Offset seem true:

dmu_tx_assign failed at start by tx->tx_err == EFBIG.
tx->tx_err is EFBIG at dmu_tx_hold_zap:entry :

# dtrace -n 'fbt:zfs:dmu_tx_hold_zap:entry { printf("err %d id %x", args[0]->tx_err, args[1]); }'
dtrace: description 'fbt:zfs:dmu_tx_hold_zap:entry ' matched 1 probe
CPU     ID                    FUNCTION:NAME
  0  31349            dmu_tx_hold_zap:entry err 0 id 4
  0  31349            dmu_tx_hold_zap:entry err 0 id ffffffffffffffff
  0  31349            dmu_tx_hold_zap:entry err 27 id 6

> I am try trace every call in zfs_freebsd_mkdir.
> This is dmu_tx_assign:
> 
>   3  29599             dmu_tx_assign:return ret 27
> 
>   2153          dmu_tx_hold_sa_create(tx, acl_ids.z_aclp->z_acl_bytes +
>   2154              ZFS_SA_BASE_ATTR_SIZE);
>   2155  
>   2156          error = dmu_tx_assign(tx, TXG_WAIT);
>   2157          if (error) {
>   2158                  zfs_acl_ids_free(&acl_ids);
>   2159                  dmu_tx_abort(tx);
>   2160                  getnewvnode_drop_reserve();
>   2161                  ZFS_EXIT(zfsvfs);
>   2162                  return (error);
>   2163          }


More information about the freebsd-fs mailing list