Patent ID: 12197387

DETAILED DESCRIPTION

The following Detailed Description describes technologies that enable a system to provide an element of security related to file system operations by considering letter case of a file name (e.g., letter case may be referred to herein as “case”). In various examples, individual nodes in a file system, such as a directory or a file, can be associated with information that describes how to handle letter case when a file name included in a file system operation request is used to locate a file in the file system. For example, a directory may be assigned a case sensitive designation which requires an exact match (e.g., with no variation in case) between a given file name from a request and an actual file name of a file contained in the directory. In another example, a directory may be assigned a case insensitive designation where a match between a given file name and an actual file name does not have to be exact but can vary in case. In yet another example, a directory may be assigned a case preferring designation where a file system first attempts to locate an exact match, and if an exact match cannot be found, then the file system attempts to locate a match that varies in case. Even further, a directory may be assigned a designation that prohibits case varying duplicate names.

The disclosed technologies represent a substantial advantage over existing file systems which are not configured to handle letter case in an effective manner.

FIG.1is an example diagram100depicting a file system102that is configured to handle letter case when navigating a hierarchical structure and/or locating a file. As used herein, the term “hierarchical structure” may generally refer to any scheme that may organize the storage of files and/or that may cause the files to be displayed to a user. In various examples, the file system102can support an operating system of a device. In further examples, the file system102can be part of a file hosting platform including, but not limited to, DROPBOX, BOX, GOOGLE DRIVE, MEGA, PCLOUD, SUGARSYNC, AMAZON DRIVE, and/or MICROSOFT ONEDRIVE. To this end, the file system102is configured to interact with a host system104(e.g., a computing device, a server, etc.). The host system104can include an application or an operating system106, or some other module, that initiates a request for a file system operation108while being executed on the host system104. A request for a file system operation may be referred to herein as a “request”. Example file system operations include, but are not limited to: opening a file, deleting a file, writing to a file, reading from a file, replacing a file, copying a file, moving a file, searching for a file (e.g., as part of a pattern matching query), creating a file, etc.

In various examples, a file system can comprise one or more layers. For instance, a first “logical” layer of a file system is configured to control interactions with an operating system or an application of a host system. The logical layer can provide an application program interface (API) for receiving requests for file system operations and for passing the request to a “virtual” layer and/or a “physical” layer of the file system for processing. A virtual layer is an interface that supports multiple concurrent instances of a physical file system. The physical layer handles the physical operation of a storage unit (e.g., a disk). For instance, the physical layer processes physical blocks being read or written, the physical layer handles buffering and memory management, and/or the physical layer is responsible for the placement of blocks in specific locations on the storage unit. The layers described above may be separate, or their functions can be combined such that a file system is not comprised of separate layers.

The request108includes a path name and/or a file name110that identifies a file stored in the file system102on which to perform the requested file system operation. A path name can include components useable by the file system102to navigate the hierarchical structure of the file system102in order to search for and locate the file. As described above, an individual component in a path name can identify, for example, a host device or a network device that contains the file (e.g., a server), a hardware device such as a storage unit (e.g., a drive), a directory, a file name for the file (e.g., a base file name), and a file type (e.g., a file format or file extension). At least some of the components of a path name can reflect the hierarchical structure of the files system102and can be separated by a delimiting character (e.g., a slash “/”, a backslash character “\”, a colon “:”, etc.). In some instances, reference to a “file name”, as used herein, can include both a file name component and a file type component (e.g., a file name can be “run.exe”).

The file system102can be persistently stored on storage unit(s)112. A storage unit112can be a hard disk drive or a solid-state drive. Examples of a storage unit112include: a machine (e.g., a server), a disk, a platter, a sector, and so forth. In some instances, storage units can be arranged into a “rack” (e.g., a row) and multiple racks of storage units can be arranged into a “grid” of storage units (e.g., configured within a data center). A storage unit112can be local to the host system104(e.g., local storage) or a storage unit112can be remotely located such that the file system102is accessed by the host system104over a network. In various examples, one or more storage units112can comprise a volume or a logical drive.

To illustrate further examples related to handling letter case, the file system102includes a root directory114(e.g., represented by a “\” or some other representation in a path name), which typically is the first or top-most directory in a file system. The root directory114comprises intermediate directories—a “child1” directory116and a “CHILD2” directory118. The “child1” directory116contains a first file (e.g., “TEST.exe” file120), a second file (e.g., “test.exe” file122), and another intermediate directory (e.g., “CHILD3” directory124) which includes a file (e.g., “run.exe” file126). The “CHILD2” directory118contains a first file (e.g., “FOO.docx” file128) and a second file (e.g., “name.docx” file130).

As shown, an individual directory in the file system102can include one or more files and/or one or more directories. The hierarchical structure of the directories and/or files illustrated inFIG.1is provided for ease of discussion with respect to the various examples described herein. Accordingly, the hierarchical structure of the directories and/or files illustrated inFIG.1is used herein as a basis to show how the file system102can be configured with information that describes how to handle letter case when a file name included the request108is used to locate a file in the file system102. Accordingly, it is understood in the context of this disclosure that, any number of directories and/or files can be arranged in various hierarchical structures in order to organize and/or access data (e.g., files) stored across storage unit(s)112.

