The 2.6.29 is not released yet, but its merge window has long been closed.

Summary: Linux 2.6.29 adds kernel mode-switching, the btrfs file system and squashfs.


1. Prominent features (the cool stuff)

1.1. Kernel Modesetting

When we talk about "mode setting", we mean setting up things like the screen resolution and depth mode, in other words, configuring whatever it's neccesary in the graphics card to get it ready to display things on the screen. This may look easy to implement, but the graphics people say it's harder than it seems to design and implement right (multihead setups, hotplug, etc), which is why it has taken so much time. To start with, mode setting implies allocating memory from the graphics card, which means that before doing modesetting it was necessary to have the GEM memory manager ready and merged in the main tree, which did not happen until the previous release, 2.6.28.

Doing modesetting right is much harder if you consider how the typical Linux graphic setups works today. There are several drivers sharing the same piece of hardware (your graphics card), which is a very bad idea. One of these drivers is the driver. It's a full implementation of all what is needed to make your graphics card work, and when you start up all is fine. But when you switch from to a VT console (using Ctrl+Alt+F1), the driver has to stop handling the graphics card, because the control needs to be passed to another driver: the fb console driver. So the driver saves the current state of the display, the graphics card is reseted and then it is handled to the fb driver, which has to reinitialize completely the card again (that's why there's a noticeable pause in the switch), even if the resolution in X and the console is the same. When you switch back to, the card needs to be reconfigured again. This is a hairy, bug-prone mess, and it's difficult to make it working right in some cases; for example resuming of suspended/hibernated systems is more difficult with this design because sometimes a userspace program is required to reset the hardware to the proper state.

Enter modesetting, and those problems go away. Modesetting centralizes the mode setting code in the kernel drivers. While this may look like it's a lot of code for a kernel, it's actually the contrary: there's a single piece of code in charge of the modesetting, which means that the whole graphic stack gets smaller. And because there's only one implementation, and there's more code sharing, the quality and robustness is increased. Besides, mode setting is a task that really belongs to the kernel drivers (it's how every other operating systems, including some proprietary Unixes, have always done it). But all that is just a small part of the benefits: Suspend and resume are more likely to work because all the work will be done by the kernel driver, with no userspace components involved. doesn't need anymore the root privileges (they were needed before only because the old drivers needed direct hardware access), making possible to [ run as non-root], which is a huge security improvement, and moves back to what it is supposed to do: drawing things, and not messing with hardware. It is also possible to print kernel oopses (or even a Windows-like BSOD) to the screen if the kernel crashes while running under X. And if all this wasn't enough, you also get a FB console that runs on top of modesetting and GEM, making the old FB drivers completely obsolete while preserving their functionality at the same time. And with modesetting it isn't needed to reset the hardware when switching from to a VT, and when switching, if the resolution is the same, there's no need to change anything, making possible to do flicker-free graphical boots and fast user switching.

However, trying modesetting in this release is not easy. In the kernel side, only the Intel driver is getting modesetting support in this release (support for other drivers is being worked on and will be merged in future releases). In the side, it's even more difficult. Because when the kernel modesetting support is enabled, it is /!\ REQUIRED /!\ that the driver also has modesetting support. If you enable kernel modesetting and you don't have a modesetting-enabled driver, will NOT be able to work in any way and it even may crash your machine. There's no way to workaround this, except disabling modesetting. Right now, only the Intel driver seems to have a stable release with modesetting support, alpha support is being worked on for other drivers.

Code: Commit [;a=commit;h=f453ba0460742ad027ae0c4c7d61e62817b3e7ef (commit)], [;a=commit;h=79e539453b34e35f39299a899d263b0a1f1670bd (commit)]

1.2. Btrfs

Btrfs is a new filesystem developed from scratch following the design principles of filesystems like ZFS, WAFL, etc. Most of the work has been done by Chris Mason, an Oracle engineer who worked several years in Reiserfs v3. More information about btrfs can be found in the [ btrfs wiki page]

Btrfs is under HEAVY development, which means that it is NOT stable and it may EAT the data you put in it, so it's strongly recommended not to use it for any other uses than testing, benchmarking and developing. The btrfs team is heading towards a 1.0 release, and the disk format is not expected to change anymore (but it will if a critical bug is found), so it's much more stable than it used to be,

Code: [;a=tree;f=fs/btrfs fs/btrfs]

1.3. Squashfs

Squashfs is a highly compressed read-only filesystem that is well know for being used in the Live-CDs of the most common Linux distributions and embedded distributions for some routers. It uses zlib compression to compress both files, inodes and directories. Inodes in the system are very small and all blocks are packed to minimise data overhead. Block sizes greater than 4K are supported up to a maximum of 1 Mbytes (default block size 128K).

