freebsd with flexible iflib nic queues
Go to file
Stefan Eßer b42a78a19a fs/msdosfs: add tracking of free root directory entries
This update implements tallying of free directory entries during
create, delete,	or rename operations on FAT12 and FAT16 file systems.

Prior to this change, the total number of root directory entries
was reported as number of inodes, but 0 as the number of free
inodes, causing system health monitoring software to warn about
a suspected disk full issue.

The FAT12 and FAT16 file systems provide a limited number of
root directory entries, e.g. 512 on typical hard disk formats.
The valid range of values is 1 to 65535, but the msdosfs code
will effectively round up "odd" values to the next multiple of 16
(e.g. 513 would allow for 528 root directory entries).

This update implements tracking of directory entries during create,
delete, or rename operations, with initial values determined by
scanning the directory when the file system is mounted.

Total and free directory entries are reported in the f_files and
f_ffree elements of struct statfs, despite differences in semantics
of these values:

- There is no limit on the number of files and directories that can
  be created on a FAT file system. Only the root directory of FAT12
  and FAT16 file systems is limited, any number of files can still be
  created in sub-directories, even when 0 free "inodes" are reported.

- A single file can require 1 to 21 directory entries, depending on
  the character set, structure, and length of the name. The DOS 8.3
  style file name takes up 1 entry, and if the name does not comply
  with the syntax of a DOS 8.3 file name, 1 additional entry is used
  for each 13 characters of the file name. Since all these entries
  have to be contiguous, it is possible that a file or directory with
  a long name can not be created, despite a sufficient total number of
  free directory entries.

- Renaming a file can require more directory entries than currently
  allocated to store its long name, which may prevent an in-place
  update of the name if more entries are needed. This may cause a
  rename operation to fail if no contiguous range of free entries for
  the new name can be found.

- The volume label is stored in a directory entry. An empty FAT file
  system with a volume label will therefore show 1 used "inode" in
  df.

- The perceentage of free inodes shown in df or monitoring tools does
  only represent the state of the root directory of a FAT12 or FAT16
  file system. Neither does a reported value of 0% free inodes does
  prevent files from being created in sub-directories, nor does a
  value of 50% free inodes guarantee that even a single file with
  a "long" name can be created in the root directory (if every other
  directory entry is occupied and there are no 2 contiguous entries).

The statfs(2) and df(1) man pages have been updated with a notice
regarding the possibly different semantics of values reported as
total and free inodes for non-Unix file systems.

