Whamcloud - gitweb
LU-13437 lmv: check stripe FID sanity
[fs/lustre-release.git] / ldiskfs / kernel_patches / patches / sles12sp2 / ext4-large-dir.patch
index 019daca..0ecf09a 100644 (file)
@@ -240,7 +240,7 @@ Index: linux-3.10.0-229.1.2.fc21.x86_64/fs/ext4/namei.c
                        if (err)
                                goto journal_error;
  
-@@ -2203,19 +2240,25 @@ static int ext4_dx_add_entry(handle_t *h
+@@ -2203,19 +2240,27 @@ static int ext4_dx_add_entry(handle_t *h
                                frame->entries = entries = entries2;
                                swap(frame->bh, bh2);
                        }
@@ -255,12 +255,14 @@ Index: linux-3.10.0-229.1.2.fc21.x86_64/fs/ext4/namei.c
                        if (err)
                                goto journal_error;
                        brelse (bh2);
-+                      ext4_handle_dirty_dirent_node(handle, dir,
-+                                                    (frame - 1)->bh);
++                      err = ext4_handle_dirty_dx_node(handle, dir,
++                                                 (frame - 1)->bh);
++                      if (err)
++                              goto journal_error;
 +                      if (restart) {
-+                              ext4_handle_dirty_dirent_node(handle, dir,
-+                                                            frame->bh);
-+                              goto cleanup;
++                              err = ext4_handle_dirty_dx_node(handle, dir,
++                                                         frame->bh);
++                              goto journal_error;
 +                      }
                } else {
                        struct dx_root_info *info;
@@ -272,7 +274,7 @@ Index: linux-3.10.0-229.1.2.fc21.x86_64/fs/ext4/namei.c
                               icount * sizeof(struct dx_entry));
                        dx_set_limit(entries2, dx_node_limit(dir));
  
-@@ -2224,21 +2267,14 @@ static int ext4_dx_add_entry(handle_t *h
+@@ -2224,22 +2267,17 @@ static int ext4_dx_add_entry(handle_t *h
                        dx_set_block(entries + 0, newblock);
                        info = dx_get_dx_info((struct ext4_dir_entry_2*)
                                              frames[0].bh->b_data);
@@ -285,24 +287,31 @@ Index: linux-3.10.0-229.1.2.fc21.x86_64/fs/ext4/namei.c
 -                      frame->bh = bh2;
 -                      err = ext4_journal_get_write_access(handle,
 -                                                           frame->bh);
--                      if (err)
--                              goto journal_error;
--              }
--              err = ext4_handle_dirty_dx_node(handle, dir, frames[0].bh);
--              if (err) {
--                      ext4_std_error(inode->i_sb, err);
 +                      info->indirect_levels += 1;
 +                      dxtrace(printk(KERN_DEBUG
 +                                     "Creating %d level index...\n",
 +                                     info->indirect_levels));
-+                      ext4_handle_dirty_dirent_node(handle, dir, frame->bh);
-+                      ext4_handle_dirty_dirent_node(handle, dir, bh2);
++                      err = ext4_handle_dirty_dx_node(handle, dir, frame->bh);
+                       if (err)
+                               goto journal_error;
+-              }
+-              err = ext4_handle_dirty_dx_node(handle, dir, frames[0].bh);
+-              if (err) {
+-                      ext4_std_error(inode->i_sb, err);
+-                      goto cleanup;
++                      err = ext4_handle_dirty_dx_node(handle, dir, bh2);
 +                      brelse(bh2);
 +                      restart = 1;
-                       goto cleanup;
++                      goto journal_error;
                }
        }
-@@ -2253,6 +2289,10 @@ journal_error:
+       de = do_split(handle, dir, &bh, frame, &fname->hinfo);
+@@ -2249,10 +2285,14 @@ static int ext4_dx_add_entry(handle_t *h
+       goto cleanup;
+ journal_error:
+-      ext4_std_error(dir->i_sb, err);
++      ext4_std_error(dir->i_sb, err); /* this is a no-op if err == 0 */
  cleanup:
        brelse(bh);
        dx_release(frames);
@@ -317,12 +326,17 @@ Index: linux-3.10.0-229.1.2.fc21.x86_64/fs/ext4/inode.c
 ===================================================================
 --- linux-3.10.0-229.1.2.fc21.x86_64.orig/fs/ext4/inode.c
 +++ linux-3.10.0-229.1.2.fc21.x86_64/fs/ext4/inode.c
-@@ -4056,7 +4056,7 @@ struct inode *ext4_iget(struct super_blo
-       if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_64BIT))
+@@ -4056,12 +4056,12 @@ struct inode *ext4_iget(struct super_blo
+       if (ext4_has_feature_64bit(sb))
                ei->i_file_acl |=
                        ((__u64)le16_to_cpu(raw_inode->i_file_acl_high)) << 32;
 -      inode->i_size = ext4_isize(raw_inode);
 +      inode->i_size = ext4_isize(sb, raw_inode);
+       if ((size = i_size_read(inode)) < 0) {
+               EXT4_ERROR_INODE(inode, "bad i_size value: %lld", size);
+               ret = -EFSCORRUPTED;
+               goto bad_inode;
+       }
        ei->i_disksize = inode->i_size;
  #ifdef CONFIG_QUOTA
        ei->i_reserved_quota = 0;