As used herein, a “level” in a hierarchical structure refers to nodes that are located in a same directory. Thus, the “child1” directory116and the “CHILD2” directory118are sibling nodes that are part of a same level, since they are located directly or immediately below the root directory114. Moreover, the “TEST.exe” file120, the “test.exe” file122, and the “CHILD3” directory124are sibling nodes that are part of a same level, since they are located directly below the “child1” directory116.

FIG.2is an example diagram200depicting a file system102that is configured to use a “case sensitive” designation or a “case insensitive” designation in order to perform a file system operation. A case sensitive designation or a case insensitive designation can be assigned to individual directories in a file system. The case sensitive designation or the case insensitive designation can be specified in an attribute that is assigned to a directory based on user input or based on a default configuration for the file system102. For instance, inFIG.2, the “child1” directory116is assigned a case sensitive attribute202while the “CHILD2” directory118is assigned a case insensitive attribute204. In various examples, a creator or developer (e.g., a user) or anyone else with permission to modify or control the directory can specify the designation and assign the attribute to the directory.

To perform a file system operation on a file in a directory that has a case sensitive designation, the file system102must determine that a case sensitive match exists between a file name given in the request for the file system operation and an actual file name associated with a file contained in the directory. For instance, the file system operation can comprise: opening a file, deleting a file, writing to a file, reading from a file, replacing a file, copying a file, moving a file, searching for a file, and so forth. In a situation where the file system operation is a create a file, and in accordance with the case sensitive designation, the file system102must determine that a case sensitive match does not exist between a file name given in the request for a new file and an actual file name associated with a file contained in the directory, in order for the file system102to perform the file system operation (e.g., create a new file in the directory).

FIG.2illustrates a request206to open the file “TEST.exe” in the “child1” directory (e.g., “TEST.exe” and “child1” may be components of a path name passed to the file system102by an application or an operating system). Given the request206, the file system102checks the “child1” directory116and determines, via the case sensitive attribute202, that a case sensitive match is required between the given file name in the request206and an actual file name of a file in the “child1” directory116in order to successfully perform the file system operation. In this instance, the request206is completed and the file system operation is performed because the file system102determines that a case sensitive match for the file name given in the request206(e.g., “TEST.exe”) exists in the “child1” directory116. That is, the “child1” directory116includes a file120with an actual file name of “TEST.exe”.

FIG.2further illustrates another request208to open the file “Test.exe” in the “child1” directory. Given the request208, the file system102checks the “child1” directory116and determines, via the case sensitive attribute202, that a case sensitive match is required between the given file name in the request208and an actual file name of a file in the “child1” directory116in order to successfully perform the file system operation. In contrast to the successful performance of the file system operation with regard to the request206, request208is not completed and the file system operation is not performed because the file system102determines that a case sensitive match for the file name given in the request206(e.g., “Test.exe”) does not exist in the “child1” directory116. That is, the “child1” directory116does not include a file with an actual file name of “Test.exe” (considering letter case).

FIG.2further illustrates yet another request210to open the file “run.exe” in the “child1/Child3” directories. Again, “run.exe” and “child1/Child3” may be components of a path name that is passed to the file system102by an application or an operating system. In this example, due to the case sensitive attribute202, a case sensitive match must exist between a directory name given in the path name and an actual directory name contained in the “child1” directory. Given the request210, the file system102checks the “child1” directory116and determines, via the case sensitive attribute202, that a case sensitive match is required between the given directory name (e.g., “Child3”) in the request210and an actual name of a directory in the “child1” directory116in order to successfully perform the file system operation. Consequently, request210is not completed and the file system operation is not performed because the file system102determines that a case sensitive match for the directory name given in the request210(e.g., “Child3”) does not exist in the “child1” directory116. That is, the “child1” directory116does not include a directory with an actual directory name of “Child3”, but rather, the “child1” directory116includes a directory with an actual directory name of “CHILD3”.

In yet a further example,FIG.2illustrates another request212to open the file “RUN.exe” in the “child1/CHILD3” directories. In this example, due to the case sensitive attribute202, a case sensitive match must exist between a directory name given in the path name and an actual directory name contained in the “child1” directory. Given the request212, the file system102checks the “child1” directory116and determines, via the case sensitive attribute202, that a case sensitive match is required between the given directory name (e.g., “CHILD3”) in the request212and an actual name of a directory in the “child1” directory116in order to successfully perform the file system operation. Consequently, request212is completed and the file system operation is performed because the file system102determines that a case sensitive match for the directory name given in the request212(e.g., “CHILD3”) exists in the “child1” directory116. Note that in this example, the file system operation is performed in association with the “run.exe” file126even though the given file name is “RUN.exe” (e.g., the “CHILD3” directory124is assigned a case insensitive attribute).

As illustrated, when a directory has a case sensitive designation, a name of an individual component given in a path name must match, in a case sensitive manner, a corresponding name of a node (e.g., a file or a directory) that is contained within the directory in order to perform a file system operation on a file in the file system.

To perform a file system operation via a directory that has a case insensitive designation, the file system102is allowed to determine that a case insensitive match exists between a file name given in a request for a file system operation and an actual file name associated with a file contained in the directory. While case insensitive matches are allowed, this designation also allows case sensitive matches between a file name given in a request and an actual file name to successfully perform a requested file system operation.

