Loading fs/ext4/super.c +30 −0 Original line number Diff line number Diff line Loading @@ -80,6 +80,36 @@ static void ext4_destroy_lazyinit_thread(void); static void ext4_unregister_li_request(struct super_block *sb); static void ext4_clear_request_list(void); /* * Lock ordering * * Note the difference between i_mmap_sem (EXT4_I(inode)->i_mmap_sem) and * i_mmap_rwsem (inode->i_mmap_rwsem)! * * page fault path: * mmap_sem -> sb_start_pagefault -> i_mmap_sem (r) -> transaction start -> * page lock -> i_data_sem (rw) * * buffered write path: * sb_start_write -> i_mutex -> mmap_sem * sb_start_write -> i_mutex -> transaction start -> page lock -> * i_data_sem (rw) * * truncate: * sb_start_write -> i_mutex -> EXT4_STATE_DIOREAD_LOCK (w) -> i_mmap_sem (w) -> * i_mmap_rwsem (w) -> page lock * sb_start_write -> i_mutex -> EXT4_STATE_DIOREAD_LOCK (w) -> i_mmap_sem (w) -> * transaction start -> i_data_sem (rw) * * direct IO: * sb_start_write -> i_mutex -> EXT4_STATE_DIOREAD_LOCK (r) -> mmap_sem * sb_start_write -> i_mutex -> EXT4_STATE_DIOREAD_LOCK (r) -> * transaction start -> i_data_sem (rw) * * writepages: * transaction start -> page lock(s) -> i_data_sem (rw) */ #if !defined(CONFIG_EXT2_FS) && !defined(CONFIG_EXT2_FS_MODULE) && defined(CONFIG_EXT4_USE_FOR_EXT2) static struct file_system_type ext2_fs_type = { .owner = THIS_MODULE, Loading Loading
fs/ext4/super.c +30 −0 Original line number Diff line number Diff line Loading @@ -80,6 +80,36 @@ static void ext4_destroy_lazyinit_thread(void); static void ext4_unregister_li_request(struct super_block *sb); static void ext4_clear_request_list(void); /* * Lock ordering * * Note the difference between i_mmap_sem (EXT4_I(inode)->i_mmap_sem) and * i_mmap_rwsem (inode->i_mmap_rwsem)! * * page fault path: * mmap_sem -> sb_start_pagefault -> i_mmap_sem (r) -> transaction start -> * page lock -> i_data_sem (rw) * * buffered write path: * sb_start_write -> i_mutex -> mmap_sem * sb_start_write -> i_mutex -> transaction start -> page lock -> * i_data_sem (rw) * * truncate: * sb_start_write -> i_mutex -> EXT4_STATE_DIOREAD_LOCK (w) -> i_mmap_sem (w) -> * i_mmap_rwsem (w) -> page lock * sb_start_write -> i_mutex -> EXT4_STATE_DIOREAD_LOCK (w) -> i_mmap_sem (w) -> * transaction start -> i_data_sem (rw) * * direct IO: * sb_start_write -> i_mutex -> EXT4_STATE_DIOREAD_LOCK (r) -> mmap_sem * sb_start_write -> i_mutex -> EXT4_STATE_DIOREAD_LOCK (r) -> * transaction start -> i_data_sem (rw) * * writepages: * transaction start -> page lock(s) -> i_data_sem (rw) */ #if !defined(CONFIG_EXT2_FS) && !defined(CONFIG_EXT2_FS_MODULE) && defined(CONFIG_EXT4_USE_FOR_EXT2) static struct file_system_type ext2_fs_type = { .owner = THIS_MODULE, Loading