Re: [PATCH] ovl: System-wide unique st_dev

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Monday, June 19, 2017 11:15:37 PM IST Amir Goldstein wrote:
> On Mon, Jun 19, 2017 at 6:22 PM, Chandan Rajendra
> <chandan@xxxxxxxxxxxxxxxxxx> wrote:
> > On an overlayfs instance having lower and upper dirs on the same
> > filesystem, stat(2) on a file residing on the lower dir will
> 
> This is not what the patch should do. The patch should deal with !samefs case.
> 
> > provide st_dev corresponding to the lower filesystem's bdev. Later, After
> > the lower file is copied-up, stat(2) on the file provides st_dev
> > corresponding to the overlayfs' pseudo device. Hence we have a mismatch
> > in the st_dev value that is provided to the userspace.
> 
> All this is true, but you patch should not be bothering with constant st_dev
> over copy up. my patches do that.
> Your patch should provide the pseudo st_dev for lower, which my patch
> "relax same fs constrain for constant st_ino" needs to be able to use
> the lower (pseudo) dev as the constant st_dev across copy up.

Ok. But we continue to use overlayfs' anon dev when reporting st_dev for
directories right?

> 
> Yes, it can be confusing. After everything falls into place you will have an
> Ahh moment... Let me know if anything is unclear.
> 
> >
> > This commit allocates pseudo bdevs for each of the lowerdirs and
> > provides the value of such a pseudo bdev for stat(2) on files that
> > either reside only on the lower dir or have been copied up from a
> > file that was originally present on the lowedir.
> >
> > Signed-off-by: Chandan Rajendra <chandan@xxxxxxxxxxxxxxxxxx>
> > ---
> >  fs/overlayfs/inode.c     | 24 ++++++++++++++++++++++--
> >  fs/overlayfs/ovl_entry.h |  9 ++++++++-
> >  fs/overlayfs/super.c     | 34 ++++++++++++++++++++++++++--------
> >  3 files changed, 56 insertions(+), 11 deletions(-)
> >
> > diff --git a/fs/overlayfs/inode.c b/fs/overlayfs/inode.c
> > index d613e2c..8f6d66c 100644
> > --- a/fs/overlayfs/inode.c
> > +++ b/fs/overlayfs/inode.c
> > @@ -8,11 +8,28 @@
> >   */
> >
> >  #include <linux/fs.h>
> > +#include <linux/mount.h>
> >  #include <linux/slab.h>
> >  #include <linux/cred.h>
> >  #include <linux/xattr.h>
> >  #include <linux/posix_acl.h>
> >  #include "overlayfs.h"
> > +#include "ovl_entry.h"
> > +
> > +static dev_t ovl_get_pseudo_dev(struct ovl_fs *ofs, dev_t dev)
> > +{
> > +       int i;
> > +
> > +       if (ofs->upper_mnt && ofs->upper_mnt->mnt_sb->s_dev == dev)
> > +               return ofs->ovl_sb->s_dev;
> 
> You don't need to store ovl_sb.
> Pass dentry into this function and use dentry->d_sb.
> 
> > +
> > +       for (i = 0; i < ofs->numlower; i++) {
> > +               if (ofs->lower_mnt[i].real_dev == dev)
> > +                       return ofs->lower_mnt[i].pseudo_dev;
> > +       }
> > +
> > +       return dev;
> > +}
> >
> >  int ovl_setattr(struct dentry *dentry, struct iattr *attr)
> >  {
> > @@ -100,10 +117,13 @@ int ovl_getattr(const struct path *path, struct kstat *stat,
> >                          * upper files, so we cannot use the lower origin st_ino
> >                          * for those different files, even for the same fs case.
> >                          */
> > -                       if (is_dir || lowerstat.nlink == 1)
> > +                       if (is_dir || lowerstat.nlink == 1) {
> >                                 stat->ino = lowerstat.ino;
> > +                               stat->dev = lowerstat.dev;
> > +                       }
> >                 }
> > -               stat->dev = dentry->d_sb->s_dev;
> > +               stat->dev = ovl_get_pseudo_dev(dentry->d_sb->s_fs_info,
> > +                                       stat->dev);
> 
> samefs case should not be changed.
> samefs means that all lower layers are same sb as upper so all get overlay dev
> in stat(2).
> 
> The purpose of your work in to fix the !samefs case.
> !samefs should return overlay dev for upper inodes and pseudo lower dev for
> lower inodes.
> 
> Thanks,
> Amir.
> 
> 

-- 
chandan

--
To unsubscribe from this list: send the line "unsubscribe linux-unionfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Filesystems Devel]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux