Message ID | 1314806244-8434-1-git-send-email-tm@tao.ma |
---|---|
State | Not Applicable, archived |
Headers | show |
On Wed 31-08-11 23:57:24, Tao Ma wrote: > From: Tao Ma <boyu.mt@taobao.com> > > For all the callers of dx_probe, frame_in is passed in uninitialized. > So we should set frame->bh to NULL in the beginning of while, not > the end. Otherwise, the first "goto fail2" will try to brelse(frame->bh) > while frame->bh is still invalid. I think this happens at the beginning of dx_probe(). Honza > > Cc: Jan Kara <jack@suse.cz> > Signed-off-by: Tao Ma <boyu.mt@taobao.com> > --- > fs/ext3/namei.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c > index 34b6d9b..45468b9 100644 > --- a/fs/ext3/namei.c > +++ b/fs/ext3/namei.c > @@ -404,6 +404,7 @@ dx_probe(struct qstr *entry, struct inode *dir, > dxtrace (printk("Look up %x", hash)); > while (1) > { > + frame->bh = NULL; > count = dx_get_count(entries); > if (!count || count > dx_get_limit(entries)) { > ext3_warning(dir->i_sb, __func__, > @@ -458,7 +459,6 @@ dx_probe(struct qstr *entry, struct inode *dir, > goto fail2; > } > frame++; > - frame->bh = NULL; > } > fail2: > while (frame >= frame_in) { > -- > 1.7.0.4 >
diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c index 34b6d9b..45468b9 100644 --- a/fs/ext3/namei.c +++ b/fs/ext3/namei.c @@ -404,6 +404,7 @@ dx_probe(struct qstr *entry, struct inode *dir, dxtrace (printk("Look up %x", hash)); while (1) { + frame->bh = NULL; count = dx_get_count(entries); if (!count || count > dx_get_limit(entries)) { ext3_warning(dir->i_sb, __func__, @@ -458,7 +459,6 @@ dx_probe(struct qstr *entry, struct inode *dir, goto fail2; } frame++; - frame->bh = NULL; } fail2: while (frame >= frame_in) {