diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-17 00:46:01 +0100 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-12-17 00:46:01 +0100 |
commit | 31f48fc8f226f968d6e6b9b9718abe8e16c51fe8 (patch) | |
tree | b2f990f32448b097ec418d37c173483ebab18f54 | |
parent | Merge branch 'for-3.19' of git://linux-nfs.org/~bfields/linux (diff) | |
parent | isofs: Fix infinite looping over CE entries (diff) | |
download | linux-31f48fc8f226f968d6e6b9b9718abe8e16c51fe8.tar.xz linux-31f48fc8f226f968d6e6b9b9718abe8e16c51fe8.zip |
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs
Pull isofs and reiserfs fixes from Jan Kara:
"A reiserfs and an isofs fix. They arrived after I sent you my first
pull request and I don't want to delay them unnecessarily till rc2"
* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs:
isofs: Fix infinite looping over CE entries
reiserfs: destroy allocated commit workqueue
-rw-r--r-- | fs/isofs/rock.c | 6 | ||||
-rw-r--r-- | fs/reiserfs/super.c | 3 |
2 files changed, 9 insertions, 0 deletions
diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c index f488bbae541a..bb63254ed848 100644 --- a/fs/isofs/rock.c +++ b/fs/isofs/rock.c @@ -30,6 +30,7 @@ struct rock_state { int cont_size; int cont_extent; int cont_offset; + int cont_loops; struct inode *inode; }; @@ -73,6 +74,9 @@ static void init_rock_state(struct rock_state *rs, struct inode *inode) rs->inode = inode; } +/* Maximum number of Rock Ridge continuation entries */ +#define RR_MAX_CE_ENTRIES 32 + /* * Returns 0 if the caller should continue scanning, 1 if the scan must end * and -ve on error. @@ -105,6 +109,8 @@ static int rock_continue(struct rock_state *rs) goto out; } ret = -EIO; + if (++rs->cont_loops >= RR_MAX_CE_ENTRIES) + goto out; bh = sb_bread(rs->inode->i_sb, rs->cont_extent); if (bh) { memcpy(rs->buffer, bh->b_data + rs->cont_offset, diff --git a/fs/reiserfs/super.c b/fs/reiserfs/super.c index ea63ab13ef92..71fbbe3e2dab 100644 --- a/fs/reiserfs/super.c +++ b/fs/reiserfs/super.c @@ -2172,6 +2172,9 @@ error_unlocked: reiserfs_write_unlock(s); } + if (sbi->commit_wq) + destroy_workqueue(sbi->commit_wq); + cancel_delayed_work_sync(&REISERFS_SB(s)->old_work); reiserfs_free_bitmap_cache(s); |