PR:		270053
Reported by:	Ben Woods <woodsb02@freebsd.org>
Approved by:	mckusick
MFC after:	1 month
Differential Revision:	https://reviews.freebsd.org/D38987
2023-04-03 04:13:55 -04:00
.cirrus-ci Cirrus-CI: add some timing info on pkg install failure 2021-08-04 15:02:00 -04:00
.github .github: Test DISK_IMAGE_TOOLS_BOOTSTRAP in CI 2023-04-03 04:10:16 -04:00
bin fs/msdosfs: add tracking of free root directory entries 2023-04-03 04:13:55 -04:00
cddl libdtrace: fix indendation in dt_printd() 2023-04-03 04:12:18 -04:00
contrib Import tzdata 2023c 2023-04-03 04:13:55 -04:00
crypto sftp: add description of memory leak fix 2023-04-03 04:12:27 -04:00
decoder Update OpenCSD to v1.4.0. 2023-04-03 04:13:49 -04:00
doxygen Vendor import of xz 5.4.2 (trimmed) 2023-04-03 04:12:15 -04:00
etc Include Embedded Trace Extensions (ETE) source code to the OpenCSD build. 2023-04-03 04:13:51 -04:00
gnu gnu diff3: apply patch to committed src, rather than at build time 2022-11-13 21:33:40 -05:00
include arpa: garbage collect ns_newmsg/ns_rdata decls 2023-04-03 04:12:28 -04:00
kerberos5 kerberos5: retire now-unused MIPS support 2022-11-02 13:16:18 -04:00
lib fs/msdosfs: add tracking of free root directory entries 2023-04-03 04:13:55 -04:00
libexec rc: Chase bfb202c455 and remove ifconfig down/up for wpa_supplicant 2023-04-03 04:12:50 -04:00
release pkg-stage.sh: update port trailing version information 2023-04-03 04:12:19 -04:00
rescue rescue: Fix link order of SSL libraries and fetch. 2023-02-02 09:23:02 -08:00
sbin route: revert transport to rtsock 2023-04-03 04:13:53 -04:00
secure OpenSSL: Regen manual pages for OpenSSL 1.1.1t 2023-02-07 14:01:15 -05:00
share netlink: restrict default userland switch to netlink to i386/amd64. 2023-04-03 04:12:55 -04:00
src/liblzma/check Vendor import of xz 5.4.2 (trimmed) 2023-04-03 04:12:15 -04:00
stand amd64 loader: Use efiserialio for Hyper-V booted systems 2023-04-03 04:11:49 -04:00
sys fs/msdosfs: add tracking of free root directory entries 2023-04-03 04:13:55 -04:00
targets retire sconfig(8) ce(4)/cp(4) configuration tool 2022-12-13 15:25:13 -05:00
tests ses: cleanup ses tests 2023-04-03 04:13:51 -04:00
tools build: glibc on Linux defines explicit_bzero in <string.h>. 2023-04-03 04:13:51 -04:00
usr.bin tftp tests: Fix a typo in the makefile 2023-04-03 04:12:55 -04:00
usr.sbin sesutil: fix "fault all" with zoned jbods 2023-04-03 04:13:51 -04:00
.arcconfig arcanist: use FreeBSD/git project repository instead of FreeBSD/svn 2022-08-23 14:16:41 +00:00
.arclint
.cirrus.yml CI: Run pkgbase METALOG lint script 2023-04-03 04:10:16 -04:00
.clang-format clang-format: Add bitset loop macros 2021-09-21 12:08:01 -04:00
.git-blame-ignore-revs Add git-blame ignore file 2023-01-23 15:27:25 -05:00
.gitattributes Add a basic clang-format configuration file 2019-06-07 15:23:52 +00:00
.gitignore Update OpenCSD to v1.4.0. 2023-04-03 04:13:49 -04:00
CONTRIBUTING.md CONTRIBUTING.md: Fix checkstyle9.pl name 2023-04-03 04:13:51 -04:00
COPYRIGHT Happy New Year 2023! 2023-01-01 13:44:43 +08:00
iso3166.tab Import tzdata 2023a 2023-04-03 04:12:42 -04:00
LOCKS
MAINTAINERS MAINTAINERS: Remove myself from OpenSSL maintenance 2023-04-03 04:13:54 -04:00
Makefile Import tzdata 2023a 2023-04-03 04:12:42 -04:00
Makefile.inc1 Add new DISK_IMAGE_TOOLS_BOOTSTRAP option 2023-04-03 04:10:16 -04:00
Makefile.libcompat libcompat: avoid installing include files twice 2022-11-16 19:15:20 -05:00
Makefile.sys.inc
ObsoleteFiles.inc Remove libvmmapi.so.5 after the shlib version was bumped to 6. 2023-04-03 04:12:51 -04:00
README.md Update OpenCSD to v1.4.0. 2023-04-03 04:13:49 -04:00
RELNOTES RELNOTES: Add an entry for NFS server support in vnet prisons 2023-04-03 04:10:11 -04:00
ssh_config.0 Vendor import of OpenSSH 9.3p1 2023-04-03 04:11:39 -04:00
ssh-keygen.0 Vendor import of OpenSSH 9.3p1 2023-04-03 04:11:39 -04:00
ssh-keyscan.0 Vendor import of OpenSSH 9.3p1 2023-04-03 04:11:39 -04:00
sshd_config.0 Vendor import of OpenSSH 9.3p1 2023-04-03 04:11:39 -04:00
sshd.0 Vendor import of OpenSSH 9.3p1 2023-04-03 04:11:39 -04:00
UPDATING UPDATING: Document arm video devices renaming. 2023-04-03 04:11:47 -04:00