SquashFS 4.0 supports 64 bit filesystems and files (larger than 4GB), full uid/gid information, hard links and timestamps. It is intended for general read-only filesystem use, for archival use (i.e. in cases where a .tar.gz file may be used), and in embedded systems where low overhead is needed. Further information and userspace tools (needed to create the filesystem) are available from

Code: [;a=tree;f=fs/squashfs fs/squashfs]

1.4. "Tree RCU": scalable classic RCU

Recommended LWN article: "[ Hierarchical RCU]"

This feature fixes a long-standing performance bug in classic RCU that results in massive internal-to-RCU lock contention on systems with more than a few hundred CPUs - Classic RCU was designed for machines with 16-32 CPUs. "Tree RCU" applies a hierarchy, greatly reducing the contention on the top-level lock for large machines. Although this feature creates a separate flavor of RCU for ease of review and patch maintenance, it is intended to replace classic RCU.

Code: [;a=commit;h=64db4cfff99c04cd5f550357edcc8780f96b54a2 (commit)]

1.5. WiMAX

2.6.29 includes support for [ WiMAX], a telecommunication technology that provides wireless transmission of data using a variety of transmission modes. It provides up to 75 Mbit/s symmetric broadband speed without the need for cables. The technology is based on the IEEE 802.16 standard (also called Broadband Wireless Access). The stack has been [ provided by Intel], and it includes a driver for the Intel Wireless WiMAX/Wi-Fi Link 5x50 USB/SDIO devices.

Code: WiMAX stack [;a=commit;h=0d695913b0016b362a84a8bb6d6e28f8d90a70e2 (commit 1], [;a=commit;h=ace22f0881e1333d0c55ddf484e5352fe03a806a 2], [;a=commit;h=60fa9ca6cfff2be4132ea93b7dd632801ec0c817 3], [;a=commit;h=ea912f4e7f264981faf8665cfb63d46d7f948117 4], [;a=commit;h=15530dfd330bd19d14e096f88c70355a61fda3f2 5], [;a=commit;h=3e65646bb12be03b14dff53907391095a52d5f49 6], [;a=commit;h=617209ccf73b571953cf4c76519c65a5e52d15fd 7], [;a=commit;h=b0c83ae1de01880075955c7224e751440688ec74 8)]

Driver: [;a=commit;h=3e91029ae049852c153da3fc355ab255ea7e2e0a (commit 1], [;a=commit;h=ea24652d253eabfb83e955e55ce032228d9d99b9 2], [;a=commit;h=024f7f31ed15c471f80408d8b5045497e27e1135 3], [;a=commit;h=ce6cde92803e961d95ddacdf74bd8b067f82f7d4 4], [;a=commit;h=467cc396fb4665957bc7d182c96e45a4d7c575e4 5], [;a=commit;h=aa5a7acabe31ec27a212cbd25cad9f72aa476591 6], [;a=commit;h=3a35a1d0bdf7cc32cddc234b956605e6d4db4673 7], [;a=commit;h=c71228caf91ec6320b489dec5cd0087b64da9fb5 8], [;a=commit;h=11a7d0e3140d2f3e8052a856e8582ce9b021972c 9], [;a=commit;h=f398e4240fce962d0dd74dc11c59fe20860e7a71 10], [;a=commit;h=a8ebf98f541463107bb9544a1b611981dc2477e7 11], [;a=commit;h=795038107b0078ee5ad3ad33327fe1c3520f6bf2 12], [;a=commit;h=514ec71f7289c942f801bdbd309428c470bfc071 13], [;a=commit;h=17d559af963995e483a51ec26697034431bcf2b9 14], [;a=commit;h=a0848826bfaf0815ec9654d78c218a40f755ccd4 15], [;a=commit;h=020bb6f30b636d563d4268116107d592550ddd0c 16], [;a=commit;h=143ee2d5557c0598a97f3089eb29e8226e0e8cee 17)]

1.6. Wireless Access Point mode support

The mac80211 wifi stack is now ready to support AP mode. It requires hostapd for management frame processing and as such, and configuring this mode is only allowed through cfg80211 (not with iwconfig and WEXT).

Code: [;a=commit;h=fbf189273926d83d71c4c321f1215162569506ac (commit)], [;a=commit;h=f9f88fed3433139b58962011c81597b44fd48458 (commit)]

1.7. eCryptfs filename encryption

eCryptfs implements transparent encryption of the contents of a file. In this release, it also can encrypt the file name via a passphrase-derived mount-wide Filename Encryption Key (FNEK) specified as a mount parameter. Each encrypted filename has a fixed prefix indicating that eCryptfs should try to decrypt the filename. When eCryptfs encounters this prefix, it decodes the filename into a tag 70 packet and then decrypts the packet contents using the FNEK, setting the filename to the decrypted filename. Both unencrypted and encrypted filenames can reside in the same lower filesystem. Because filename encryption expands the length of the filename during the encoding stage, eCryptfs will not properly handle filenames that are already near the maximum filename length.

