diff --git a/trusty/storage/proxy/Android.bp b/trusty/storage/proxy/Android.bp
index 94f26d8..38d8685 100644
--- a/trusty/storage/proxy/Android.bp
+++ b/trusty/storage/proxy/Android.bp
@@ -35,10 +35,7 @@
         "liblog",
         "libhardware_legacy",
     ],
-    header_libs: [
-        "libcutils_headers",
-        "libgsi_headers",
-    ],
+    header_libs: ["libcutils_headers"],
 
     static_libs: [
         "libfstab",
diff --git a/trusty/storage/proxy/checkpoint_handling.cpp b/trusty/storage/proxy/checkpoint_handling.cpp
index 3305d8d..6c2fd36 100644
--- a/trusty/storage/proxy/checkpoint_handling.cpp
+++ b/trusty/storage/proxy/checkpoint_handling.cpp
@@ -18,12 +18,9 @@
 #include "log.h"
 
 #include <fstab/fstab.h>
-#include <unistd.h>
 #include <cstring>
 #include <string>
 
-#include <libgsi/libgsi.h>
-
 namespace {
 
 bool checkpointingDoneForever = false;
@@ -78,15 +75,3 @@
 
     return 0;
 }
-
-/**
- * is_gsi_running() - Check if a GSI image is running via DSU.
- *
- * This function is equivalent to android::gsi::IsGsiRunning(), but this API is
- * not yet vendor-accessible although the underlying metadata file is.
- *
- */
-bool is_gsi_running() {
-    /* TODO(b/210501710): Expose GSI image running state to vendor storageproxyd */
-    return !access(android::gsi::kGsiBootedIndicatorFile, F_OK);
-}
diff --git a/trusty/storage/proxy/checkpoint_handling.h b/trusty/storage/proxy/checkpoint_handling.h
index dfe2947..f1bf27c 100644
--- a/trusty/storage/proxy/checkpoint_handling.h
+++ b/trusty/storage/proxy/checkpoint_handling.h
@@ -32,8 +32,6 @@
  */
 int is_data_checkpoint_active(bool* active);
 
-bool is_gsi_running();
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/trusty/storage/proxy/proxy.c b/trusty/storage/proxy/proxy.c
index 2620034..c690a28 100644
--- a/trusty/storage/proxy/proxy.c
+++ b/trusty/storage/proxy/proxy.c
@@ -104,11 +104,8 @@
         return -1;
     }
 
-    /*
-     * No access for group and other. We need execute access for user to create
-     * an accessible directory.
-     */
-    umask(S_IRWXG | S_IRWXO);
+    /* no-execute for user, no access for group and other */
+    umask(S_IXUSR | S_IRWXG | S_IRWXO);
 
     return 0;
 }
diff --git a/trusty/storage/proxy/storage.c b/trusty/storage/proxy/storage.c
index d74a708..2fde30f 100644
--- a/trusty/storage/proxy/storage.c
+++ b/trusty/storage/proxy/storage.c
@@ -16,7 +16,6 @@
 #include <errno.h>
 #include <fcntl.h>
 #include <inttypes.h>
-#include <libgen.h>
 #include <stdbool.h>
 #include <stdlib.h>
 #include <string.h>
@@ -25,16 +24,13 @@
 #include <sys/types.h>
 #include <unistd.h>
 
-#include "checkpoint_handling.h"
-#include "ipc.h"
 #include "log.h"
+#include "ipc.h"
 #include "storage.h"
 
 #define FD_TBL_SIZE 64
 #define MAX_READ_SIZE 4096
 
-#define ALTERNATE_DATA_DIR "alternate/"
-
 enum sync_state {
     SS_UNUSED = -1,
     SS_CLEAN =  0,
@@ -48,8 +44,6 @@
 static enum sync_state dir_state;
 static enum sync_state fd_state[FD_TBL_SIZE];
 
-static bool alternate_mode;
-
 static struct {
    struct storage_file_read_resp hdr;
    uint8_t data[MAX_READ_SIZE];
@@ -222,7 +216,6 @@
                       const void *r, size_t req_len)
 {
     char *path = NULL;
-    char* parent_path;
     const struct storage_file_open_req *req = r;
     struct storage_file_open_resp resp = {0};
 
@@ -241,24 +234,6 @@
         goto err_response;
     }
 
-    /*
-     * TODO(b/210501710): Expose GSI image running state to vendor
-     * storageproxyd. We want to control data file paths in vendor_init, but we
-     * don't have access to the necessary property there yet. When we have
-     * access to that property we can set the root data path read-only and only
-     * allow creation of files in alternate/. Checking paths here temporarily
-     * until that is fixed.
-     *
-     * We are just checking for "/" instead of "alternate/" because we still
-     * want to still allow access to "persist/" in alternate mode (for now, this
-     * may change in the future).
-     */
-    if (alternate_mode && !strchr(req->name, '/')) {
-        ALOGE("%s: Cannot open root data file \"%s\" in alternate mode\n", __func__, req->name);
-        msg->result = STORAGE_ERR_ACCESS;
-        goto err_response;
-    }
-
     int rc = asprintf(&path, "%s/%s", ssdir_name, req->name);
     if (rc < 0) {
         ALOGE("%s: asprintf failed\n", __func__);
@@ -271,23 +246,7 @@
     if (req->flags & STORAGE_FILE_OPEN_TRUNCATE)
         open_flags |= O_TRUNC;
 
-    parent_path = dirname(path);
     if (req->flags & STORAGE_FILE_OPEN_CREATE) {
-        /*
-         * Create the alternate parent dir if needed & allowed.
-         *
-         * TODO(b/210501710): Expose GSI image running state to vendor
-         * storageproxyd. This directory should be created by vendor_init, once
-         * it has access to the necessary bit of information.
-         */
-        if (strstr(req->name, ALTERNATE_DATA_DIR) == req->name) {
-            rc = mkdir(parent_path, S_IRWXU);
-            if (rc && errno != EEXIST) {
-                ALOGE("%s: Could not create parent directory \"%s\": %s\n", __func__, parent_path,
-                      strerror(errno));
-            }
-        }
-
         /* open or create */
         if (req->flags & STORAGE_FILE_OPEN_CREATE_EXCLUSIVE) {
             /* create exclusive */
@@ -508,9 +467,6 @@
 
 int storage_init(const char *dirname)
 {
-    /* If there is an active DSU image, use the alternate fs mode. */
-    alternate_mode = is_gsi_running();
-
     fs_state = SS_CLEAN;
     dir_state = SS_CLEAN;
     for (uint i = 0; i < FD_TBL_SIZE; i++) {