FreeBSD Source:

This is the top level of the FreeBSD source directory.

C/C++ CI Fuzzing Status Coverity Status

For copyright information, please see the file COPYRIGHT in this directory. Additional copyright information also exists for some sources in this tree - please see the specific source directories for more information.

The Makefile in this directory supports a number of targets for building components (or all) of the FreeBSD source tree. See build(7), config(8), FreeBSD handbook on building userland, and Handbook for kernels for more information, including setting make(1) variables.

For information on the CPU architectures and platforms supported by FreeBSD, see the FreeBSD website's Platforms page.

Source Roadmap:

Directory Description
bin System/user commands.
cddl Various commands and libraries under the Common Development and Distribution License.
contrib Packages contributed by 3rd parties.
crypto Cryptography stuff (see crypto/README).
etc Template files for /etc.
gnu Commands and libraries under the GNU General Public License (GPL) or Lesser General Public License (LGPL). Please see gnu/COPYING and gnu/COPYING.LIB for more information.
include System include files.
kerberos5 Kerberos5 (Heimdal) package.
lib System libraries.
libexec System daemons.
release Release building Makefile & associated tools.
rescue Build system for statically linked /rescue utilities.
sbin System commands.
secure Cryptographic libraries and commands.
share Shared resources.
stand Boot loader sources.
sys Kernel sources (see sys/README.md).
targets Support for experimental DIRDEPS_BUILD
tests Regression tests which can be run by Kyua. See tests/README for additional information.
tools Utilities for regression testing and miscellaneous tasks.
usr.bin User commands.
usr.sbin System administration commands.

