* [Cluster-devel] [GFS2 PATCH 1/3] Obtaining no_formal_ino from directory entry @ 2007-06-26 1:14 S. Wendy Cheng 2007-06-26 1:18 ` [Cluster-devel] [GFS2 PATCH 2/3] " S. Wendy Cheng 2007-06-27 3:02 ` [Cluster-devel] [GFS2 PATCH 1/3] " Steven Whitehouse 0 siblings, 2 replies; 8+ messages in thread From: S. Wendy Cheng @ 2007-06-26 1:14 UTC (permalink / raw) To: cluster-devel.redhat.com GFS2 lookup code doesn't ask for inode shared glock. This implies during in-memory inode creation for existing file, GFS2 will not disk-read in the inode contents. This leaves no_formal_ino un-initialized during lookup time. The un-initialized no_formal_ino is subsequently encoded into file handle. Clients will get ESTALE error whenever it tries to access these files. -- Wendy -------------- next part -------------- A non-text attachment was scrubbed... Name: 02_gfs2_specsfs.patch Type: text/x-patch Size: 6104 bytes Desc: not available URL: <http://listman.redhat.com/archives/cluster-devel/attachments/20070625/99c4bdb0/attachment.bin> ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Cluster-devel] [GFS2 PATCH 2/3] Obtaining no_formal_ino from directory entry 2007-06-26 1:14 [Cluster-devel] [GFS2 PATCH 1/3] Obtaining no_formal_ino from directory entry S. Wendy Cheng @ 2007-06-26 1:18 ` S. Wendy Cheng 2007-06-27 3:02 ` [Cluster-devel] [GFS2 PATCH 1/3] " Steven Whitehouse 1 sibling, 0 replies; 8+ messages in thread From: S. Wendy Cheng @ 2007-06-26 1:18 UTC (permalink / raw) To: cluster-devel.redhat.com Sorry, correct subject line from [GFS2 PATCH 1/3] to [GFS2 PATCH 2/3] ... > GFS2 lookup code doesn't ask for inode shared glock. This implies > during in-memory inode creation for existing file, GFS2 will not > disk-read in the inode contents. This leaves no_formal_ino > un-initialized during lookup time. The un-initialized no_formal_ino is > subsequently encoded into file handle. Clients will get ESTALE error > whenever it tries to access these files. > > -- Wendy > >------------------------------------------------------------------------ > > Signed-off-by: S. Wendy Cheng <wcheng@redhat.com> > > dir.c | 6 ++++-- > inode.c | 13 ++++++++----- > inode.h | 3 ++- > ops_export.c | 2 +- > ops_fstype.c | 19 ++++++++++++------- > rgrp.c | 10 +++++----- > 6 files changed, 32 insertions(+), 21 deletions(-) > >--- gfs2-nfs1/fs/gfs2/inode.h 2007-06-22 22:11:42.000000000 -0400 >+++ gfs2-nfs2/fs/gfs2/inode.h 2007-06-23 01:24:22.000000000 -0400 >@@ -47,7 +47,8 @@ static inline void gfs2_inum_out(const s > > > void gfs2_inode_attr_in(struct gfs2_inode *ip); >-struct inode *gfs2_inode_lookup(struct super_block *sb, u64 no_addr, unsigned type); >+struct inode *gfs2_inode_lookup(struct super_block *sb, >+ struct gfs2_inum_host *ino, unsigned type); > struct inode *gfs2_ilookup(struct super_block *sb, u64 no_addr); > > int gfs2_inode_refresh(struct gfs2_inode *ip); >--- gfs2-nfs1/fs/gfs2/dir.c 2007-06-22 22:11:42.000000000 -0400 >+++ gfs2-nfs2/fs/gfs2/dir.c 2007-06-23 01:24:22.000000000 -0400 >@@ -1493,13 +1493,15 @@ struct inode *gfs2_dir_search(struct ino > struct buffer_head *bh; > struct gfs2_dirent *dent; > struct inode *inode; >+ struct gfs2_inum_host ino; > > dent = gfs2_dirent_search(dir, name, gfs2_dirent_find, &bh); > if (dent) { > if (IS_ERR(dent)) > return ERR_PTR(PTR_ERR(dent)); >- inode = gfs2_inode_lookup(dir->i_sb, >- be64_to_cpu(dent->de_inum.no_addr), >+ ino.no_formal_ino = be64_to_cpu(dent->de_inum.no_formal_ino); >+ ino.no_addr = be64_to_cpu(dent->de_inum.no_addr); >+ inode = gfs2_inode_lookup(dir->i_sb, &ino, > be16_to_cpu(dent->de_type)); > brelse(bh); > return inode; >--- gfs2-nfs1/fs/gfs2/inode.c 2007-06-22 22:11:42.000000000 -0400 >+++ gfs2-nfs2/fs/gfs2/inode.c 2007-06-23 01:24:22.000000000 -0400 >@@ -86,9 +86,11 @@ static struct inode *gfs2_iget(struct su > * Returns: A VFS inode, or an error > */ > >-struct inode *gfs2_inode_lookup(struct super_block *sb, u64 no_addr, unsigned int type) >+struct inode *gfs2_inode_lookup(struct super_block *sb, >+ struct gfs2_inum_host *ino, >+ unsigned int type) > { >- struct inode *inode = gfs2_iget(sb, no_addr); >+ struct inode *inode = gfs2_iget(sb, ino->no_addr); > struct gfs2_inode *ip = GFS2_I(inode); > struct gfs2_glock *io_gl; > int error; >@@ -100,13 +102,14 @@ struct inode *gfs2_inode_lookup(struct s > struct gfs2_sbd *sdp = GFS2_SB(inode); > umode_t mode; > inode->i_private = ip; >+ ip->i_no_formal_ino = ino->no_formal_ino; > >- error = gfs2_glock_get(sdp, no_addr, &gfs2_inode_glops, CREATE, &ip->i_gl); >+ error = gfs2_glock_get(sdp, ino->no_addr, &gfs2_inode_glops, CREATE, &ip->i_gl); > if (unlikely(error)) > goto fail; > ip->i_gl->gl_object = ip; > >- error = gfs2_glock_get(sdp, no_addr, &gfs2_iopen_glops, CREATE, &io_gl); >+ error = gfs2_glock_get(sdp, ino->no_addr, &gfs2_iopen_glops, CREATE, &io_gl); > if (unlikely(error)) > goto fail_put; > >@@ -915,7 +918,7 @@ struct inode *gfs2_createi(struct gfs2_h > if (error) > goto fail_gunlock2; > >- inode = gfs2_inode_lookup(dir->i_sb, inum.no_addr, IF2DT(mode)); >+ inode = gfs2_inode_lookup(dir->i_sb, &inum, IF2DT(mode)); > if (IS_ERR(inode)) > goto fail_gunlock2; > >--- gfs2-nfs1/fs/gfs2/ops_export.c 2007-06-22 22:11:42.000000000 -0400 >+++ gfs2-nfs2/fs/gfs2/ops_export.c 2007-06-23 23:43:45.000000000 -0400 >@@ -245,7 +245,7 @@ static struct dentry *gfs2_get_dentry(st > gfs2_glock_dq_uninit(&rgd_gh); > gfs2_glock_dq_uninit(&ri_gh); > >- inode = gfs2_inode_lookup(sb, inum->no_addr, fh_obj->imode); >+ inode = gfs2_inode_lookup(sb, inum, fh_obj->imode); > if (!inode) > goto fail; > if (IS_ERR(inode)) { >--- gfs2-nfs1/fs/gfs2/ops_fstype.c 2007-06-22 22:11:42.000000000 -0400 >+++ gfs2-nfs2/fs/gfs2/ops_fstype.c 2007-06-23 23:42:38.000000000 -0400 >@@ -234,16 +234,16 @@ fail: > } > > static inline struct inode *gfs2_lookup_root(struct super_block *sb, >- u64 no_addr) >+ struct gfs2_inum_host *ino) > { >- return gfs2_inode_lookup(sb, no_addr, DT_DIR); >+ return gfs2_inode_lookup(sb, ino, DT_DIR); > } > > static int init_sb(struct gfs2_sbd *sdp, int silent, int undo) > { > struct super_block *sb = sdp->sd_vfs; > struct gfs2_holder sb_gh; >- u64 no_addr; >+ struct gfs2_inum_host ino; > struct inode *inode; > int error = 0; > >@@ -286,10 +286,12 @@ static int init_sb(struct gfs2_sbd *sdp, > sb_set_blocksize(sb, sdp->sd_sb.sb_bsize); > > /* Get the root inode */ >- no_addr = sdp->sd_sb.sb_root_dir.no_addr; >+ ino.no_formal_ino = 0; > if (sb->s_type == &gfs2meta_fs_type) >- no_addr = sdp->sd_sb.sb_master_dir.no_addr; >- inode = gfs2_lookup_root(sb, no_addr); >+ ino.no_addr = sdp->sd_sb.sb_master_dir.no_addr; >+ else >+ ino.no_addr = sdp->sd_sb.sb_root_dir.no_addr; >+ inode = gfs2_lookup_root(sb, &ino); > if (IS_ERR(inode)) { > error = PTR_ERR(inode); > fs_err(sdp, "can't read in root inode: %d\n", error); >@@ -442,11 +444,14 @@ static int init_inodes(struct gfs2_sbd * > int error = 0; > struct gfs2_inode *ip; > struct inode *inode; >+ struct gfs2_inum_host ino; > > if (undo) > goto fail_qinode; > >- inode = gfs2_lookup_root(sdp->sd_vfs, sdp->sd_sb.sb_master_dir.no_addr); >+ ino.no_formal_ino = 0; >+ ino.no_addr = sdp->sd_sb.sb_master_dir.no_addr; >+ inode = gfs2_lookup_root(sdp->sd_vfs, &ino); > if (IS_ERR(inode)) { > error = PTR_ERR(inode); > fs_err(sdp, "can't read in master directory: %d\n", error); >--- gfs2-nfs1/fs/gfs2/rgrp.c 2007-06-22 22:11:42.000000000 -0400 >+++ gfs2-nfs2/fs/gfs2/rgrp.c 2007-06-23 01:24:22.000000000 -0400 >@@ -861,18 +861,18 @@ static struct inode *try_rgrp_unlink(str > { > struct inode *inode; > u32 goal = 0; >- u64 ino; >+ struct gfs2_inum_host ino = {.no_formal_ino = 0}; > > for(;;) { > goal = rgblk_search(rgd, goal, GFS2_BLKST_UNLINKED, > GFS2_BLKST_UNLINKED); > if (goal == 0) > return 0; >- ino = goal + rgd->rd_data0; >- if (ino <= *last_unlinked) >+ ino.no_addr = goal + rgd->rd_data0; >+ if (ino.no_addr <= *last_unlinked) > continue; >- *last_unlinked = ino; >- inode = gfs2_inode_lookup(rgd->rd_sbd->sd_vfs, ino, DT_UNKNOWN); >+ *last_unlinked = ino.no_addr; >+ inode = gfs2_inode_lookup(rgd->rd_sbd->sd_vfs, &ino, DT_UNKNOWN); > if (!IS_ERR(inode)) > return inode; > } > > > ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Cluster-devel] [GFS2 PATCH 1/3] Obtaining no_formal_ino from directory entry 2007-06-26 1:14 [Cluster-devel] [GFS2 PATCH 1/3] Obtaining no_formal_ino from directory entry S. Wendy Cheng 2007-06-26 1:18 ` [Cluster-devel] [GFS2 PATCH 2/3] " S. Wendy Cheng @ 2007-06-27 3:02 ` Steven Whitehouse 2007-06-27 5:15 ` [Cluster-devel] [GFS2 PATCH 2/3] " S. Wendy Cheng 1 sibling, 1 reply; 8+ messages in thread From: Steven Whitehouse @ 2007-06-27 3:02 UTC (permalink / raw) To: cluster-devel.redhat.com Hi, On Mon, 2007-06-25 at 21:14 -0400, S. Wendy Cheng wrote: > GFS2 lookup code doesn't ask for inode shared glock. This implies during > in-memory inode creation for existing file, GFS2 will not disk-read in > the inode contents. This leaves no_formal_ino un-initialized during > lookup time. The un-initialized no_formal_ino is subsequently encoded > into file handle. Clients will get ESTALE error whenever it tries to > access these files. > > -- Wendy > Generally this looks good. Please don't add back the _host structure though - just add an extra no_formal_ino argument to the lookup function which is a u64, Steve. ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Cluster-devel] [GFS2 PATCH 2/3] Obtaining no_formal_ino from directory entry 2007-06-27 3:02 ` [Cluster-devel] [GFS2 PATCH 1/3] " Steven Whitehouse @ 2007-06-27 5:15 ` S. Wendy Cheng 2007-06-27 5:25 ` S. Wendy Cheng 2007-06-27 13:13 ` Steven Whitehouse 0 siblings, 2 replies; 8+ messages in thread From: S. Wendy Cheng @ 2007-06-27 5:15 UTC (permalink / raw) To: cluster-devel.redhat.com Steven Whitehouse wrote: >Hi, > >On Mon, 2007-06-25 at 21:14 -0400, S. Wendy Cheng wrote: > > >>GFS2 lookup code doesn't ask for inode shared glock. This implies during >>in-memory inode creation for existing file, GFS2 will not disk-read in >>the inode contents. This leaves no_formal_ino un-initialized during >>lookup time. The un-initialized no_formal_ino is subsequently encoded >>into file handle. Clients will get ESTALE error whenever it tries to >>access these files. >> >>-- Wendy >> >> >> > >Generally this looks good. Please don't add back the _host structure >though - just add an extra no_formal_ino argument to the lookup function >which is a u64, > > The gfs2_inode_lookup() parameter set would be too long. How about this ... we will never use DT_WHT (bit 14) anyway so let's define: struct inode *gfs2_inode_lookup(struct super_block *sb, unsigned type, // if invoked from gfs2_get_dentry by NFSD // type would be DT_WHT. u64 no_addr, u64 no_formal_ino); Then we would save one parameter in patch #3 that will use DT_WHT as nfsbypass param ? Patch enclosed. -- Wendy -------------- next part -------------- A non-text attachment was scrubbed... Name: 02_gfs2_specsfs.patch Type: text/x-patch Size: 4356 bytes Desc: not available URL: <http://listman.redhat.com/archives/cluster-devel/attachments/20070627/ec89c0f3/attachment.bin> ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Cluster-devel] [GFS2 PATCH 2/3] Obtaining no_formal_ino from directory entry 2007-06-27 5:15 ` [Cluster-devel] [GFS2 PATCH 2/3] " S. Wendy Cheng @ 2007-06-27 5:25 ` S. Wendy Cheng 2007-06-27 13:13 ` Steven Whitehouse 1 sibling, 0 replies; 8+ messages in thread From: S. Wendy Cheng @ 2007-06-27 5:25 UTC (permalink / raw) To: cluster-devel.redhat.com Grr... there is a typo ... If we all agree with DT_WHT type, will re-submit the patch early tomorrow morning.. maybe we should hop on #sistina irc around 9:30 am EST to speed up the discussion ? Need to get this done and tested out (on RHEL 5.1) by noon tomorrow.. Kicked off the new kernel build now. G'night ! -- Wendy > Steven Whitehouse wrote: > >> Hi, >> >> On Mon, 2007-06-25 at 21:14 -0400, S. Wendy Cheng wrote: >> >> >>> GFS2 lookup code doesn't ask for inode shared glock. This implies >>> during in-memory inode creation for existing file, GFS2 will not >>> disk-read in the inode contents. This leaves no_formal_ino >>> un-initialized during lookup time. The un-initialized no_formal_ino >>> is subsequently encoded into file handle. Clients will get ESTALE >>> error whenever it tries to access these files. >>> >>> -- Wendy >>> >>> >> >> >> Generally this looks good. Please don't add back the _host structure >> though - just add an extra no_formal_ino argument to the lookup function >> which is a u64, >> >> > > The gfs2_inode_lookup() parameter set would be too long. How about > this ... we will never use DT_WHT (bit 14) anyway so let's define: > > struct inode *gfs2_inode_lookup(struct super_block *sb, > unsigned type, // if invoked from > gfs2_get_dentry by NFSD > // type would > be DT_WHT. > u64 no_addr, > u64 no_formal_ino); > > Then we would save one parameter in patch #3 that will use DT_WHT as > nfsbypass param ? Patch enclosed. > > -- Wendy > > > >------------------------------------------------------------------------ > > Signed-off-by: S. Wendy Cheng <wcheng@redhat.com> > > dir.c | 7 ++++--- > inode.c | 12 +++++++++--- > inode.h | 3 ++- > ops_export.c | 4 +++- > ops_fstype.c | 2 +- > rgrp.c | 11 ++++++----- > 6 files changed, 25 insertions(+), 14 deletions(-) > >--- gfs2-nfs1/fs/gfs2/inode.h 2007-06-22 22:11:42.000000000 -0400 >+++ gfs2-nfs2/fs/gfs2/inode.h 2007-06-27 00:17:41.000000000 -0400 >@@ -47,7 +47,8 @@ static inline void gfs2_inum_out(const s > > > void gfs2_inode_attr_in(struct gfs2_inode *ip); >-struct inode *gfs2_inode_lookup(struct super_block *sb, u64 no_addr, unsigned type); >+struct inode *gfs2_inode_lookup(struct super_block *sb, unsigned type, >+ u64 no_addr, u64 no_formal_ino); > struct inode *gfs2_ilookup(struct super_block *sb, u64 no_addr); > > int gfs2_inode_refresh(struct gfs2_inode *ip); >--- gfs2-nfs1/fs/gfs2/inode.c 2007-06-22 22:11:42.000000000 -0400 >+++ gfs2-nfs2/fs/gfs2/inode.c 2007-06-27 00:23:05.000000000 -0400 >@@ -86,9 +86,12 @@ static struct inode *gfs2_iget(struct su > * Returns: A VFS inode, or an error > */ > >-struct inode *gfs2_inode_lookup(struct super_block *sb, u64 no_addr, unsigned int type) >+struct inode *gfs2_inode_lookup(struct super_block *sb, >+ unsigned int type, >+ u64 no_addr, >+ u64 no_formal_ino) > { >- struct inode *inode = gfs2_iget(sb, no_addr); >+ struct inode *inode = gfs2_iget(sb, ino->no_addr); > struct gfs2_inode *ip = GFS2_I(inode); > struct gfs2_glock *io_gl; > int error; >@@ -100,6 +103,7 @@ struct inode *gfs2_inode_lookup(struct s > struct gfs2_sbd *sdp = GFS2_SB(inode); > umode_t mode; > inode->i_private = ip; >+ ip->i_no_formal_ino = no_formal_ino; > > error = gfs2_glock_get(sdp, no_addr, &gfs2_inode_glops, CREATE, &ip->i_gl); > if (unlikely(error)) >@@ -915,7 +919,9 @@ struct inode *gfs2_createi(struct gfs2_h > if (error) > goto fail_gunlock2; > >- inode = gfs2_inode_lookup(dir->i_sb, inum.no_addr, IF2DT(mode)); >+ inode = gfs2_inode_lookup(dir->i_sb, IF2DT(mode), >+ inum.no_addr, >+ inum.no_formal_ino); > if (IS_ERR(inode)) > goto fail_gunlock2; > >--- gfs2-nfs1/fs/gfs2/dir.c 2007-06-22 22:11:42.000000000 -0400 >+++ gfs2-nfs2/fs/gfs2/dir.c 2007-06-27 00:19:22.000000000 -0400 >@@ -1498,9 +1498,10 @@ struct inode *gfs2_dir_search(struct ino > if (dent) { > if (IS_ERR(dent)) > return ERR_PTR(PTR_ERR(dent)); >- inode = gfs2_inode_lookup(dir->i_sb, >- be64_to_cpu(dent->de_inum.no_addr), >- be16_to_cpu(dent->de_type)); >+ inode = gfs2_inode_lookup(dir->i_sb, >+ be16_to_cpu(dent->de_type), >+ be64_to_cpu(dent->de_inum.no_addr), >+ be64_to_cpu(dent->de_inum.no_formal_ino); > brelse(bh); > return inode; > } >--- gfs2-nfs1/fs/gfs2/ops_export.c 2007-06-22 22:11:42.000000000 -0400 >+++ gfs2-nfs2/fs/gfs2/ops_export.c 2007-06-27 00:24:38.000000000 -0400 >@@ -245,7 +245,9 @@ static struct dentry *gfs2_get_dentry(st > gfs2_glock_dq_uninit(&rgd_gh); > gfs2_glock_dq_uninit(&ri_gh); > >- inode = gfs2_inode_lookup(sb, inum->no_addr, fh_obj->imode); >+ inode = gfs2_inode_lookup(sb, fh_obj->imode, >+ inum->no_addr, >+ inum->no_formal_ino); > if (!inode) > goto fail; > if (IS_ERR(inode)) { >--- gfs2-nfs1/fs/gfs2/ops_fstype.c 2007-06-22 22:11:42.000000000 -0400 >+++ gfs2-nfs2/fs/gfs2/ops_fstype.c 2007-06-27 00:30:22.000000000 -0400 >@@ -236,7 +236,7 @@ fail: > static inline struct inode *gfs2_lookup_root(struct super_block *sb, > u64 no_addr) > { >- return gfs2_inode_lookup(sb, no_addr, DT_DIR); >+ return gfs2_inode_lookup(sb, DT_DIR, no_addr, 0); > } > > static int init_sb(struct gfs2_sbd *sdp, int silent, int undo) >--- gfs2-nfs1/fs/gfs2/rgrp.c 2007-06-22 22:11:42.000000000 -0400 >+++ gfs2-nfs2/fs/gfs2/rgrp.c 2007-06-27 00:31:44.000000000 -0400 >@@ -861,18 +861,19 @@ static struct inode *try_rgrp_unlink(str > { > struct inode *inode; > u32 goal = 0; >- u64 ino; >+ u64 no_addr; > > for(;;) { > goal = rgblk_search(rgd, goal, GFS2_BLKST_UNLINKED, > GFS2_BLKST_UNLINKED); > if (goal == 0) > return 0; >- ino = goal + rgd->rd_data0; >- if (ino <= *last_unlinked) >+ no_addr = goal + rgd->rd_data0; >+ if (no_addr <= *last_unlinked) > continue; >- *last_unlinked = ino; >- inode = gfs2_inode_lookup(rgd->rd_sbd->sd_vfs, ino, DT_UNKNOWN); >+ *last_unlinked = ino.no_addr; >+ inode = gfs2_inode_lookup(rgd->rd_sbd->sd_vfs, DT_UNKNOWN, >+ no_addr, 0); > if (!IS_ERR(inode)) > return inode; > } > > ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Cluster-devel] [GFS2 PATCH 2/3] Obtaining no_formal_ino from directory entry 2007-06-27 5:15 ` [Cluster-devel] [GFS2 PATCH 2/3] " S. Wendy Cheng 2007-06-27 5:25 ` S. Wendy Cheng @ 2007-06-27 13:13 ` Steven Whitehouse 2007-06-27 21:07 ` Wendy Cheng 1 sibling, 1 reply; 8+ messages in thread From: Steven Whitehouse @ 2007-06-27 13:13 UTC (permalink / raw) To: cluster-devel.redhat.com Hi, On Wed, 2007-06-27 at 01:15 -0400, S. Wendy Cheng wrote: > Steven Whitehouse wrote: > > >Hi, > > > >On Mon, 2007-06-25 at 21:14 -0400, S. Wendy Cheng wrote: > > > > > >>GFS2 lookup code doesn't ask for inode shared glock. This implies during > >>in-memory inode creation for existing file, GFS2 will not disk-read in > >>the inode contents. This leaves no_formal_ino un-initialized during > >>lookup time. The un-initialized no_formal_ino is subsequently encoded > >>into file handle. Clients will get ESTALE error whenever it tries to > >>access these files. > >> > >>-- Wendy > >> > >> > >> > > > >Generally this looks good. Please don't add back the _host structure > >though - just add an extra no_formal_ino argument to the lookup function > >which is a u64, > > > > > > The gfs2_inode_lookup() parameter set would be too long. How about this > ... we will never use DT_WHT (bit 14) anyway so let's define: > > struct inode *gfs2_inode_lookup(struct super_block *sb, > unsigned type, // if invoked from > gfs2_get_dentry by NFSD > // type would > be DT_WHT. > u64 no_addr, > u64 no_formal_ino); > > Then we would save one parameter in patch #3 that will use DT_WHT as > nfsbypass param ? Patch enclosed. > Ugh! I'd rather not misuse the DT_ types. We can just use DT_UNKNOWN I think as we can tell the difference between NFS and unlinked recovery simply by looking to see if no_formal_ino is non-zero or not (since zero can never be a valid no_formal_ino). Do you think thats ok? Steve. > -- Wendy > > > ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Cluster-devel] [GFS2 PATCH 2/3] Obtaining no_formal_ino from directory entry 2007-06-27 13:13 ` Steven Whitehouse @ 2007-06-27 21:07 ` Wendy Cheng 2007-06-27 22:49 ` Steven Whitehouse 0 siblings, 1 reply; 8+ messages in thread From: Wendy Cheng @ 2007-06-27 21:07 UTC (permalink / raw) To: cluster-devel.redhat.com Revised patch .... Wendy -------------- next part -------------- A non-text attachment was scrubbed... Name: 02_gfs2_specsfs.patch Type: text/x-patch Size: 4257 bytes Desc: not available URL: <http://listman.redhat.com/archives/cluster-devel/attachments/20070627/17107adc/attachment.bin> ^ permalink raw reply [flat|nested] 8+ messages in thread
* [Cluster-devel] [GFS2 PATCH 2/3] Obtaining no_formal_ino from directory entry 2007-06-27 21:07 ` Wendy Cheng @ 2007-06-27 22:49 ` Steven Whitehouse 0 siblings, 0 replies; 8+ messages in thread From: Steven Whitehouse @ 2007-06-27 22:49 UTC (permalink / raw) To: cluster-devel.redhat.com Hi, On Wed, 2007-06-27 at 17:07 -0400, Wendy Cheng wrote: > Revised patch .... Wendy > > > Both patches applied. Please check your patches to ensure you don't add trailing whitespace in future. Thanks, Steve. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2007-06-27 22:49 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-06-26 1:14 [Cluster-devel] [GFS2 PATCH 1/3] Obtaining no_formal_ino from directory entry S. Wendy Cheng 2007-06-26 1:18 ` [Cluster-devel] [GFS2 PATCH 2/3] " S. Wendy Cheng 2007-06-27 3:02 ` [Cluster-devel] [GFS2 PATCH 1/3] " Steven Whitehouse 2007-06-27 5:15 ` [Cluster-devel] [GFS2 PATCH 2/3] " S. Wendy Cheng 2007-06-27 5:25 ` S. Wendy Cheng 2007-06-27 13:13 ` Steven Whitehouse 2007-06-27 21:07 ` Wendy Cheng 2007-06-27 22:49 ` Steven Whitehouse
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.