Code: [;a=commit;h=9c79f34f7ee71cd28272332b424ca64b2be006ab (commit 1], [;a=commit;h=a34f60f748c6fe5d791e9b54cffe442201428254 2], [;a=commit;h=51ca58dcc9f0d6b1e78954d08bd4954fb6a1421c 3], [;a=commit;h=addd65ad8d19a7d7982130b16f957d5d01d3f8df 4], [;a=commit;h=87c94c4df0149786ad91d8a03c738a03369ee9c8 5)]

1.8. Filesystem freeze

Linux doesn't have a freeze feature which suspends write requests. So, it's not possible to take a backup which keeps the filesystem's consistency with the storage device's features (snapshot and replication) while it is mounted. Many commercial filesystems (e.g. VxFS) have the freeze feature and it would be used to get the consistent backup. This feature implements the ioctls of the freeze feature.

Code: [;a=commit;h=c4be0c1dc4cdc37b175579be1460f15ac6495e9a (commit)], [;a=commit;h=fcccf502540e3d752d33b2d8e976034dee81f9f7 (commit)]

1.9. Memory controller swap management and other improvements

This feature adds a swap management feature to memory resource controller. Previously, the memory controller couldn't control the swap used by the tasks in a cgroup, allowing a single process to exhaust all of the swap. Now, you can limit mem+swap usage per cgroup. However, it adds some overhead and memory consumption, so it's configurable.

Another features added to the memory controller in this release are hierarchy support, per-cgroup swappiness, improved per-cgroup reclaim stats and better oom handling.

Code: Swap management [;a=commit;h=d13d144309d2e5a3e6ad978b16c1d0226ddc9231 (commit)], [;a=commit;h=c077719be8e9e6b55702117513d1b5f41d80404a (commit)], [;a=commit;h=27a7faa0779dd13729196c1a818c294f44bbd1ee (commit)], [;a=commit;h=8c7c6e34a1256a5082d38c8e9bd1474476912715 (commit)]; hierarchy [;a=commit;h=52bc0d82100cd896213a9a25ec01c1ba87b939db (commit)], [;a=commit;h=6d61ef409d6ba168972f7c2f8c35baaade636a58 (commit)], [;a=commit;h=28dbc4b6a01fb579a9441c7b81e3d3413dc452df (commit)], [;a=commit;h=18f59ea7de08db2449ba99185e8d8cc30e7acac5 (commit)], [;a=commit;h=fee7b548e6f2bd4bfd03a1a45d3afd593de7d5e9 (commit)], swappiness [;a=commit;h=a7885eb8ad465ec9db99ac5b5e6680f0ca8e11c8 (commit)], reclaim stats [;a=commit;h=7f016ee8b6a9a43f768e6252021f169abec4fa1f (commit)], oom-killer [;a=commit;h=a636b327f731143ccc544b966cfd8de6cb6d72c6 (commit)]

1.10. X86 support of 4096 CPUs

Linux core supports such number of CPUs, but there were problems in the X86 architecture-specific code. There's a data structure, cpumask_t, which is used to represent all the CPUs in the system. With 4096 CPUs that structure became too big, causing stack overflows. The code been changed to use pointers for that structure instead of using the stack, making possible to run X86 machines with 4096 CPUs.

Code: [;a=commit;h=36f5101a60de8f79c0d1ca06e50660bf5129e02c (commit)]

1.11. Ext4 no journal mode

Since Ext3 was born, there was people that never wanted to use journaling, for various reasons. In this release, Ext4 adds support for a mode that doesn't use journaling. The result is a small performance increase (see the commit link for benchmark data) compared with Ext4, but it is also a noticeable improvement over Ext2.

Code: [;a=commit;h=0390131ba84fd3f726f9e24fc4553828125700bb (commit)]

1.12. OCFS2 metadata checksums


1.13. Staging drivers

New drivers were added to the staging/ directory (which means they're not just experimental, but also totally unstable and not suited at all for users)

2. Various core changes

h=4779280d1ea4d361af13ae77ba55217fbcd16d4c (commit)]

3. Wi-Fi

4. Network

5. Tracing

6. Filesystems

7. Crypto

8. DM/MD

9. Architecture-specific changes

10. Drivers

10.1. Storage

10.2. Graphics

10.3. Network

10.4. Input

10.5. Sound

10.6. V4L/DVB

10.7. USB

10.8. HWMON

10.9. Watchdog

10.10. RTC

10.11. HID

10.12. MTD

10.13. MFD

10.14. Power

10.15. Serial

10.16. Various

11. Other sources about 2.6.29 kernel

KernelNewbies: Linux_2_6_29 (last edited 2009-03-05 23:48:35 by diegocalleja)