Merge "Check property for sdcardfs use" into rvc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
3f15f4018e
@@ -17,33 +17,23 @@
|
||||
#define LOG_TAG "StorageManager"
|
||||
#include <android-base/file.h>
|
||||
#include <android-base/logging.h>
|
||||
#include <android-base/properties.h>
|
||||
#include <android-base/unique_fd.h>
|
||||
#include <fcntl.h>
|
||||
#include <linux/fs.h>
|
||||
|
||||
#include <nativehelper/JNIHelp.h>
|
||||
#include "core_jni_helpers.h"
|
||||
#include "filesystem_utils.h"
|
||||
|
||||
namespace android {
|
||||
|
||||
static const char* kProcFilesystems = "/proc/filesystems";
|
||||
|
||||
// Checks whether the passed in filesystem is listed in /proc/filesystems
|
||||
static bool IsFilesystemSupported(const std::string& fsType) {
|
||||
std::string supported;
|
||||
if (!android::base::ReadFileToString(kProcFilesystems, &supported)) {
|
||||
PLOG(ERROR) << "Failed to read supported filesystems";
|
||||
return false;
|
||||
}
|
||||
return supported.find(fsType + "\n") != std::string::npos;
|
||||
}
|
||||
|
||||
jboolean android_os_storage_StorageManager_setQuotaProjectId(JNIEnv* env, jobject self,
|
||||
jstring path, jlong projectId) {
|
||||
struct fsxattr fsx;
|
||||
ScopedUtfChars utf_chars_path(env, path);
|
||||
|
||||
static bool sdcardFsSupported = IsFilesystemSupported("sdcardfs");
|
||||
static bool sdcardFsSupported = IsSdcardfsUsed();
|
||||
if (sdcardFsSupported) {
|
||||
// sdcardfs doesn't support project ID quota tracking and takes care of quota
|
||||
// in a different way.
|
||||
|
||||
@@ -88,12 +88,13 @@
|
||||
#include <utils/String8.h>
|
||||
#include <utils/Trace.h>
|
||||
|
||||
#include "core_jni_helpers.h"
|
||||
#include <nativehelper/JNIHelp.h>
|
||||
#include <nativehelper/ScopedLocalRef.h>
|
||||
#include <nativehelper/ScopedPrimitiveArray.h>
|
||||
#include <nativehelper/ScopedUtfChars.h>
|
||||
#include "core_jni_helpers.h"
|
||||
#include "fd_utils.h"
|
||||
#include "filesystem_utils.h"
|
||||
|
||||
#include "nativebridge/native_bridge.h"
|
||||
|
||||
@@ -614,15 +615,6 @@ static void EnableDebugger() {
|
||||
}
|
||||
}
|
||||
|
||||
static bool IsFilesystemSupported(const std::string& fsType) {
|
||||
std::string supported;
|
||||
if (!ReadFileToString("/proc/filesystems", &supported)) {
|
||||
ALOGE("Failed to read supported filesystems");
|
||||
return false;
|
||||
}
|
||||
return supported.find(fsType + "\n") != std::string::npos;
|
||||
}
|
||||
|
||||
static void PreApplicationInit() {
|
||||
// The child process sets this to indicate it's not the zygote.
|
||||
android_mallopt(M_SET_ZYGOTE_CHILD, nullptr, 0);
|
||||
@@ -1554,15 +1546,14 @@ static void isolateJitProfile(JNIEnv* env, jobjectArray pkg_data_info_list,
|
||||
|
||||
static void BindMountStorageToLowerFs(const userid_t user_id, const uid_t uid,
|
||||
const char* dir_name, const char* package, fail_fn_t fail_fn) {
|
||||
|
||||
bool hasSdcardFs = IsFilesystemSupported("sdcardfs");
|
||||
std::string source;
|
||||
if (hasSdcardFs) {
|
||||
source = StringPrintf("/mnt/runtime/default/emulated/%d/%s/%s", user_id, dir_name, package);
|
||||
} else {
|
||||
source = StringPrintf("/mnt/pass_through/%d/emulated/%d/%s/%s",
|
||||
user_id, user_id, dir_name, package);
|
||||
}
|
||||
bool hasSdcardFs = IsSdcardfsUsed();
|
||||
std::string source;
|
||||
if (hasSdcardFs) {
|
||||
source = StringPrintf("/mnt/runtime/default/emulated/%d/%s/%s", user_id, dir_name, package);
|
||||
} else {
|
||||
source = StringPrintf("/mnt/pass_through/%d/emulated/%d/%s/%s", user_id, user_id, dir_name,
|
||||
package);
|
||||
}
|
||||
std::string target = StringPrintf("/storage/emulated/%d/%s/%s", user_id, dir_name, package);
|
||||
|
||||
// As the parent is mounted as tmpfs, we need to create the target dir here.
|
||||
|
||||
43
core/jni/filesystem_utils.h
Normal file
43
core/jni/filesystem_utils.h
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright (C) 2020 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef FRAMEWORKS_BASE_CORE_JNI_MISC_UTILS_H_
|
||||
#define FRAMEWORKS_BASE_CORE_JNI_MISC_UTILS_H_
|
||||
|
||||
#include <android-base/file.h>
|
||||
#include <android-base/logging.h>
|
||||
#include <android-base/properties.h>
|
||||
#include <fcntl.h>
|
||||
#include <linux/fs.h>
|
||||
|
||||
namespace {
|
||||
static constexpr const char* kExternalStorageSdcardfs = "external_storage.sdcardfs.enabled";
|
||||
|
||||
static bool IsFilesystemSupported(const std::string& fsType) {
|
||||
std::string supported;
|
||||
if (!android::base::ReadFileToString("/proc/filesystems", &supported)) {
|
||||
ALOGE("Failed to read supported filesystems");
|
||||
return false;
|
||||
}
|
||||
return supported.find(fsType + "\n") != std::string::npos;
|
||||
}
|
||||
|
||||
static inline bool IsSdcardfsUsed() {
|
||||
return IsFilesystemSupported("sdcardfs") &&
|
||||
android::base::GetBoolProperty(kExternalStorageSdcardfs, true);
|
||||
}
|
||||
} // namespace
|
||||
#endif // FRAMEWORKS_BASE_CORE_JNI_MISC_UTILS_H_
|
||||
Reference in New Issue
Block a user