From 27dd88bf9e404411b461a0a36a8219df2ec06867 Mon Sep 17 00:00:00 2001 From: Sebastian Stenzel Date: Wed, 14 Apr 2021 09:55:52 +0000 Subject: [PATCH] 8262957: (fs) Fail fast in UnixFileStore.isExtendedAttributesEnabled Reviewed-by: alanb --- .../unix/classes/sun/nio/fs/UnixFileStore.java | 5 +++++ .../classes/sun/nio/fs/UnixNativeDispatcher.java | 12 ++++++++++-- .../unix/native/libnio/fs/UnixNativeDispatcher.c | 6 ++++++ 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/java.base/unix/classes/sun/nio/fs/UnixFileStore.java b/src/java.base/unix/classes/sun/nio/fs/UnixFileStore.java index 45d6114ae5f..749d6ff4473 100644 --- a/src/java.base/unix/classes/sun/nio/fs/UnixFileStore.java +++ b/src/java.base/unix/classes/sun/nio/fs/UnixFileStore.java @@ -179,6 +179,11 @@ abstract class UnixFileStore * @return true if enabled, false if disabled or unable to determine */ protected boolean isExtendedAttributesEnabled(UnixPath path) { + if (!UnixNativeDispatcher.xattrSupported()) { + // avoid I/O if native code doesn't support xattr + return false; + } + int fd = -1; try { fd = path.openForAttributeAccess(false); diff --git a/src/java.base/unix/classes/sun/nio/fs/UnixNativeDispatcher.java b/src/java.base/unix/classes/sun/nio/fs/UnixNativeDispatcher.java index 1b0c4ef35cf..90be5cefae3 100644 --- a/src/java.base/unix/classes/sun/nio/fs/UnixNativeDispatcher.java +++ b/src/java.base/unix/classes/sun/nio/fs/UnixNativeDispatcher.java @@ -614,8 +614,9 @@ class UnixNativeDispatcher { */ private static final int SUPPORTS_OPENAT = 1 << 1; // syscalls private static final int SUPPORTS_FUTIMES = 1 << 2; - private static final int SUPPORTS_FUTIMENS = 1 << 4; - private static final int SUPPORTS_LUTIMES = 1 << 8; + private static final int SUPPORTS_FUTIMENS = 1 << 3; + private static final int SUPPORTS_LUTIMES = 1 << 4; + private static final int SUPPORTS_XATTR = 1 << 5; private static final int SUPPORTS_BIRTHTIME = 1 << 16; // other features private static final int capabilities; @@ -654,6 +655,13 @@ class UnixNativeDispatcher { return (capabilities & SUPPORTS_BIRTHTIME) != 0; } + /** + * Supports extended attributes + */ + static boolean xattrSupported() { + return (capabilities & SUPPORTS_XATTR) != 0; + } + private static native int init(); static { jdk.internal.loader.BootLoader.loadLibrary("nio"); diff --git a/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c b/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c index fe742842f94..9df8be1e62c 100644 --- a/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c +++ b/src/java.base/unix/native/libnio/fs/UnixNativeDispatcher.c @@ -315,6 +315,12 @@ Java_sun_nio_fs_UnixNativeDispatcher_init(JNIEnv* env, jclass this) capabilities |= sun_nio_fs_UnixNativeDispatcher_SUPPORTS_BIRTHTIME; #endif + /* supports extended attributes */ + +#ifdef _SYS_XATTR_H_ + capabilities |= sun_nio_fs_UnixNativeDispatcher_SUPPORTS_XATTR; +#endif + return capabilities; }