[Unionfs] 2.3.3 will not compile

Erez Zadok ezk at cs.sunysb.edu
Sat May 3 15:58:58 EDT 2008


In message <38973.122.199.1.190.1209358212.squirrel at webmail-srv1.servage.net>, bkauler at goosee.com writes:
> I have downloaded kernel 2.6.25-git11, which is a snapshot dated
> 27th April. I got this as it seems to have many bugfixes from
> the 2.6.25 release on the 17th.
> 
> I patched with squashfs 3.3 and unionfs 2.3.3.
> 
> Compile stops with this error message:
> 
>   CC [M]  fs/unionfs/super.o
> fs/unionfs/super.c: In function 'unionfs_umount_begin':
> fs/unionfs/super.c:989: warning: passing argument 1 of
> 'lower_sb->s_op->umount_begin' from incompatible pointer type
> fs/unionfs/super.c:989: error: too many arguments to function
> 'lower_sb->s_op->umount_begin'
> fs/unionfs/super.c: At top level:
> fs/unionfs/super.c:1052: warning: initialization from incompatible pointer
> type
> make[2]: *** [fs/unionfs/super.o] Error 1
> make[1]: *** [fs/unionfs] Error 2
> make: *** [fs] Error 2
> 
> Regards,
> Barry Kauler

Barry,

2.6.26-rc1 was released moments ago, so hopefully 2.6.26 will start
stabilizing from now on, and there'd be less confusion online wrt to what
x.y.z-gitNN really belongs to.

Anyway, below is a patch for the changed ->umount_begin interface.  It
tested ok on my basic unionfs regressions.  I'm going to start extensive
testing on 2.6.26-rc1 now, including for this patch below.  I'll release the
next unionfs once I've run more tests on -rc1.

Cheers,
Erez.


diff --git a/fs/unionfs/super.c b/fs/unionfs/super.c
index 82b4045..b110760 100644
--- a/fs/unionfs/super.c
+++ b/fs/unionfs/super.c
@@ -961,32 +961,21 @@ static int unionfs_write_inode(struct inode *inode, int sync)
  * Used only in nfs, to kill any pending RPC tasks, so that subsequent
  * code can actually succeed and won't leave tasks that need handling.
  */
-static void unionfs_umount_begin(struct vfsmount *mnt, int flags)
+static void unionfs_umount_begin(struct super_block *sb)
 {
-	struct super_block *sb, *lower_sb;
-	struct vfsmount *lower_mnt;
+	struct super_block *lower_sb;
 	int bindex, bstart, bend;
 
-	if (!(flags & MNT_FORCE))
-		/*
-		 * we are not being MNT_FORCE'd, therefore we should emulate
-		 * old behavior
-		 */
-		return;
-
-	sb = mnt->mnt_sb;
-
 	unionfs_read_lock(sb, UNIONFS_SMUTEX_CHILD);
 
 	bstart = sbstart(sb);
 	bend = sbend(sb);
 	for (bindex = bstart; bindex <= bend; bindex++) {
-		lower_mnt = unionfs_lower_mnt_idx(sb->s_root, bindex);
 		lower_sb = unionfs_lower_super_idx(sb, bindex);
 
-		if (lower_mnt && lower_sb && lower_sb->s_op &&
+		if (lower_sb && lower_sb->s_op &&
 		    lower_sb->s_op->umount_begin)
-			lower_sb->s_op->umount_begin(lower_mnt, flags);
+			lower_sb->s_op->umount_begin(lower_sb);
 	}
 
 	unionfs_read_unlock(sb);


More information about the unionfs mailing list