---
name: "pmem2_source_device_usc"
section: "3"
platform: "linux"
package: "libpmem2-dev"
version: "1.13.1-1.1+b1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/pmem2_source_device_usc"
---

# pmem2\_source\_device\_usc(3)

returns the unsafe shutdown counter value of a device

## NAME

**pmem2\_source\_device\_usc**() - returns the *unsafe shutdown* *counter* value of a device

## SYNOPSIS

-

  ```
  #include <libpmem2.h>
  struct pmem2_source;
  int pmem2_source_device_usc(const struct pmem2_source *source, uint64_t *usc);
  ```

## DESCRIPTION

The **pmem2\_source\_device\_usc**() function retrieves the sum of the *unsafe shutdown count*(**USC**) values of all hardware devices backing the data source and stores it in *\*usc*.

Please refer to [**libpmem2\_unsafe\_shutdown**(7)](/libpmem2_unsafe_shutdown/7.md) for detailed description on how to properly consume this information.

## RETURN VALUE

The **pmem2\_source\_device\_usc**() function returns 0 on success. If the function fails, the *\*usc* variable content is left unmodified and a negative error code is returned.

## ERRORS

The **pmem2\_source\_device\_usc**() can fail with the following errors:

On all systems:

- •

  **PMEM2\_E\_NOSUPP** - the underlying platform does not expose unsafe shutdown count information.

On Windows:

- •

  \-**errno** equivalent of return code set by failing **GetFinalPathNameByHandleW**(), while trying to resolve volume path from the file handle.

- •

  \-**errno** set by failing [**malloc**(3)](/malloc/3.md), while trying to allocate a buffer for storing volume path.

- •

  \-**errno** equivalent of return code set by failing **CreateFileW**(), while trying to obtain a handle to the volume.

- •

  \-**errno** equivalent of return code set by failing **DeviceIoControl**(), while trying to obtain volume **USC** value.

On Linux:

- •

  \-**errno** set by failing [**fstat**(2)](/fstat/2.md), while trying to validate the file descriptor.

- •

  \-**errno** set by failing **ndctl\_new**(), while trying to initiate a new NDCTL library context.

- •

  \-**errno** set by failing **ndctl\_dimm\_get\_dirty\_shutdown**(), while trying to obtain DIMM **USC** value.

## SEE ALSO

[**fstat**(2)](/fstat/2.md), [**errno**(3)](/errno/3.md), [**malloc**(3)](/malloc/3.md), [**libpmem2\_unsafe\_shutdown**(7)](/libpmem2_unsafe_shutdown/7.md), and **\<https://pmem.io\>**