FIG.2illustrates a request214to open the file “NAME.docx” in the “CHILD2” directory. Given the request214, the file system102checks the “CHILD2” directory118and determines, via the case insensitive attribute204, that a case insensitive match is allowed between the given file name in the request214and an actual file name of a file in the “CHILD2” directory118in order to successfully perform the file system operation. In this instance, the request214is completed and the file system operation is performed because the file system102determines that a case insensitive match for the file name given in the request214(e.g., “NAME.docx”) exists in the “CHILD2” directory118. That is, the “CHILD2” directory118includes a file130with an actual file name of “name.docx”, which is a case insensitive match of “NAME.docx”.

FIG.3is an example diagram300depicting a file system102that is configured to use a “case preferring” designation in order to perform a file system operation. In various examples, a creator or developer of the directory (e.g., a user) can specify the case preferring designation, or the designation can be a default designation for individual directories in a file system based on an initial configuration of the file system.

InFIG.3, the “child1” directory116is assigned a case preferring designation302. To perform a file system operation via a directory that has a case preferring designation, the file system102first determines if a case sensitive match between a file name given in a request for a file system operation and an actual file name associated with a file contained in the directory exists. If a case sensitive match exists, the file system performs the file system operation in association with the file matched in a case sensitive manner. If a case sensitive match does not exist, the file system subsequently determines if a case insensitive match between the file name given in the request for the file system operation and an actual file name associated with a file contained in the directory exists. If the case insensitive match exists, the file system performs the file system operation in association with the file matched in a case insensitive manner. The file system operation can comprise: opening a file, deleting a file, writing to a file, reading from a file, replacing a file, copying a file, moving a file, searching for a file, and so forth.

FIG.3illustrates a request304to open the file “test.exe” in the “child1” directory (e.g., “test.exe” and “child1” may be components of a path name passed to the file system102by an application or an operating system). Given the request304, the file system102checks the “child1” directory116and determines, via the case preferring designation302, that if a case sensitive match does not exist between the given file name in the request304and an actual file name of a file in the “child1” directory116, then it can be determined whether a case insensitive match occurs. In this instance, the request304is completed and the file system operation is performed because the file system102determines that a case sensitive match for the file name given in the request304(e.g., “test.exe”) exists in the “child1” directory116. That is, the “child1” directory116includes a file122with an actual file name of “test.exe”. A conventional file system in this scenario would have opened “TEST.exe” due to the ASCII collation order.

FIG.3illustrates another request306to open the file “Test.exe” in the “child1” directory. Given the request306, the file system102checks the “child1” directory116and determines, via the case preferring designation302, that if a case sensitive match does not exist between the given file name in the request304and an actual file name of a file in the “child1” directory116, then it can be determined whether a case insensitive match occurs. In this instance, the request306is completed and the file system operation is performed because the file system102first determines that a case sensitive match for the file name given in the request306(e.g., “Test.exe”) does not exist in the “child1” directory116. The file system102then determines that a case insensitive match for the file name given in the request306(e.g., “Test.exe”) exists in the “child1” directory116. That is, the “child1” directory116includes a file120with an actual file name of “TEST.exe” and a file122with an actual file name of “test.exe”. In various examples, the file system102selects the “TEST.exe” file due to the ASCII collation order.

While the example ofFIG.3illustrates a case preferring scenario with respect to files, it is understood in the context of this disclosure, that the techniques described herein can perform a case preferring implementation with respect to directories as well. That is, a file system can identify case sensitive and/or case insensitive matches amongst sibling directories that have the same name that varies in case only, and that are part of a same level.

FIG.4is another example diagram400depicting a file system102that is configured to use a “case preferring” designation in order to perform a file system operation. However, inFIG.4, an actual file name that matches a given file name in a case insensitive manner may be tagged by the file system102as a preferred case insensitive match so the actual file is selected over other case insensitive matches.

For example,FIG.4illustrates that a preferred case insensitive match tag402is assigned to the “test.exe” file122in the “child1” directory116. Given a request404to open the file “Test.exe” in the “child1” directory (e.g., same as the request306inFIG.3), the file system102checks the “child1” directory116and determines, via the case preferring designation302, that if a case sensitive match does not exist between the given file name in the request402and an actual file name of a file in the “child1” directory116, then it can be determined whether a case insensitive match occurs. In contrast to the handling of the same request306FIG.3, in this instance, the request404is completed and the file system operation is performed in association with the “test.exe” file122because the file system102first determines that a case sensitive match for the file name given in the request404(e.g., “Test.exe”) does not exist in the “child1” directory116. The file system102then determines that a case insensitive match for the file name given in the request404(e.g., “Test.exe”) exists in the “child1” directory116. That is, the “child1” directory116includes a file120with an actual file name of “TEST.exe” and a file122with an actual file name of “test.exe”. However, in this instance, the “test.exe” file122is selected over the “TEST.exe” file120due to the preferred case insensitive match tag402assigned to the “text.exe” file122.

FIG.5is an example diagram500depicting a file system102that is configured to use a designation that prohibits case varying duplicate file names in order to determine whether a file system operation (e.g., create a file) can be performed. In various examples, a creator or developer (e.g., a user) of the directory can specify the designation, or the designation can be a default designation for individual directories in a file system.

