POSIX deadlock detection: A walk through linux kernel source

A note to readers: The following content is completely oriented for developers, especially in C. In case you find it difficult to understand certain terms, please help yourselves to google around and understand the concepts. I have tried including links wherever necessary in order to effectively interpret the article(see provided links towards the end). Last but not least, as per POSIX documentation[1], deadlock detection is guaranteed for locks between different processes and not between different threads inside a process or between threads belonging to different processes.

As you can see from the heading of this article, I am aiming at explaining the source code for detecting POSIX deadlocks. Before that let me quickly brief the concept of deadlock in operating systems. A deadlock is a situation where two processes sharing the same resource are preventing each other from accessing the resource which will result in an undefined wait for those resources. Following are the four necessary conditions(Coffman conditions)[2] which leads to a deadlock scenario:

* Mutual exclusion
* Hold and Wait
* No pre-emption
* Circular wait

Read More »

Compiling Linux kernel with Rich ACL support

I don’t know how many of you have heard about Rich ACL or Rich Access Control Lists. Most of you might have heard about NFS protocol i.e, the Network File System protocol. This particular protocol, with its v4.0 and above defines a particular set of ACLS known as NFSv4 ACLs. Rich ACL is a modified or an extended form of NFSv4 ACLs. Let me explain in brief on what do we mean by ACLs.

ACL or Access Control List ?
This is a list of permissions attached to an object. The object can be file, directories and so on. An ACL specifies which users or system processes are granted access to objects, as well as what operations are allowed on given objects.

ACLs and Linux
Linux follows the POSIX 1003.1e draft 17 standard for defining and storing ACLs. Even then in linux, getfacl and setfacl command line utilities do not strictly follow POSIX 1003.2c draft 17, which shows mostly in the way they handle default ACLs. For detailed explanation on how ACLs are defined and how they work in linux, please see http://users.suse.com/~agruen/acl/linux-acls/online/ .

Variations in ACL implementations
The ACL model implemented by the various versions of Windows is more powerful and complex than POSIX ACLs, and differs in several aspects. These differences create interoperability problems on both sides which is a disadvantage for UNIX-like systems. To address this issue, several UNIX-like systems started to support additional ACL models based on version 4 of the the Network File System (NFSv4) protocol specification. Linux is lacking this support so far. Following are some of the differences between various ACLs

Read More »