On Tue, 24 Feb 2015 20:01:38 +0100, Andreas Rohner wrote:
> *buf,
>       int cleansi, cleansu, dirtysi, dirtysu;
>       long ncleaned = 0, ndirtied = 0;
>       int ret = 0;
> +     bool sup_ext = (supsz >= NILFS_EXT_SUINFO_UPDATE_SIZE);
> +     bool su_ext = nilfs_sufile_ext_supported(sufile);
>  
>       if (unlikely(nsup == 0))
>               return ret;
> @@ -926,6 +949,9 @@ ssize_t nilfs_sufile_set_suinfo(struct inode *sufile, 
> void *buf,
>                               (~0UL << __NR_NILFS_SUINFO_UPDATE_FIELDS))
>                       || (nilfs_suinfo_update_nblocks(sup) &&
>                               sup->sup_sui.sui_nblocks >
> +                             nilfs->ns_blocks_per_segment)
> +                     || (nilfs_suinfo_update_nlive_blks(sup) && sup_ext &&
> +                             sup->sup_sui.sui_nlive_blks >
>                               nilfs->ns_blocks_per_segment))
>                       return -EINVAL;
>       }
> @@ -953,6 +979,14 @@ ssize_t nilfs_sufile_set_suinfo(struct inode *sufile, 
> void *buf,
>               if (nilfs_suinfo_update_nblocks(sup))
>                       su->su_nblocks = cpu_to_le32(sup->sup_sui.sui_nblocks);
>  
> +             if (nilfs_suinfo_update_nlive_blks(sup) && sup_ext && su_ext)
> +                     su->su_nlive_blks =
> +                             cpu_to_le32(sup->sup_sui.sui_nlive_blks);
> +
> +             if (nilfs_suinfo_update_nlive_lastmod(sup) && sup_ext && su_ext)
> +                     su->su_nlive_lastmod =
> +                             cpu_to_le64(sup->sup_sui.sui_nlive_lastmod);
> +
>               if (nilfs_suinfo_update_flags(sup)) {
>                       /*
>                        * Active flag is a virtual flag projected by running
> diff --git a/fs/nilfs2/sufile.h b/fs/nilfs2/sufile.h
> index c446325..d56498b 100644
> --- a/fs/nilfs2/sufile.h
> +++ b/fs/nilfs2/sufile.h
> @@ -28,6 +28,11 @@
>  #include <linux/nilfs2_fs.h>
>  #include "mdt.h"
>  
> +static inline int
> +nilfs_sufile_ext_supported(const struct inode *sufile)
> +{
> +     return NILFS_MDT(sufile)->mi_entry_size >= NILFS_EXT_SEGMENT_USAGE_SIZE;
> +}
>  
>  static inline unsigned long nilfs_sufile_get_nsegments(struct inode *sufile)
>  {
> diff --git a/include/linux/nilfs2_fs.h b/include/linux/nilfs2_fs.h
> index ff3fea3..5d83c55 100644
> --- a/include/linux/nilfs2_fs.h
> +++ b/include/linux/nilfs2_fs.h
> @@ -220,9 +220,11 @@ struct nilfs_super_block {
>   * If there is a bit set in the incompatible feature set that the kernel
>   * doesn't know about, it should refuse to mount the filesystem.
>   */
> -#define NILFS_FEATURE_COMPAT_RO_BLOCK_COUNT  0x00000001ULL
> +#define NILFS_FEATURE_COMPAT_SUFILE_EXTENSION                (1ULL << 0)

This feature name is not good.  sufile can be extended more in a future.
You should name it based on the meaning of the extension of this time.

As I mentioned in another patch, I think this could be unified to the
TRACK_LIVE_BLKS feature that a later patch adds since the live block
counting of this patchset is inherently depending on the extention of
sufile.

>  
> -#define NILFS_FEATURE_COMPAT_SUPP    0ULL
> +#define NILFS_FEATURE_COMPAT_RO_BLOCK_COUNT          (1ULL << 0)
> +

Regards,
Ryusuke Konishi
--
To unsubscribe from this list: send the line "unsubscribe linux-nilfs" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to