[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