InFIG.5, the “child1” directory116is assigned a child duplicates prohibited designation502. As described above, a “child” refers to an immediate node (e.g., a file or a directory) contained in the directory at a level in a hierarchical structure directly below the directory to which the designation is assigned.FIG.5illustrates a request504to create the file “test.exe” in the “child1” directory. Given the request504, the file system102checks the “child1” directory116and determines that the “child1” directory116already contains a file named “TEST.exe”120and that, via the child duplicates prohibited designation502, creation or addition of a file named “test.exe” in the “child1” directory116is not allowed (as shown by the “X” through the illustrated “test.exe” file122). Note that creation or addition of a file named “test.exe” in the “child1” directory116is not allowed because the “test.exe” file122would be added at a same level as the “TEST.exe” file120, and therefore, two children nodes with a case varying duplicate name in a level directly below a directory with the child duplicates prohibited designation502would exist. Consequently, in this instance, the request504is not completed and the file system operation is not performed.

Due to the child duplicates prohibited designation502which governs the “child1” directory116, another node (e.g., file or directory) named “Child3” or “child3” is similarly not allowed to be created or added because the “child1” directory116already contains the “CHILD3” directory124.

FIG.6is another example diagram600depicting a file system102that is configured to use a designation that prohibits case varying duplicates in order to determine whether a file system operation (e.g., create a file) can be performed. InFIG.6, the “test.exe” file122is assigned a sibling duplicates prohibited designation602. As described above, “siblings” refers to two nodes within the same directory and that are part of the same level in the hierarchical structure.FIG.6illustrates a first request604to create the file “TEST.exe” in the “child1” directory. Given the request604, the file system102checks the contents of the “child1” directory116and determines that the “test.exe” file122that already exists is assigned a sibling duplicates prohibited designation602, and therefore, creation or addition of a file named “TEST.exe” in the “child1” directory116is not allowed (as shown by the “X” through the illustrated “TEST.exe” file120). Consequently, in this instance, the request604is not completed and the file system operation is not performed.

FIG.6also illustrates a second request606to create a directory named “Child3” in the “child1” directory. Given the request606, the file system102checks the contents of the “child1” directory116and determines that the “CHILD3” directory124that already exists is not assigned a sibling duplicates prohibited designation, and therefore, creation or addition of a new directory named “Child3” in the “child1” directory116is allowed. Consequently, in this instance, the request606is completed and the file system operation is performed.

The different designations described above can be assigned separately or can be combined or packaged such that they are assigned with one another to effectively provide an element of security for a file system. While the examples above assign designations to specific directories and/or files, a designation can additionally or alternatively be assigned to a volume and/or to individual file system operations to be performed. For instance, read operations for a directory can be assigned a case insensitive designation, while write operations for the directory can be assigned a case sensitive designation.

FIG.7is an example diagram700depicting a file system102that is configured to use a security descriptor and/or an access control list in order to determine which users and/or groups can assign designations to a directory or a file and/or which users and/or groups can perform a file system operation in accordance with a designation. As described above, a security descriptor can be associated with the file system, with a directory in the file system, or with a file in the file system. The security descriptor can include an access control list (ACL) that defines user accounts and/or group accounts to which a designation is applicable. The ACL can also define user accounts and/or group accounts that have permissions to assign designations and/or attributes to directories and/or files in the file system.

For instance,FIG.7illustrates that the file system102is associated with a security descriptor that includes an ACL702, and that the “CHILD2” directory118has a security descriptor that includes an ACL704. The ACL702can define user accounts and/or group accounts that are permitted to assign attributes and designations to individual directories and/or files in the file system102, as described above with respect toFIGS.2-6. As an example, USER A, who is listed in the ACL702can add an attribute with a case sensitive designation to a directory in the file system102, while USER B who is not listed in the ACL cannot add an attribute with a case sensitive designation to a directory in the file system102.

The ACL704can define user accounts and/or group accounts to which attributes and designations are applied when a request for a file system operation is received, as described above with respect toFIGS.2-6.FIG.7illustrates a request in association with USER A706to open “Name.docx” in the “CHILD2” directory. If the “CHILD2” directory118is assigned an attribute indicating a case sensitive designation and the ACL704includes USER A, then the operation is not performed because the attribute is applicable to file system operations requested in association with an account of USER A and there is no case sensitive match for “Name.docx”, as provided in the request706. In contrast,FIG.7illustrates another request in association with USER B708to open “Name.docx” in the “CHILD2” directory. If the “CHILD2” directory118is assigned the same attribute indicating a case sensitive designation but the ACL704does not include USER B, then the operation is performed because the attribute is not applicable to file system operations requested in association with an account of USER B and there is a case insensitive match for “Name.docx” in the “CHILD2” directory118(e.g., the file130“name.docx”).

FIG.8illustrates a diagram800depicting how a hash used by a cache802to access a file can be altered in accordance with a case sensitive designation or a case insensitive designation in the file system102. The file system102can have a corresponding cache802, which is a subset of memory that retains recently used information for quicker access to commonly used files, for example. Typically, a cache of a file system stores an entry that comprises a hash of a full path name useable to access a file. In contrast, an entry in the cache802illustrated inFIG.8is structured in a hierarchical manner (e.g., a tree structure) such that an individual cache node representing a directory component or a file component in the path name has its own hash, and the hash can be associated with a case sensitive label or a case insensitive label. A case sensitive label or a case insensitive label is determined based on applicable case sensitive designations or case insensitive designations from the file system102.

To illustrate, the tree structure804in the cache802represents the example path name which identifies the “root” directory and includes “child1/CHILD3/run.exe” in order to access the “run.exe” file126in the file system102. Since the root directory114in the file system102is assigned an attribute806with a case insensitive designation, then the hash808of the “child1” cache node is labeled as a case insensitive hash and can be matched in a case insensitive manner. Note the case sensitivity/insensitivity of the “child1” directory116is governed by the attribute806, and thus, the attribute is applicable to the “child1” cache node in the cache.

Moving on, since the “child1” directory116in the file system102is assigned an attribute810with a case sensitive designation, then the hash812of the “CHILD3” cache node is labeled as a case sensitive hash and must be matched in a case insensitive manner. Similarly, since the “CHILD3” directory124in the file system102is assigned an attribute814with a case sensitive designation, then the hash816of the “run.exe” cache node is labeled as a case sensitive hash and must be matched in a case sensitive manner.

FIG.9illustrates a diagram900that is similar toFIG.8, except that the “CHILD3” directory124in the file system102has a case insensitive attribute902. Accordingly, the hash904of the “run.exe” cache node in the cache802is labeled as a case insensitive hash and can be matched in a case insensitive manner.

Consequently, when a hash is used to attempt to access (e.g., look-up) data in the cache, the cache is configured to compare the hash to the individual hashes of the cache nodes in accordance with the labels in order to find a cache hit. Stated another way, a hash look-up (e.g., used to access a file in the cache) is implemented by matching the hash of each cache node in the tree structure in a case sensitive or in a case insensitive manner, rather than matching the hash of the full path name. In some instances, the cache can be a negative cache that includes an entry that indicates a failure or a file that is not present.

Each ofFIGS.10-12is a flow diagram of an example process of the techniques described herein. It should be understood by those of ordinary skill in the art that the operations of the processes disclosed herein are not necessarily presented in any particular order and that performance of some or all of the operations in an alternative order(s) is possible and is contemplated. The operations have been presented in the demonstrated order for ease of description and illustration. Operations may be added, omitted, performed together, and/or performed simultaneously, without departing from the scope of the appended claims. Moreover, the operations can be performed in accordance with the examples provided above, with respect to any one ofFIGS.1-9.

FIG.10is a flow diagram of an example process1000for using a case sensitive designation or a case insensitive designation in order to perform a file system operation.

At1002, an attribute is assigned to a directory in a file system. The attribute indicates a case sensitive designation or a case insensitive designation, as described above with respect toFIG.2. In some examples, the attribute is assigned based on user input. For instance, a developer or creator of the file system may have permissions granted via an ACL to assign the attribute. In alternative examples, the attribute may be a default attribute assigned based on a default configuration of a file system. In various implementations, the attribute can be published so that a developer of an operating system or an application is aware that the directory is associated with the case sensitive designation or the case insensitive designation

At1004, a request to perform a file system operation is received. As described above, the request can include a path name with a component that identifies a directory and a component that identifies a file name. The request can be received from an application or an operating system executing on a host system. For instance, the file system operation can comprise: opening a file, deleting a file, writing to a file, reading from a file, replacing a file, copying a file, moving a file, searching for a file, and so forth. The example process inFIG.10does not apply to creating a new file.

At1006, the attribute assigned to the directory is checked to determine a type of designation (e.g., whether the directory has a case sensitive designation or a case insensitive designation).

If the type of designation is a case sensitive designation, then the process proceeds to1008where it is determined whether a case sensitive match exists between the file name identified by the component in the path name and a file name associated with a file contained in the directory.

If it is determined that a case sensitive match exists within a directory that has a case sensitive designation, then the process proceeds to1010and the file system performs the requested file system operation on the file in the directory that is matched in a case sensitive manner (e.g., the file system operation succeeds).

If it is determined that a case sensitive match does not exist within a directory that has a case sensitive designation, then the process proceeds to1012and the file system determines that the requested file system operation cannot be performed (e.g., the file system operation fails).

If the type of designation determined at1006is a case insensitive designation, then at1014, it is determined whether a case insensitive (or a case sensitive) match exists between the file name identified by the component in the path name and a file name associated with a file contained in the directory.

If it is determined that a case insensitive match (or a case sensitive) exists within a directory that a case insensitive designation, then the process proceeds to1016and the file system performs the requested file system operation on the file in the directory that is matched in a case insensitive (or case sensitive) manner (e.g., the file system operation succeeds).

If it is determined that a case insensitive (or a case sensitive) match does not exist within a directory that has a case insensitive designation, then the process proceeds to1018and the file system determines that the requested file system operation cannot be performed (e.g., the file system operation fails).

