Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 097810ec authored by Daniel Rosenberg's avatar Daniel Rosenberg Committed by Automerger Merge Worker
Browse files

Merge "Check property for sdcardfs use" into rvc-dev am: 3f15f401

Change-Id: I95ad05f3be34cb22ffc085a86980d498838d520f
parents eca0ff9e 3f15f401
Loading
Loading
Loading
Loading
+3 −13
Original line number Diff line number Diff line
@@ -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.
+10 −19
Original line number Diff line number Diff line
@@ -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,14 +1546,13 @@ 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");
    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);
        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);

+43 −0
Original line number Diff line number Diff line
/*
 * 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_