📄 ext3-nanosecond-2.6.18-vanilla.patch
字号:
Index: linux-2.6.18.8/fs/ext3/ialloc.c===================================================================--- linux-2.6.18.8.orig/fs/ext3/ialloc.c 2007-06-20 18:54:59.000000000 +0200+++ linux-2.6.18.8/fs/ext3/ialloc.c 2007-06-20 18:54:59.000000000 +0200@@ -729,7 +729,8 @@ got: /* This is the optimal IO size (for stat), not the fs block size */ inode->i_blksize = PAGE_SIZE; inode->i_blocks = 0;- inode->i_mtime = inode->i_atime = inode->i_ctime = CURRENT_TIME_SEC;+ inode->i_mtime = inode->i_atime = inode->i_ctime = ei->i_crtime =+ ext3_current_time(inode); memset(ei->i_data, 0, sizeof(ei->i_data)); ei->i_dir_start_lookup = 0;@@ -761,9 +762,8 @@ got: spin_unlock(&sbi->s_next_gen_lock); ei->i_state = EXT3_STATE_NEW;- ei->i_extra_isize =- (EXT3_INODE_SIZE(inode->i_sb) > EXT3_GOOD_OLD_INODE_SIZE) ?- sizeof(struct ext3_inode) - EXT3_GOOD_OLD_INODE_SIZE : 0;++ ei->i_extra_isize = EXT3_SB(sb)->s_want_extra_isize; ret = inode; if(DQUOT_ALLOC_INODE(inode)) {Index: linux-2.6.18.8/fs/ext3/inode.c===================================================================--- linux-2.6.18.8.orig/fs/ext3/inode.c 2007-06-20 18:54:52.000000000 +0200+++ linux-2.6.18.8/fs/ext3/inode.c 2007-06-20 18:54:59.000000000 +0200@@ -727,7 +727,7 @@ static int ext3_splice_branch(handle_t * /* We are done with atomic stuff, now do the rest of housekeeping */ - inode->i_ctime = CURRENT_TIME_SEC;+ inode->i_ctime = ext3_current_time(inode); ext3_mark_inode_dirty(handle, inode); /* had we spliced it onto indirect block? */@@ -2375,7 +2375,7 @@ do_indirects: ext3_discard_reservation(inode); mutex_unlock(&ei->truncate_mutex);- inode->i_mtime = inode->i_ctime = CURRENT_TIME_SEC;+ inode->i_mtime = inode->i_ctime = ext3_current_time(inode); ext3_mark_inode_dirty(handle, inode); /*@@ -2611,10 +2611,6 @@ void ext3_read_inode(struct inode * inod } inode->i_nlink = le16_to_cpu(raw_inode->i_links_count); inode->i_size = le32_to_cpu(raw_inode->i_size);- inode->i_atime.tv_sec = le32_to_cpu(raw_inode->i_atime);- inode->i_ctime.tv_sec = le32_to_cpu(raw_inode->i_ctime);- inode->i_mtime.tv_sec = le32_to_cpu(raw_inode->i_mtime);- inode->i_atime.tv_nsec = inode->i_ctime.tv_nsec = inode->i_mtime.tv_nsec = 0; ei->i_state = 0; ei->i_dir_start_lookup = 0;@@ -2689,6 +2685,11 @@ void ext3_read_inode(struct inode * inod } else ei->i_extra_isize = 0; + EXT3_INODE_GET_XTIME(i_ctime, inode, raw_inode);+ EXT3_INODE_GET_XTIME(i_mtime, inode, raw_inode);+ EXT3_INODE_GET_XTIME(i_atime, inode, raw_inode);+ EXT3_EINODE_GET_XTIME(i_crtime, ei, raw_inode);+ if (S_ISREG(inode->i_mode)) { inode->i_op = &ext3_file_inode_operations; inode->i_fop = &ext3_file_operations;@@ -2769,9 +2770,12 @@ static int ext3_do_update_inode(handle_t } raw_inode->i_links_count = cpu_to_le16(inode->i_nlink); raw_inode->i_size = cpu_to_le32(ei->i_disksize);- raw_inode->i_atime = cpu_to_le32(inode->i_atime.tv_sec);- raw_inode->i_ctime = cpu_to_le32(inode->i_ctime.tv_sec);- raw_inode->i_mtime = cpu_to_le32(inode->i_mtime.tv_sec);++ EXT3_INODE_SET_XTIME(i_ctime, inode, raw_inode);+ EXT3_INODE_SET_XTIME(i_mtime, inode, raw_inode);+ EXT3_INODE_SET_XTIME(i_atime, inode, raw_inode);+ EXT3_EINODE_SET_XTIME(i_crtime, ei, raw_inode);+ raw_inode->i_blocks = cpu_to_le32(inode->i_blocks); raw_inode->i_dtime = cpu_to_le32(ei->i_dtime); raw_inode->i_flags = cpu_to_le32(ei->i_flags);Index: linux-2.6.18.8/fs/ext3/ioctl.c===================================================================--- linux-2.6.18.8.orig/fs/ext3/ioctl.c 2007-06-20 18:42:05.000000000 +0200+++ linux-2.6.18.8/fs/ext3/ioctl.c 2007-06-20 18:54:59.000000000 +0200@@ -120,7 +120,7 @@ int ext3_ioctl (struct inode * inode, st ei->i_flags = flags; ext3_set_inode_flags(inode);- inode->i_ctime = CURRENT_TIME_SEC;+ inode->i_ctime = ext3_current_time(inode); err = ext3_mark_iloc_dirty(handle, inode, &iloc); flags_err:@@ -157,7 +157,7 @@ flags_err: return PTR_ERR(handle); err = ext3_reserve_inode_write(handle, inode, &iloc); if (err == 0) {- inode->i_ctime = CURRENT_TIME_SEC;+ inode->i_ctime = ext3_current_time(inode); inode->i_generation = generation; err = ext3_mark_iloc_dirty(handle, inode, &iloc); }Index: linux-2.6.18.8/fs/ext3/namei.c===================================================================--- linux-2.6.18.8.orig/fs/ext3/namei.c 2007-06-20 18:54:53.000000000 +0200+++ linux-2.6.18.8/fs/ext3/namei.c 2007-06-20 18:54:59.000000000 +0200@@ -1287,7 +1287,7 @@ static int add_dirent_to_buf(handle_t *h * happen is that the times are slightly out of date * and/or different from the directory change time. */- dir->i_mtime = dir->i_ctime = CURRENT_TIME_SEC;+ dir->i_mtime = dir->i_ctime = ext3_current_time(dir); ext3_update_dx_flag(dir); dir->i_version++; ext3_mark_inode_dirty(handle, dir);@@ -2079,7 +2079,7 @@ static int ext3_rmdir (struct inode * di inode->i_version++; inode->i_nlink = 0; ext3_orphan_add(handle, inode);- inode->i_ctime = dir->i_ctime = dir->i_mtime = CURRENT_TIME_SEC;+ inode->i_ctime = dir->i_ctime = dir->i_mtime = ext3_current_time(inode); ext3_mark_inode_dirty(handle, inode); ext3_dec_count(handle, dir); ext3_update_dx_flag(dir);@@ -2129,13 +2129,13 @@ static int ext3_unlink(struct inode * di retval = ext3_delete_entry(handle, dir, de, bh); if (retval) goto end_unlink;- dir->i_ctime = dir->i_mtime = CURRENT_TIME_SEC;+ dir->i_ctime = dir->i_mtime = ext3_current_time(dir); ext3_update_dx_flag(dir); ext3_mark_inode_dirty(handle, dir); ext3_dec_count(handle, inode); if (!inode->i_nlink) ext3_orphan_add(handle, inode);- inode->i_ctime = dir->i_ctime;+ inode->i_ctime = ext3_current_time(inode); ext3_mark_inode_dirty(handle, inode); retval = 0; @@ -2237,7 +2237,7 @@ retry: if (IS_DIRSYNC(dir)) handle->h_sync = 1; - inode->i_ctime = CURRENT_TIME_SEC;+ inode->i_ctime = ext3_current_time(inode); ext3_inc_count(handle, inode); atomic_inc(&inode->i_count); @@ -2340,7 +2340,7 @@ static int ext3_rename (struct inode * o * Like most other Unix systems, set the ctime for inodes on a * rename. */- old_inode->i_ctime = CURRENT_TIME_SEC;+ old_inode->i_ctime = ext3_current_time(old_inode); ext3_mark_inode_dirty(handle, old_inode); /*@@ -2373,9 +2373,9 @@ static int ext3_rename (struct inode * o if (new_inode) { ext3_dec_count(handle, new_inode);- new_inode->i_ctime = CURRENT_TIME_SEC;+ new_inode->i_ctime = ext3_current_time(new_inode); }- old_dir->i_ctime = old_dir->i_mtime = CURRENT_TIME_SEC;+ old_dir->i_ctime = old_dir->i_mtime = ext3_current_time(old_dir); ext3_update_dx_flag(old_dir); if (dir_bh) { BUFFER_TRACE(dir_bh, "get_write_access");Index: linux-2.6.18.8/fs/ext3/super.c===================================================================--- linux-2.6.18.8.orig/fs/ext3/super.c 2007-06-20 18:54:59.000000000 +0200+++ linux-2.6.18.8/fs/ext3/super.c 2007-06-20 18:54:59.000000000 +0200@@ -1713,6 +1713,8 @@ static int ext3_fill_super (struct super sbi->s_inode_size); goto failed_mount; }+ if (sbi->s_inode_size > EXT3_GOOD_OLD_INODE_SIZE)+ sb->s_time_gran = 1 << (EXT3_EPOCH_BITS - 2); } sbi->s_frag_size = EXT3_MIN_FRAG_SIZE << le32_to_cpu(es->s_log_frag_size);@@ -1917,6 +1919,32 @@ static int ext3_fill_super (struct super } ext3_setup_super (sb, es, sb->s_flags & MS_RDONLY);++ /* determine the minimum size of new large inodes, if present */+ if (sbi->s_inode_size > EXT3_GOOD_OLD_INODE_SIZE) {+ sbi->s_want_extra_isize = sizeof(struct ext3_inode) -+ EXT3_GOOD_OLD_INODE_SIZE;+ if (EXT3_HAS_RO_COMPAT_FEATURE(sb,+ EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE)) {+ if (sbi->s_want_extra_isize <+ le16_to_cpu(es->s_want_extra_isize))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -