From 73b011e7bc07c57b140f3851a452b33d209dfddc Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Tue, 8 Oct 2002 23:10:09 +0000 Subject: 2002-10-08 Roland McGrath * ext2fs.h (struct disknode): New member `info_i_translator'. * inode.c (diskfs_set_translator): Update NP->dn->info_i_translator. * ialloc.c (diskfs_alloc_node): Clear a nonzero translator block in the on-disk inode just as we do for data blocks. --- ext2fs/ext2fs.h | 3 ++- ext2fs/ialloc.c | 5 +++++ ext2fs/inode.c | 3 +++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/ext2fs/ext2fs.h b/ext2fs/ext2fs.h index 8e73ae0a..cae9d47f 100644 --- a/ext2fs/ext2fs.h +++ b/ext2fs/ext2fs.h @@ -1,6 +1,6 @@ /* Common definitions for the ext2 filesystem translator - Copyright (C) 1995, 1996, 1999 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 1999, 2002 Free Software Foundation, Inc. Written by Miles Bader @@ -160,6 +160,7 @@ struct disknode /* Random extra info used by the ext2 routines. */ struct ext2_inode_info info; + uint32_t info_i_translator; /* That struct from Linux source lacks this. */ /* This file's pager. */ struct pager *pager; diff --git a/ext2fs/ialloc.c b/ext2fs/ialloc.c index 27a227fe..22d911b5 100644 --- a/ext2fs/ialloc.c +++ b/ext2fs/ialloc.c @@ -301,6 +301,11 @@ diskfs_alloc_node (struct node *dir, mode_t mode, struct node **node) np->dn->info.i_data[block] = 0; np->dn_set_ctime = 1; } + if (np->dn->info_i_translator != 0) + { + np->dn->info_i_translator = 0; + np->dn_set_ctime = 1; + } st->st_mode &= ~S_IPTRANS; if (np->allocsize) { diff --git a/ext2fs/inode.c b/ext2fs/inode.c index 98279e85..b6185855 100644 --- a/ext2fs/inode.c +++ b/ext2fs/inode.c @@ -295,6 +295,7 @@ read_node (struct node *np) EXT2_N_BLOCKS * sizeof info->i_data[0]); st->st_rdev = 0; } + dn->info_i_translator = di->i_translator; diskfs_end_catch_exception (); @@ -666,6 +667,7 @@ diskfs_set_translator (struct node *np, const char *name, unsigned namelen, } di->i_translator = blkno; + np->dn->info_i_translator = blkno; record_global_poke (di); np->dn_stat.st_blocks += 1 << log2_stat_blocks_per_fs_block; @@ -675,6 +677,7 @@ diskfs_set_translator (struct node *np, const char *name, unsigned namelen, { /* Clear block for translator going away. */ di->i_translator = 0; + np->dn->info_i_translator = 0; record_global_poke (di); ext2_free_blocks (blkno, 1); -- cgit v1.2.3