In various examples, a file name given as part of a request to query the file system and/or a directory for a pattern can include an empty or variable file name component (e.g., a wild card or place holder such as “*”) and a file type component. Thus, a user can query a directory for all files of type “exe” by submitting “*.exe” or “exe” as the entry to be searched, and in accordance with the techniques described herein, the file system can return files that match the extension in a case sensitive or a case insensitive manner, regardless of actual file names.

FIG.11is a flow diagram of an example process1100for using a case preferring designation in order to perform a file system operation.

At1102, a case preferring designation is assigned to a directory in a file system. In some examples, the case preferring designation is assigned based on user input. For instance, a developer or creator of the file system may have permissions granted via an ACL to assign the case preferring designation. In alternative examples, the case preferring designation may be a default designation.

At1104, a request to perform a file system operation is received. As described above, the request can include a path name with a component that identifies a directory and a component that identifies a file name. The request can be received from an application or an operating system executing on a host system. Again, the file system operation can comprise: opening a file, deleting a file, writing to a file, reading from a file, replacing a file, copying a file, moving a file, searching for a file, and so forth. The example process inFIG.11does not apply to creating a new file.

At1106, it is first determined, based on the case preferring designation, whether a case sensitive match exists between the file name identified by the component in the path name in the request and a file name associated with a file contained in the directory, as described above with respect toFIG.3.

If it is determined that a case sensitive match exists, then the process proceeds to1108and the file system performs the requested file system operation on the file that is matched in a case sensitive manner (e.g., the file system operation succeeds).

However, if it is determined at1106that a case sensitive match does not exist, then the process proceeds to1110where it is subsequently determined if a case insensitive match exists between the file name identified by the component in the path name in the request and a file name associated with a file contained in the directory.

If it is determined that a case insensitive match exists, then the process proceeds to1112and the file system identifies a file and performs the requested file system operation on the identified file that is matched in a case insensitive manner (e.g., the file system operation succeeds). In various examples, the identified file can be designated as a preferred case insensitive match, as described above with respect toFIG.4.

If it is determined that a case insensitive match does not exist, then the process proceeds to1114and the file system determines that the requested file system operation cannot be performed (e.g., the file system operation fails).

FIG.12is a flow diagram of an example process1200for using designation that prohibits case varying duplicates in order to determine whether a file system operation can be performed.

At1202, a designation indicating that case varying duplicate file names (i.e., that vary in case only) are prohibited is associated with a node (e.g., a directory, a file, etc.) in a file system. For example, inFIG.5, a child duplicates prohibited designation is assigned to a directory to prevent any case varying duplicate names from occurring within the directory. InFIG.6, a sibling duplicates prohibited designation is assigned to a file to prevent case varying duplicate names of that file occurring within a directory.

At1204, a request to create a file is received, where a file name of the file is a case varying duplicate of an existing file name in the directory to which the designation is applicable (e.g., “TEST.exe” inFIG.5, “test.exe” inFIG.6).

At1206, the creation of the file is prevented (e.g., the requested file system operation fails) based on the designation of no case varying duplicate names. In some implementations, the file system can provide a notification indicating that the request to create the file has failed and requesting that a revised file name be provided.

FIG.13illustrates an example computing environment capable of executing the techniques and processes described above with respect toFIGS.1-12. In various examples, the computing environment comprises a host system1302. In various examples, the host system1302operates on, in communication with, or as part of a network1304.

The network1304can be or can include various access networks. For example, one or more client devices1306(1) . . .1306(N) can communicate with the host system1302via the network1304and/or other connections. The host system1302and/or client devices can include, but are not limited to, any one of a variety of devices, including portable devices or stationary devices such as a server computer, a smart phone, a mobile phone, a personal digital assistant (PDA), an electronic book device, a laptop computer, a desktop computer, a tablet computer, a portable computer, a gaming console, a personal media player device, or any other electronic device.

According to various implementations, the functionality of the host system1302can be provided by one or more servers that are executing as part of, or in communication with, the network1304. A server can host various services, virtual machines, portals, and/or other resources. For example, a can host or provide access to one or more portals, Web sites, and/or other information.

The host system1302can include processor(s)1208memory1310. The memory1310can comprise an operating system1312, application(s)1314, and/or a file system1316(e.g., file system102along with its cache802). Moreover, the memory1310can comprise the storage unit(s)112described above with respect toFIGS.1-9.

The processor(s)1308can be a single processing unit or a number of units, each of which could include multiple different processing units. The processor(s) can include a microprocessor, a microcomputer, a microcontroller, a digital signal processor, a central processing unit (CPU), a graphics processing unit (GPU), a security processor etc. Alternatively, or in addition, some or all of the techniques described herein can be performed, at least in part, by one or more hardware logic components. For example, and without limitation, illustrative types of hardware logic components that can be used include a Field-Programmable Gate Array (FPGA), an Application-Specific Integrated Circuit (ASIC), an Application-Specific Standard Products (ASSP), a state machine, a Complex Programmable Logic Device (CPLD), other logic circuitry, a system on chip (SoC), and/or any other devices that perform operations based on instructions. Among other capabilities, the processor(s) may be configured to fetch and execute computer-readable instructions stored in the memory1310.

The memory1310can include one or a combination of computer-readable media. As used herein, “computer-readable media” includes computer storage media and communication media.

