[Unionfs] RT kernel 2.6.23

Paul Hewlett paul at gccs.co.za
Tue Nov 20 02:20:17 EST 2007


On Tuesday 20 November 2007 04:11:01 Erez Zadok wrote:
> In message <200711150903.18381.paul at gccs.co.za>, Paul Hewlett writes:
> > On Wednesday 14 November 2007 16:40:21 Erez Zadok wrote:
> >
> > Erez
> >
> > Yes 2.6.23 only.
> > I would imagine that using the mapping function unconditionally would be
> > the correct way to go.
> >
> > Paul
>
> OK, try this small patch below.
>
> Erez.

Erez

At first glance your suggestion seems wrong - see below


>
>
> Unionfs: cleaner support for RT patches
>
> Signed-off-by: Erez Zadok <ezk at cs.sunysb.edu>
> diff --git a/fs/unionfs/dentry.c b/fs/unionfs/dentry.c
> index edea1a4..19c6a45 100644
> --- a/fs/unionfs/dentry.c
> +++ b/fs/unionfs/dentry.c
> @@ -268,7 +268,7 @@ static inline void purge_inode_data(struct inode
> *inode) /* remove all non-private mappings */
>  	unmap_mapping_range(inode->i_mapping, 0, 0, 0);
>
> -	if (inode->i_data.nrpages)
> +	if (mapping_nrpages(inode->i_data.nrpages))

        if(mapping_nrpages(&inode->i_data))    ???

Paul

>  		truncate_inode_pages(&inode->i_data, 0);
>  }
>
> diff --git a/fs/unionfs/super.c b/fs/unionfs/super.c
> index 29badd2..9798336 100644
> --- a/fs/unionfs/super.c
> +++ b/fs/unionfs/super.c
> @@ -71,7 +71,7 @@ static void unionfs_delete_inode(struct inode *inode)
>  {
>  	i_size_write(inode, 0);	/* every f/s seems to do that */
>
> -	if (inode->i_data.nrpages)
> +	if (mapping_nrpages(inode->i_data.nrpages))
>  		truncate_inode_pages(&inode->i_data, 0);
>
>  	clear_inode(inode);
> diff --git a/fs/unionfs/union.h b/fs/unionfs/union.h
> index ddb9b8b..e0f38d7 100644
> --- a/fs/unionfs/union.h
> +++ b/fs/unionfs/union.h
> @@ -79,6 +79,14 @@ extern struct address_space_operations unionfs_aops;
>  /* How long should an entry be allowed to persist */
>  #define RDCACHE_JIFFIES	(5*HZ)
>
> +/* compatibility with Real-Time patches */
> +#ifdef CONFIG_PREEMPT_RT
> +# define unionfs_rw_semaphore	compat_rw_semaphore
> +#else /* not CONFIG_PREEMPT_RT */
> +# define unionfs_rw_semaphore	rw_semaphore
> +# define mapping_nrpages(x)	(x)
> +#endif /* not CONFIG_PREEMPT_RT */
> +
>  /* file private data. */
>  struct unionfs_file_info {
>  	int bstart;
> @@ -153,11 +161,7 @@ struct unionfs_sb_info {
>  	 * branch-management is used on a pivot_root'ed union, because we
>  	 * have to ->lookup paths which belong to the same union.
>  	 */
> -#ifdef CONFIG_PREEMPT_RT
> -	struct compat_rw_semaphore rwsem;
> -#else /* not CONFIG_PREEMPT_RT */
> -	struct rw_semaphore rwsem;
> -#endif /* not CONFIG_PREEMPT_RT */
> +	struct unionfs_rw_semaphore rwsem;
>  	pid_t write_lock_owner;	/* PID of rw_sem owner (write lock) */
>  	int high_branch_id;	/* last unique branch ID given */
>  	struct unionfs_data *data;
> _______________________________________________
> unionfs mailing list: http://unionfs.filesystems.org/
> unionfs at mail.fsl.cs.sunysb.edu
> http://www.fsl.cs.sunysb.edu/mailman/listinfo/unionfs



-- 
Paul Hewlett  Technical Director 
Global Call Center Solutions Ltd, 2nd Floor, Milnerton Mall
Cnr Loxton & Koeberg Roads, 7435 Milnerton
www.gccs.co.za
Tel: +27 86 111 3433 Fax: +27 86 111 3520 Cel: +27 76 072 7906
VOIP: 087 750 7474



More information about the unionfs mailing list