Yes, ok beck@

to be shortly followed by the ntfs code - don't we have a fuse version of
this?


On Wed, Aug 31, 2016 at 3:34 PM, Martin Natano <nat...@natano.net> wrote:

> mount_ntfs forces the mount point to be MNT_RDONLY, so the write parts
> in ntfs are never used. OK to remove?
>
> natano
>
>
> Index: ntfs/ntfs_subr.c
> ===================================================================
> RCS file: /cvs/src/sys/ntfs/ntfs_subr.c,v
> retrieving revision 1.47
> diff -u -p -r1.47 ntfs_subr.c
> --- ntfs/ntfs_subr.c    31 Aug 2016 15:13:57 -0000      1.47
> +++ ntfs/ntfs_subr.c    31 Aug 2016 19:58:31 -0000
> @@ -1336,152 +1336,6 @@ ntfs_filesize(struct ntfsmount *ntmp, st
>  }
>
>  /*
> - * This is one of the write routines.
> - */
> -int
> -ntfs_writeattr_plain(struct ntfsmount *ntmp, struct ntnode *ip,
> -    u_int32_t attrnum, char *attrname, off_t roff, size_t rsize, void
> *rdata,
> -    size_t *initp, struct uio *uio)
> -{
> -       size_t          init;
> -       int             error = 0;
> -       off_t           off = roff;
> -       size_t          left = rsize, towrite;
> -       caddr_t         data = rdata;
> -       struct ntvattr *vap;
> -       *initp = 0;
> -
> -       while (left) {
> -               error = ntfs_ntvattrget(ntmp, ip, attrnum, attrname,
> -                                       ntfs_btocn(off), &vap);
> -               if (error)
> -                       return (error);
> -               towrite = MIN(left, ntfs_cntob(vap->va_vcnend + 1) - off);
> -               DDPRINTF("ntfs_writeattr_plain: o: %lld, s: %zu "
> -                   "(%llu - %llu)\n", off, towrite,
> -                   vap->va_vcnstart, vap->va_vcnend);
> -               error = ntfs_writentvattr_plain(ntmp, ip, vap,
> -                                        off -
> ntfs_cntob(vap->va_vcnstart),
> -                                        towrite, data, &init, uio);
> -               if (error) {
> -                       DPRINTF("ntfs_writeattr_plain:
> ntfs_writentvattr_plain "
> -                           "failed: o: %lld, s: %zu\n", off, towrite);
> -                       DPRINTF("ntfs_writeattr_plain: attrib: %llu -
> %llu\n",
> -                           vap->va_vcnstart, vap->va_vcnend);
> -                       ntfs_ntvattrrele(vap);
> -                       break;
> -               }
> -               ntfs_ntvattrrele(vap);
> -               left -= towrite;
> -               off += towrite;
> -               data = data + towrite;
> -               *initp += init;
> -       }
> -
> -       return (error);
> -}
> -
> -/*
> - * This is one of the write routines.
> - *
> - * ntnode should be locked.
> - */
> -int
> -ntfs_writentvattr_plain(struct ntfsmount *ntmp, struct ntnode *ip,
> -    struct ntvattr *vap, off_t roff, size_t rsize, void *rdata, size_t
> *initp,
> -    struct uio *uio)
> -{
> -       int             error = 0;
> -       off_t           off;
> -       int             cnt;
> -       cn_t            ccn, ccl, cn, cl;
> -       caddr_t         data = rdata;
> -       struct buf     *bp;
> -       size_t          left, tocopy;
> -
> -       *initp = 0;
> -
> -       if ((vap->va_flag & NTFS_AF_INRUN) == 0) {
> -               DPRINTF("ntfs_writevattr_plain: CAN'T WRITE RES.
> ATTRIBUTE\n");
> -               return ENOTTY;
> -       }
> -
> -       DDPRINTF("ntfs_writentvattr_plain: data in run: %lu chains\n",
> -           vap->va_vruncnt);
> -
> -       off = roff;
> -       left = rsize;
> -
> -       for (cnt = 0; left && (cnt < vap->va_vruncnt); cnt++) {
> -               ccn = vap->va_vruncn[cnt];
> -               ccl = vap->va_vruncl[cnt];
> -
> -               DDPRINTF("ntfs_writentvattr_plain: left %zu, cn: 0x%llx, "
> -                   "cl: %llu, off: %lld\n", left, ccn, ccl, off);
> -
> -               if (ntfs_cntob(ccl) < off) {
> -                       off -= ntfs_cntob(ccl);
> -                       cnt++;
> -                       continue;
> -               }
> -               if (!ccn && ip->i_number != NTFS_BOOTINO)
> -                       continue; /* XXX */
> -
> -               ccl -= ntfs_btocn(off);
> -               cn = ccn + ntfs_btocn(off);
> -               off = ntfs_btocnoff(off);
> -
> -               while (left && ccl) {
> -                       /*
> -                        * Always read and write single clusters at a time
> -
> -                        * we need to avoid requesting differently-sized
> -                        * blocks at the same disk offsets to avoid
> -                        * confusing the buffer cache.
> -                        */
> -                       tocopy = MIN(left, ntfs_cntob(1) - off);
> -                       cl = ntfs_btocl(tocopy + off);
> -                       KASSERT(cl == 1 && tocopy <= ntfs_cntob(1));
> -                       DDPRINTF("ntfs_writentvattr_plain: write: cn:
> 0x%llx "
> -                           "cl: %llu, off: %lld len: %zu, left: %zu\n",
> -                           cn, cl, off, tocopy, left);
> -                       if ((off == 0) && (tocopy == ntfs_cntob(cl)))
> -                       {
> -                               bp = getblk(ntmp->ntm_devvp,
> ntfs_cntobn(cn),
> -                                           ntfs_cntob(cl), 0, 0);
> -                               clrbuf(bp);
> -                       } else {
> -                               error = bread(ntmp->ntm_devvp,
> ntfs_cntobn(cn),
> -                                             ntfs_cntob(cl), &bp);
> -                               if (error) {
> -                                       brelse(bp);
> -                                       return (error);
> -                               }
> -                       }
> -                       if (uio) {
> -                               error = uiomove(bp->b_data + off, tocopy,
> uio);
> -                               if (error != 0)
> -                                       break;
> -                       } else
> -                               memcpy(bp->b_data + off, data, tocopy);
> -                       bawrite(bp);
> -                       data = data + tocopy;
> -                       *initp += tocopy;
> -                       off = 0;
> -                       left -= tocopy;
> -                       cn += cl;
> -                       ccl -= cl;
> -               }
> -       }
> -
> -       if (left && error == 0) {
> -               printf("ntfs_writentvattr_plain: POSSIBLE RUN ERROR\n");
> -               error = EINVAL;
> -       }
> -
> -       return (error);
> -}
> -
> -/*
>   * This is one of the read routines.
>   *
>   * ntnode should be locked.
> Index: ntfs/ntfs_subr.h
> ===================================================================
> RCS file: /cvs/src/sys/ntfs/ntfs_subr.h,v
> retrieving revision 1.9
> diff -u -p -r1.9 ntfs_subr.h
> --- ntfs/ntfs_subr.h    19 Jan 2014 18:35:45 -0000      1.9
> +++ ntfs/ntfs_subr.h    31 Aug 2016 19:59:33 -0000
> @@ -91,8 +91,6 @@ int ntfs_ntvattrget(struct ntfsmount *,
>  void ntfs_ntref(struct ntnode *);
>  void ntfs_ntrele(struct ntnode *);
>  int ntfs_loadntnode( struct ntfsmount *, struct ntnode * );
> -int ntfs_writentvattr_plain(struct ntfsmount *, struct ntnode *, struct
> ntvattr *, off_t, size_t, void *, size_t *, struct uio *);
> -int ntfs_writeattr_plain(struct ntfsmount *, struct ntnode *, u_int32_t,
> char *, off_t, size_t, void *, size_t *, struct uio *);
>  int ntfs_fget(struct ntfsmount *, struct ntnode *, int, char *, struct
> fnode **);
>  void ntfs_frele(struct fnode *);
>  int ntfs_ntreaddir(struct ntfsmount *, struct fnode *, u_int32_t, struct
> attr_indexentry **, struct proc *);
> Index: ntfs/ntfs_vfsops.c
> ===================================================================
> RCS file: /cvs/src/sys/ntfs/ntfs_vfsops.c,v
> retrieving revision 1.53
> diff -u -p -r1.53 ntfs_vfsops.c
> --- ntfs/ntfs_vfsops.c  13 Aug 2016 20:53:17 -0000      1.53
> +++ ntfs/ntfs_vfsops.c  31 Aug 2016 20:34:41 -0000
> @@ -122,7 +122,6 @@ ntfs_mount(struct mount *mp, const char
>         struct ntfs_args args;
>         char fname[MNAMELEN];
>         char fspec[MNAMELEN];
> -       mode_t amode;
>
>         ntfs_nthashinit();
>
> @@ -193,9 +192,8 @@ ntfs_mount(struct mount *mp, const char
>          * requested device.
>          */
>         if (p->p_ucred->cr_uid) {
> -               amode = (mp->mnt_flag & MNT_RDONLY) ? VREAD : (VREAD |
> VWRITE);
>                 vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, p);
> -               err = VOP_ACCESS(devvp, amode, p->p_ucred, p);
> +               err = VOP_ACCESS(devvp, VREAD, p->p_ucred, p);
>                 VOP_UNLOCK(devvp, p);
>                 if (err)
>                         goto error_2;
> @@ -282,7 +280,7 @@ ntfs_mountfs(struct vnode *devvp, struct
>         struct buf *bp;
>         struct ntfsmount *ntmp = NULL;
>         dev_t dev = devvp->v_rdev;
> -       int error, ronly, ncount, i;
> +       int error, ncount, i;
>         struct vnode *vp;
>
>         /*
> @@ -303,8 +301,7 @@ ntfs_mountfs(struct vnode *devvp, struct
>         if (error)
>                 return (error);
>
> -       ronly = (mp->mnt_flag & MNT_RDONLY) != 0;
> -       error = VOP_OPEN(devvp, ronly ? FREAD : FREAD|FWRITE, FSCRED, p);
> +       error = VOP_OPEN(devvp, FREAD, FSCRED, p);
>         if (error)
>                 return (error);
>
> @@ -464,7 +461,7 @@ out:
>
>         /* lock the device vnode before calling VOP_CLOSE() */
>         vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, p);
> -       (void)VOP_CLOSE(devvp, ronly ? FREAD : FREAD|FWRITE, NOCRED, p);
> +       (void)VOP_CLOSE(devvp, FREAD, NOCRED, p);
>         VOP_UNLOCK(devvp, p);
>
>         return (error);
> @@ -480,7 +477,7 @@ int
>  ntfs_unmount(struct mount *mp, int mntflags, struct proc *p)
>  {
>         struct ntfsmount *ntmp;
> -       int error, ronly = 0, flags, i;
> +       int error, flags, i;
>
>         DPRINTF("ntfs_unmount: unmounting...\n");
>         ntmp = VFSTONTFS(mp);
> @@ -524,8 +521,7 @@ ntfs_unmount(struct mount *mp, int mntfl
>         /* lock the device vnode before calling VOP_CLOSE() */
>         vn_lock(ntmp->ntm_devvp, LK_EXCLUSIVE | LK_RETRY, p);
>         vinvalbuf(ntmp->ntm_devvp, V_SAVE, NOCRED, p, 0, 0);
> -       (void)VOP_CLOSE(ntmp->ntm_devvp, ronly ? FREAD : FREAD|FWRITE,
> -           NOCRED, p);
> +       (void)VOP_CLOSE(ntmp->ntm_devvp, FREAD, NOCRED, p);
>         vput(ntmp->ntm_devvp);
>
>         /* free the toupper table, if this has been last mounted ntfs
> volume */
> Index: ntfs/ntfs_vnops.c
> ===================================================================
> RCS file: /cvs/src/sys/ntfs/ntfs_vnops.c,v
> retrieving revision 1.41
> diff -u -p -r1.41 ntfs_vnops.c
> --- ntfs/ntfs_vnops.c   19 Mar 2016 12:04:16 -0000      1.41
> +++ ntfs/ntfs_vnops.c   31 Aug 2016 20:32:31 -0000
> @@ -57,7 +57,6 @@
>  #include <sys/unistd.h> /* for pathconf(2) constants */
>
>  int    ntfs_read(void *);
> -int    ntfs_write(void *);
>  int    ntfs_getattr(void *);
>  int    ntfs_inactive(void *);
>  int    ntfs_print(void *);
> @@ -292,29 +291,8 @@ ntfs_strategy(void *v)
>                         bzero(bp->b_data + toread, bp->b_bcount - toread);
>                 }
>         } else {
> -               size_t tmp;
> -               u_int32_t towrite;
> -
> -               if (ntfs_cntob(bp->b_blkno) + bp->b_bcount >= fp->f_size) {
> -                       printf("ntfs_strategy: CAN'T EXTEND FILE\n");
> -                       bp->b_error = error = EFBIG;
> -                       bp->b_flags |= B_ERROR;
> -               } else {
> -                       towrite = MIN(bp->b_bcount,
> -                               fp->f_size - ntfs_cntob(bp->b_blkno));
> -                       DPRINTF("ntfs_strategy: towrite: %u, fsize:
> %llu\n",
> -                           towrite, fp->f_size);
> -
> -                       error = ntfs_writeattr_plain(ntmp, ip,
> fp->f_attrtype,
> -                               fp->f_attrname, ntfs_cntob(bp->b_blkno),
> towrite,
> -                               bp->b_data, &tmp, NULL);
> -
> -                       if (error) {
> -                               printf("ntfs_strategy: ntfs_writeattr
> fail\n");
> -                               bp->b_error = error;
> -                               bp->b_flags |= B_ERROR;
> -                       }
> -               }
> +               bp->b_error = error = EROFS;
> +               bp->b_flags |= B_ERROR;
>         }
>         s = splbio();
>         biodone(bp);
> @@ -323,42 +301,6 @@ ntfs_strategy(void *v)
>  }
>
>  int
> -ntfs_write(void *v)
> -{
> -       struct vop_write_args *ap = v;
> -       struct vnode *vp = ap->a_vp;
> -       struct fnode *fp = VTOF(vp);
> -       struct ntnode *ip = FTONT(fp);
> -       struct uio *uio = ap->a_uio;
> -       struct ntfsmount *ntmp = ip->i_mp;
> -       u_int64_t towrite;
> -       size_t written;
> -       int error;
> -
> -       DPRINTF("ntfs_write: ino: %u, off: %lld resid: %zu, segflg: %d\n",
> -           ip->i_number, uio->uio_offset, uio->uio_resid,
> uio->uio_segflg);
> -       DPRINTF("ntfs_write: filesize: %llu", fp->f_size);
> -
> -       if (uio->uio_resid + uio->uio_offset > fp->f_size) {
> -               printf("ntfs_write: CAN'T WRITE BEYOND END OF FILE\n");
> -               return (EFBIG);
> -       }
> -
> -       towrite = MIN(uio->uio_resid, fp->f_size - uio->uio_offset);
> -
> -       DPRINTF(", towrite: %llu\n", towrite);
> -
> -       error = ntfs_writeattr_plain(ntmp, ip, fp->f_attrtype,
> -               fp->f_attrname, uio->uio_offset, towrite, NULL, &written,
> uio);
> -#ifdef NTFS_DEBUG
> -       if (error)
> -               printf("ntfs_write: ntfs_writeattr failed: %d\n", error);
> -#endif
> -
> -       return (error);
> -}
> -
> -int
>  ntfs_access(void *v)
>  {
>         struct vop_access_args *ap = v;
> @@ -372,18 +314,15 @@ ntfs_access(void *v)
>         DPRINTF("ntfs_access: %u\n", ip->i_number);
>
>         /*
> -        * Disallow write attempts on read-only file systems;
> -        * unless the file is a socket, fifo, or a block or
> -        * character device resident on the file system.
> +        * Disallow write attempts unless the file is a socket, fifo, or
> +        * a block or character device resident on the file system.
>          */
>         if (mode & VWRITE) {
>                 switch ((int)vp->v_type) {
>                 case VDIR:
>                 case VLNK:
>                 case VREG:
> -                       if (vp->v_mount->mnt_flag & MNT_RDONLY)
> -                               return (EROFS);
> -                       break;
> +                       return (EROFS);
>                 }
>         }
>
> @@ -606,7 +545,6 @@ ntfs_lookup(void *v)
>                 return (error);
>
>         if ((cnp->cn_flags & ISLASTCN) &&
> -           (dvp->v_mount->mnt_flag & MNT_RDONLY) &&
>             (cnp->cn_nameiop == DELETE || cnp->cn_nameiop == RENAME))
>                 return (EROFS);
>
> @@ -746,5 +684,4 @@ struct vops ntfs_vops = {
>         .vop_strategy   = ntfs_strategy,
>         .vop_bwrite     = vop_generic_bwrite,
>         .vop_read       = ntfs_read,
> -       .vop_write      = ntfs_write,
>  };
>
>

Reply via email to