Computer storage media includes volatile and non-volatile, removable and non-removable media implemented in any method or technology for storage of information, such as computer-readable instructions, data structures, program modules, or other data. Computer storage media includes, but is not limited to, phase change memory (PCM), static random-access memory (SRAM), dynamic random-access memory (DRAM), other types of random access memory (RAM), read-only memory (ROM), electrically erasable programmable ROM (EEPROM), flash memory or other memory technology, compact disk ROM (CD-ROM), digital versatile disks (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium that can be used to store information for access by a computing device.

In contrast, communication media includes computer-readable instructions, data structures, program modules, or other data in a modulated data signal, such as a carrier wave. As defined herein, computer storage media does not include communication media.

The host system1302can communicate over the network1304via network interfaces1318. The network interfaces1318can include various types of network hardware and software for supporting communications between two or more devices.

The disclosure presented herein may be considered in view of the following example clauses.

Example Clause A, a system comprising: one or more processors; and one or more storage units comprising a file system that includes one or more directories each containing one or more files and/or one or more directories, the file system executable by the one or more processors to: receive a request to perform a file system operation, the request including a path name with a first component that identifies a directory and a second component that identifies a file name; determine whether the directory is associated with a case sensitive designation or a case insensitive designation; based on a determination that the directory is associated with the case sensitive designation: determine that a case sensitive match exists between the file name identified by the second component of the path name and a file name associated with a file contained in the directory; and perform the file system operation in association with the file contained in the directory based on a determination that the case sensitive match exists between the file name identified by the second component of the path name and the file name associated with the file contained in the directory; and based on a determination that the directory is associated with the case insensitive designation: determine that a case insensitive match exists between the file name identified by the second component of the path name and a file name associated with a file contained in the directory; and perform the file system operation in association with the file contained in the directory based on a determination that the case insensitive match exists between the file name identified by the second component of the path name and the file name associated with the file contained in the directory.

Example Clause B, the system of Example Clause A, wherein the determining whether the directory is associated with the case sensitive designation or the case insensitive designation comprises checking an attribute assigned to the directory.

Example Clause C, the system of Example Clause B, wherein the file system is further executable by the one or more processors to receive an instruction to assign the attribute to the directory, the instruction generated based on user input.

Example Clause D, the system of Example Clause B or Example Clause C, wherein the file system is further executable by the one or more processors to publish the attribute assigned to the directory so that a developer of an operating system or an application is aware that the directory is associated with the case sensitive designation or the case insensitive designation.

Example Clause E, the system of any one of Example Clauses B through D, wherein the attribute is referred to by an access control list defining user accounts or group accounts to be governed by the case sensitive designation or the case insensitive designation.

Example Clause F, the system of any one of Example Clauses A through E, wherein each of the file name identified by the second component and the file name associated with the file contained in the directory comprises a file type.

Example Clause G, the system of Example Clause A, wherein the case sensitive designation or the case insensitive designation associated with the directory comprises a default designation that is part of an initial configuration of the file system.

Example Clause H, the system of any one of Example Clauses A through G, wherein the file system operation comprises one of: open a file, delete a file, write to a file, read from a file, replace a file, copy a file, move a file, or search for a file as part of a query given a pattern.

Example Clause I, the system of any one of Example Clauses A through H, wherein the file system is further executable by the one or more processors to: create, in a cache associated with the file system, a tree structure of an actual path name for accessing the file contained in the directory, the tree structure including cache nodes corresponding to one or more directory components and a file component of the actual path name; and generate, for an individual cache node, a hash; and associate a label with the hash, the label indicating that the hash is to be matched in a case sensitive manner or in a case insensitive manner.

Example Clause J, the system of Example Clause I, wherein the file system is further executable by the one or more processors to use the hash of the individual cache node in the case insensitive manner or in the case insensitive manner to determine a cache hit in the cache.

While Example Clauses A through J are described above with respect to a system, it is understood in the context of this disclosure that the subject matter of Example Clauses A through J can additionally or alternatively be implemented as a method or via executable instructions stored in memory.

Example Clause K, a system comprising: one or more processors; and one or more storage units comprising a file system that includes one or more directories each containing one or more files and/or one or more directories, the file system executable by the one or more processors to: receive a request to perform a file system operation, the request including a path name with a first component that identifies a directory and a second component that identifies a file name; determine that the directory is associated with a case sensitive designation thereby requiring a case sensitive match to successfully perform the file system operation; determine that the case sensitive match exists between the file name identified by the second component of the path name and a file name associated with a file contained in the directory; and based on a determination that the case sensitive match exists between the file name identified by the second component of the path name and the file name associated with the file contained in the directory, perform the file system operation in association with the file contained in the directory.

While Example Clause K is described above with respect to a system, it is understood in the context of this disclosure that the subject matter of Example Clause K can additionally or alternatively be implemented as a method or via executable instructions stored in memory.

Example Clause L, a system comprising: one or more processors; and one or more storage units comprising a file system that includes one or more directories each containing one or more files and/or one or more directories, the file system executable by the one or more processors to: receive a request to perform a file system operation, the request including a path name with a first component that identifies a directory and a second component that identifies a file name; determine that the directory is associated with a case insensitive designation thereby allowing a case insensitive match to successfully perform the file system operation; determine that the case insensitive match exists between the file name identified by the second component of the path name and a file name associated with a file contained in the directory; and perform the file system operation in association with the file contained in the directory based on a determination that the case insensitive match exists between the file name identified by the second component of the path name and the file name associated with the file contained in the directory.

While Example Clause L is described above with respect to a system, it is understood in the context of this disclosure that the subject matter of Example Clause L can additionally or alternatively be implemented as a method or via executable instructions stored in memory.

Example Clause M, a system comprising: one or more processors; and one or more storage units comprising a file system that includes one or more directories each containing one or more files and/or one or more directories, the file system executable by the one or more processors to: receive a request to perform a file system operation, the request including a path name with a first component that identifies a directory and a second component that identifies a file name; determine that a case sensitive match does not exist in the directory for the file name identified by the second component of the path name; determine that a case insensitive match exists between the file name identified by the second component of the path name and a file name associated with a file contained in the directory; and based on a determination that that the case insensitive match exists between the file name identified by the second component of the path name and the file name associated with the file contained in the directory, perform the file system operation in association with the file contained in the directory.

Example Clause N, the system of Example Clause M, wherein the file name associated with the file contained in the directory is designated as a preferred case insensitive match.

Example Clause O, the system of Example Clause N, wherein the file system is further executable by the one or more processors to receive an instruction to designate the file name associated with the file contained in the directory as the preferred case insensitive match, the instruction generated based on user input.

Example Clause P, the system of Example Clause O, wherein the user input is provided via a user account or a group account listed in an access control list associated with the file contained in the directory, the access control list defining user accounts or group accounts that have permission to designate the file contained in the directory as the preferred case insensitive match.

Example Clause Q, the system of any one of Example Clauses M through P, wherein the file system operation comprises one of: open a file, delete a file, write to a file, read from a file, replace a file, copy a file, move a file, or search for a file as part of a query given a pattern.

While Example Clauses M through Q are described above with respect to a system, it is understood in the context of this disclosure that the subject matter of Example Clauses M through Q can additionally or alternatively be implemented as a method or via executable instructions stored in memory.

Example Clause R, a system comprising: one or more processors; and one or more storage units comprising a file system that includes one or more directories each containing one or more files and/or one or more directories, the file system executable by the one or more processors to: receive a request to perform a file system operation, the request including a path name with a first component that identifies a directory and a second component that identifies a file name; determine whether a case sensitive match exists in the directory for the file name identified by the second component of the path name; and based on a determination that the case sensitive match exists, perform the file system operation in association with a file contained in the directory that is a case sensitive match with the file name identified by the second component of the path name; and based on a determination that the case sensitive match does not exist: determine that a case insensitive match exists between the file name identified by the second component of the path name and a file name associated with a file contained in the directory; and perform the file system operation in association with the file contained in the directory.

While Example Clause R is described above with respect to a system, it is understood in the context of this disclosure that the subject matter of Example Clause R can additionally or alternatively be implemented as a method or via executable instructions stored in memory.

Example Clause S, a system comprising: one or more processors; and one or more storage units comprising a file system that includes one or more directories each containing one or more files and/or one or more directories, the file system executable by the one or more processors to: associate a designation with a directory in the file system, the designation indicating that the directory is prohibited from containing two or more files with case varying duplicate file names; receive a request to create a file with a file name in the directory, the file name being a case varying duplicate file name of an existing file name in the directory; and prevent, based at least in part on the designation, creation of the file in the directory.

Example Clause T, the system of Example Clause S, wherein the file system is further executable by the one or more processors to receive an instruction to associate the designation with the directory, the instruction generated based on user input.

Example Clause U, the system of Example Clause T, wherein the user input is provided via a user account or a group account listed in an access control list associated with the directory, the access control list defining user accounts or group accounts that have permission to designate the directory as a directory that is prohibited from containing the two or more files with the case varying duplicate file names.

Example Clause V, the system of Example Clause S, wherein the designation associated with the directory comprises a default designation.

Example Clause W, the system of Example Clause S, wherein the designation associated with the directory is different from a default configuration in the file system which allows the two or more files to have the case varying duplicate file names.

While Example Clauses S through W are described above with respect to a system, it is understood in the context of this disclosure that the subject matter of Example Clauses S through W can additionally or alternatively be implemented as a method or via executable instructions stored in memory.

Example Clause X, a system comprising: one or more processors; and one or more storage units comprising a file system that includes one or more directories each containing one or more files and/or one or more directories, the file system executable by the one or more processors to: associate a designation with a first file in a directory of the file system, the designation indicating that a first file name of the first file cannot have a case varying duplicate file name within the directory; receive a request to create a second file with a second file name in the directory, the second file name being a case varying duplicate file name of the first file name; and prevent, based at least in part on the designation, creation of the second file in the directory.

While Example Clause X is described above with respect to a system, it is understood in the context of this disclosure that the subject matter of Example Clause X can additionally or alternatively be implemented as a method or via executable instructions stored in memory.

In closing, although the various techniques have been described in language specific to structural features and/or methodological acts, it is to be understood that the subject matter defined in the appended representations is not necessarily limited to the specific features or acts described. Rather, the specific features and acts are disclosed as example forms of implementing the claimed subject matter.