From version 0.4, library versioning will use a semantic versioning format (per http://semver.org) of the form Major.minor.patch (M.m.p).

Internal library version calls, documentation and git repository will use this format moving forwards. Where a patch version is not quoted, or quoted as .x then comments will apply to the entire release.

Releases will be at M.m.0, with patch version incremented for bugfixes or documentation updates.

Releases will appear on the master branch in the git repository with an appropriate version tag.

CoreSight Trace Component Support.

Current Version 1.4.0

Current support:

  • ETE (v1.3) instruction trace - packet processing and packet decode.

  • ETMv4 (v4.6 [A/R profile] v4.4 [M profile]) instruction trace - packet processing and packet decode.

  • PTM (v1.1) instruction trace - packet processing and packet decode.

  • ETMv3 (v3.5) instruction trace - packet processing and packet decode.

  • ETMv3 (v3.5) data trace - packet processing.

  • STM (v1.1) software trace - packet processing and packet decode.

  • External Decoders - support for addition of external / custom decoders into the library.

Support to be added:

  • ITM software trace - packet processing and decode.
  • ETMv3 data trace - packet decode.
  • ETMv4 data trace - packet processing and decode.

Note: for ITM and STM, packet decode is combining Master+Channel+Marker+Payload packets into a single generic output packet.

Note on the Git Repository.

This git repository for OpenCSD contains only source for the OpenCSD decoder library. From version 0.4, releases appear as versioned tags on the master branch.

CoreSight kernel drivers and perf suport for CoreSight trace is maintained in the latest upstream kernel versions.

One exception is a minor patch required for autoFDO support. See [autofdo.md](@ref AutoFDO).

Documentation

API Documentation is provided inline in the source header files, which use the doxygen standard mark-up. Run doxygen on the ./doxygen_config.dox file located in the ./docs directory..

doxygen ./doxygen_config.dox

This will produce the documentation in the ./docs/html directory. The doxygen configuration also includes the *.md files as part of the documentation.

Application Programming using the Library

See the [programmers guide](@ref prog_guide) for details on usage of the library in custom applications. (./docs/prog_guide/prog_guide_main.md).

Building and Installing the Library

See [build_libs.md](@ref build_lib) in the ./docs directory for build details.

The linux build makefile now contains options to install the library for a linux environment.

How the Library is used in Linux perf

The library and additional infrastructure for programming CoreSight components has been integrated with the standard linux perfomance analysis tool perf.

See [HOWTO.md](@ref howto_perf) for details.

How to use the Library, perf and Trace for AutoFDO

Capturing trace using perf and decoding using the library can generate profiles for AutoFDO.

See [autofdo.md](@ref AutoFDO) for details and scripts.

(./tests/auto-fdo/autofdo.md).

Version and Modification Information

  • Version 0.001: Library development - tested with perf tools integration - BKK16, 8th March 2016

  • Version 0.002: Library development - added in PTM decoder support. Restructure header dir, replaced ARM rctdl prefix with opencsd/ocsd.

  • Version 0.003: Library development - added in ETMv3 instruction decoder support.

  • Version 0.4 : Library development - updated decode tree and C-API for generic decoder handling. Switch to semantic versioning.

  • Version 0.4.1: Minor Update & Bugfixes - fix to PTM decoder, ID checking on test program, adds NULL_TS support in STM packet processor.

  • Version 0.4.2: Minor Update - Update to documentation for perf usage in 4.8 kernel branch.

  • Version 0.5.0: Library Development - external decoder support. STM full decode.

  • Version 0.5.1: Minor Update & Bugfixes - Update HOWTO for kernel 4.9. Build fixes for parallel builds

  • Version 0.5.2: Minor Update & Bugfixes - Update trace info packet string o/p + Cycle count packet bugfixes.

  • Version 0.5.3: Doc update for using AutoFDO with ETM and additional timestamp and cycle count options.

  • Version 0.5.4: Updates: X-compile for arm/arm64. Remove deprecated VS2010 builds. Bugfix: GCC inline semantics in debug build.

  • Version 0.6.0: Packet printers moved from tests into the main library. C++ and C APIs updated to allow clients to use them. Update to allow perf to insert barrier packets (4xFSYNC) which the decoder can be made to use to reset the decode state.

  • Version 0.6.1: Bugfix: instruction follower bug on A32 branch to T32.

  • Version 0.7.0: Add handling for trace return stack feature to ETMv4 and PTM trace.

  • Version 0.7.1: Bugfix: ETMv3 packet processor.

  • Version 0.7.2: Bugfix: ETMv4 decoder - fix exact match packet address follower.

  • Version 0.7.3: Bugfix: PTM decoder - issues with initialisation and ASYNC detection.

  • Version 0.7.4: Notification of change of repository for perf extensions. gcc 6.x build fixes.

  • Version 0.7.5: Bugfix: ETMv4 decoder memory leak. Linux build update - header dependencies force rebuild.

  • Version 0.8.0: Header restructure and build update to enable linux version to install library and C-API headers in standard locations. Library output naming changed from 'cstraced' to 'opencsd'.

  • Version 0.8.1: Minor updates: Use install tool to copy headers. Changes to HOWTO for perf usage.

  • Version 0.8.2: Bugfix: C++ init errors fixed for CLANG build process.

  • Version 0.8.3: Bugfix: ETMv4 decoder issues fixed.

  • Version 0.8.4: build: makefile updates and improvements to get build process compatible with Debian packaging.

  • Version 0.9.0: Performance improvements for perf: Additional info in instruction range output packet. Caching memory accesses. Added Programmers guide to documentation.

  • Version 0.9.1: Bugfix: Crash during decode when first memory access is to address where no image provided.

  • Version 0.9.2: Bugfix: ETMv4: Incorrect Exception number output for Genric exception packets. AutoFDO: update documentation for AutoFDO usage and add in "record.sh" script

  • Version 0.9.3: Bugfix: Test snapshot library not handling 'offset' parameters in dump file sections. Install: ocsd_if_version.h moved to opencsd/include to allow installation on OS & use in compiling client apps.

  • Version 0.10.0:

    • Updates: Add additional information about the last instruction to the generic output packet.
    • Docs: update docs for updated output packet.
    • Bugfix: typecast removed from OCSD_VER_NUM in ocsd_if_version.h to allow use in C pre-processor.
    • Bugfix: ETMV4: Interworking ISA change between A32-T32 occasionally missed during instruction decode.
  • Version 0.10.1:

    • Updates: Build update - allow multi-thread make (make -j).
    • Docs: Minor update to AutoFDO documentation.
  • Version 0.11.0:

    • Update: ETM v4 decoder updated to support ETM version up to v4.4
    • Update: Memory access callback function - added new callback signature to provide TraceID to client when requesting memory.
    • Update: Created new example program to demonstrate using memory buffer in APIs.
    • Bugfix: Typos in docs and source.
    • Bugfix: Memory accessor - validate callback return values.
  • Version 0.11.1:

    • Update: build:- change -fpic to -fPIC to allow Debian build on sparc.
    • Bugfix: build:- remove unused variable
  • Version 0.11.2:

    • Update: docs:- HOWTO.md update to match new perf build requirements.
    • Bugfix: Minor spelling typos fixed.
  • Version 0.12.0:

    • Update: Frame deformatter - TPIU FSYNC and HSYNC support added.
    • Update: ETM v4: Bugfix & clarification on Exception trace handling. Where exception occurs at a branch target before any instructions have been executed, the preferred return address is also the target address of the branch instruction. This case now includes as specific flag in the packet. Additionally any context change associated with this target address was being applied incorrectly.
    • Update_: Core / Architecture mapping to core names as used by test programs / snapshots updated to include additional recent ARM cores.
    • Update: Docs: Update to reflect new exception flag. Update test program example to reflect latest output.
    • Bugfix: ETM v4: Valid trace info packet was not handled correctly (0x01, 0x00).
    • Bugfix: ETM v4: Error messaging on commit stack overflow.
  • Version 0.12.1:

    • Update: build: remove -g option from release build.
    • Update: tests: Snapshots can now use generic arch+profile names rather than core names, e.g. ARMv8-A
    • Bugfix: Instruction decode - v8.3 B[L]A{A|B}[Z] instructions mis-identified. -Bugfix: Transition from A64 to A32 can be mis-decoded if the trace implementation represents the transition as an individual address packet followed by a context packet.
  • Version 0.12.2:

    • Bugfix: Clean up memory leaks.
    • Bugfix: ETMv4: Ensure addressing history zeroed after TINFO.
    • Update: Allow GCC version to be included in build output path.
    • Bugfix: Packet printing update when WFI/WFE is P0 element.
  • Version 0.13.x : Intermediate development version.

  • Version 0.14.0:

    • Update: ETMv4 - decoder update & simplification to handle advanced trace features.
    • Update: ETMv4 - decoder support for speculative trace.
    • Update: Generic Elements: Additional information in EOT, UNSYNC, ON packets to give reason.
    • Update: Memaccess: Add EL2 secure memory space flag.
    • Update: Documentation: Updated for release changes and to reflect latest kernel version support for CoreSight.
    • Update: Perf helper scripts updated to reflect latest build flow.
    • Bugfix: Fix for component operational flag inputs.
  • Version 0.14.1:

    • Update: ETMv4 - Add support for Q elements.
    • Bugfix: build: fix logic issue for && operator. (github issue #23, sumitted by yabinc)
  • Version 0.14.2:

    • Update: Architecture versioning. Set enum tag values to make conversion to numeric version easier.
    • Update: I-decode: remove global temporary decode state data and replace with local instance data to make library more easily usable in multi-threaded programs.
    • Bugfix: I-decode: Some Thumb instructions not correctly reported as implied returns. (github issue #24, submitted by kongy).
  • Version 0.14.3:

    • Update: Fix makefile to be compliant with RPM base distros. (github issue #26, submitted by jlinton)
    • Update: Add section to autofdo document.
    • Bugfix: STM: fix bug that was missing ASYNC packets. (github issue #27, reported by subhasish Karmakar)
  • Version 0.14.4:

    • Update: makefile: Add DESTDIR to install targets. (github issue #30)
    • Update: tests: add script to run single test only.
    • Update: docs: update to location of ARM coresight driver backports directory.
    • Bugfix: ETMv3: Fix missing comma in string list. (github issue #31)
    • Bugfix: makefile: tests: Fix build race problem (github issue #32)
    • Bugfix: tests: fix ignore tpiu command line options (github issue #28)
  • Version 1.0.0:

    • New Decode Protocol: Support added for the ETE protocol, used by ARM PEs that implement the FEAT_ETE feature. Supports new architectural features in this trace, including FEAT_TME.
    • Update: Output Elememts: New protocol defines two new output elements.
    • Update: Add support for WFIT / WFET instructions traced as P0 elements.
    • Update: Architecture versioning. Arch v8 + PEs may add features in a flexible manner, and ARM also declares future features ahead of architecture versions to allow support to be added. APIs requiring an architecture version can now use ARCH_AA64 to declare a version of v8.3 + additional features. This relaxes the strict versionnig rules that the decoder uses when looking for Opcodes as trace waypoints.
    • Update: docs: Add linux 'man' file and installation.
    • Bugfix: build: Fix clean install, and remove static lib build test from main makefile to dev makefile only. (github issue #33)
  • Version 1.1.0:

    • Update: ETM v4.6 support.
    • Update: C-API - add API functions to get last error and convert error code to string.
    • Bugfix: ETMv4/ETE - fix loop problem in commit elements.
    • Bugfix: ETMv4/ETE - make error handling consistent.
    • Bugfix: Add Pull request #36 from github (Ross Burton)
    • Bugfix: Add Pull request #37 from github (Ian Rogers)
  • Version 1.1.1:

    • Bugfix: Fix include and install for ETE decoder headers.
  • Version 1.2.0:

    • Update: Add API for counting packet decode statistics, and Frame debmux statistics.
    • Update: Update test scripts to allow additional command line options to be passed.
    • Bugfix: Fix various build warnings.
    • Bugfix: Remove unused variable (github issue #38 from Yi Kong)
    • Bugfix: Remove noisy printf (James Clark)
    • Bugfix: Fix documentation issues (github issues #39 & #40 from rbresalier)
  • Version 1.2.1:

    • Bugfix: ETM4x / ETE - output of context elements to client can in some circumstances be delayed until after subsequent atoms have been processed leading to incorrect memory decode access via the client callbacks. Fixed to flush context elements immediately they are committed.
  • Version 1.3.0:

    • Admin: Dev versions now have patch versions at least +100 from root public version
    • Update: Add support for conditional branch (BC.cond) introduced for v8.8 / v9.3 architecture.
    • Update: ETE: Add support for NSE bit - security state bit defining Root / Realm states in FEAT_RME.
  • Version 1.3.1:

    • Bugfix: Add header file in snapshot parser - fix build for certain libc++ libs (github issue #43 from manojgupta)
    • Bugfix: Fix typo in comment (github issue #42 from nothatDinger)
  • Version 1.3.2:

    • Bugfix: ETM4x / ETE - 64 bit timestamp value - MS bit incorrectly masked to 1b0 during extraction from packet.
  • Version 1.3.3:

    • Update: Add build directory for VS2022 build.
    • Update: Add test program for Coresight Frame Demux code
    • Bugfix: PTM: Fix incorrect extraction of Waypoint Address packet (github issue #48)
    • Bugfix: Frame Demux: Fix HSYNC, FSYNC and 4xFSYNC handling that was causing out-of-bounds reads on invalid data input. (issues #49, #50 and #51). Fixed error handling for incorrect number of FSYNC packets in 4xFSYNC frame reset code that was not triggering an error and allowing fun with mis-aligned input data.
    • Bugfix: Fix silent failure if incorrect config flags set when setting up frame demux modes.
  • Version 1.4.0:

    • Update: ETE: Add support for Arch v9.4 FEAT_ITE. ETE v1p3, sw trace instrumentation. Adds in new generic output packet type: OCSD_GEN_TRC_ELEM_INSTRUMENTATION.
    • Bugfix: Fix memory leak in mispredict handling (github issue #52 from yabinc)

Licence Information

This library is licensed under the BSD three clause licence.

A copy of this license is in the LICENCE file included with the source code.

Contact

Using the github site: https://github.com/Linaro/OpenCSD

Mailing list: coresight@lists.linaro.org