From b25d5997441ec0f72503b63c585611bb1b6db397 Mon Sep 17 00:00:00 2001 From: Erez_Zadok Date: Fri, 25 May 2007 16:20:36 -0400 Subject: [PATCH] unionfs: merge find_new_branch_index and branch_id_to_idx into one function Useful code cleanup and consolidation between the ODF code and non-ODF code. Signed-off-by: Erez Zadok --- fs/unionfs/commonfops.c | 35 +++++++++-------------------------- fs/unionfs/fanout.h | 24 ++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/fs/unionfs/commonfops.c b/fs/unionfs/commonfops.c index 0ae465a40f5..e0d05527e21 100644 --- a/fs/unionfs/commonfops.c +++ b/fs/unionfs/commonfops.c @@ -97,31 +97,6 @@ out: return err; } -/* - * Find new index of matching branch with an open file, since branches could - * have been added/deleted causing the one with open files to shift. - * - * @file: current file whose branches may have changed - * @bindex: index of branch within current file (could be old branch) - * @new_sb: the new superblock which may have new branch IDs - * Returns index of newly found branch (0 or greater), -1 otherwise. - */ -static int find_new_branch_index(struct file *file, int bindex, - struct super_block *new_sb) -{ - int old_branch_id = UNIONFS_F(file)->saved_branch_ids[bindex]; - int i; - - for (i = 0; i < sbmax(new_sb); i++) - if (old_branch_id == branch_id(new_sb, i)) - return i; - /* - * XXX: maybe we should BUG_ON if not found new branch index? - * (really that should never happen). - */ - return -1; -} - /* * put all references held by upper struct file and free lower file pointer * array @@ -138,8 +113,16 @@ static void cleanup_file(struct file *file) for (bindex = bstart; bindex <= bend; bindex++) { if (unionfs_lower_file_idx(file, bindex)) { + /* + * Find new index of matching branch with an open + * file, since branches could have been added or + * deleted causing the one with open files to shift. + */ int i; /* holds (possibly) updated branch index */ - i = find_new_branch_index(file, bindex, sb); + int old_bid; + + old_bid = UNIONFS_F(file)->saved_branch_ids[bindex]; + i = branch_id_to_idx(sb, old_bid); if (i < 0) printk(KERN_ERR "unionfs: no superblock for " "file %p\n", file); diff --git a/fs/unionfs/fanout.h b/fs/unionfs/fanout.h index 71052a36b19..03198351c44 100644 --- a/fs/unionfs/fanout.h +++ b/fs/unionfs/fanout.h @@ -55,6 +55,30 @@ static inline void new_branch_id(struct super_block *sb, int index) set_branch_id(sb, index, ++UNIONFS_SB(sb)->high_branch_id); } +/* + * Find new index of matching branch with an existing superblock a a known + * (possibly old) id. This is needed because branches could have been + * added/deleted causing the branchs of any open files to shift. + * + * @sb: the new superblock which may have new/different branch IDs + * @id: the old/existing id we're looking for + * Returns index of newly found branch (0 or greater), -1 otherwise. + */ +static inline int branch_id_to_idx(struct super_block *sb, int id) +{ + int i; + for (i = 0; i < sbmax(sb); i++) { + if (branch_id(sb, i) == id) + return i; + } + /* + * XXX: maybe we should BUG_ON if not found new branch index? + * (really that should never happen). + */ + printk(KERN_WARNING "unionfs: cannot find branch with id %d\n", id); + return -1; +} + /* File to lower file. */ static inline struct file *unionfs_lower_file(const struct file *f) { -- 2.34.1