[BACK]Return to ffs_snapshot.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / ufs / ffs

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/ufs/ffs/ffs_snapshot.c between version 1.24 and 1.24.8.1

version 1.24, 2006/01/04 10:13:06 version 1.24.8.1, 2006/03/08 01:39:12
Line 71  __KERNEL_RCSID(0, "$NetBSD$");
Line 71  __KERNEL_RCSID(0, "$NetBSD$");
 #include <ufs/ffs/ffs_extern.h>  #include <ufs/ffs/ffs_extern.h>
   
 /* FreeBSD -> NetBSD conversion */  /* FreeBSD -> NetBSD conversion */
 #define KERNCRED        proc0.p_ucred  #define KERNCRED        proc0.p_cred
 #define ufs1_daddr_t    int32_t  #define ufs1_daddr_t    int32_t
 #define ufs2_daddr_t    int64_t  #define ufs2_daddr_t    int64_t
 #define ufs_lbn_t       daddr_t  #define ufs_lbn_t       daddr_t
Line 179  ffs_snapshot(struct mount *mp, struct vn
Line 179  ffs_snapshot(struct mount *mp, struct vn
                 return EXDEV;                  return EXDEV;
         if (vp->v_usecount != 1 || vp->v_writecount != 0)          if (vp->v_usecount != 1 || vp->v_writecount != 0)
                 return EBUSY;                  return EBUSY;
         if (suser(l->l_proc->p_ucred, &l->l_proc->p_acflag) != 0 &&          if (generic_authorize(l->l_proc->p_cred, KAUTH_GENERIC_ISSUSER,
             VTOI(vp)->i_uid != l->l_proc->p_ucred->cr_uid)                                &l->l_proc->p_acflag) != 0 &&
               VTOI(vp)->i_uid != kauth_cred_geteuid(l->l_proc->p_cred))
                 return EACCES;                  return EACCES;
   
         if (vp->v_size != 0) {          if (vp->v_size != 0) {
Line 207  ffs_snapshot(struct mount *mp, struct vn
Line 208  ffs_snapshot(struct mount *mp, struct vn
         blkno = ufs_rw64(blkno, ns);          blkno = ufs_rw64(blkno, ns);
         error = vn_rdwr(UIO_WRITE, vp,          error = vn_rdwr(UIO_WRITE, vp,
             (caddr_t)&blkno, sizeof(blkno), lblktosize(fs, (off_t)numblks),              (caddr_t)&blkno, sizeof(blkno), lblktosize(fs, (off_t)numblks),
             UIO_SYSSPACE, IO_NODELOCKED|IO_UNIT, l->l_proc->p_ucred, NULL, NULL);              UIO_SYSSPACE, IO_NODELOCKED|IO_UNIT, l->l_proc->p_cred, NULL, NULL);
         if (error)          if (error)
                 goto out;                  goto out;
         /*          /*
Line 223  ffs_snapshot(struct mount *mp, struct vn
Line 224  ffs_snapshot(struct mount *mp, struct vn
          */           */
         for (blkno = NDADDR; blkno < numblks; blkno += NINDIR(fs)) {          for (blkno = NDADDR; blkno < numblks; blkno += NINDIR(fs)) {
                 error = ffs_balloc(vp, lblktosize(fs, (off_t)blkno),                  error = ffs_balloc(vp, lblktosize(fs, (off_t)blkno),
                     fs->fs_bsize, l->l_proc->p_ucred, B_METAONLY, &ibp);                      fs->fs_bsize, l->l_proc->p_cred, B_METAONLY, &ibp);
                 if (error)                  if (error)
                         goto out;                          goto out;
                 bawrite(ibp);                  bawrite(ibp);
Line 385  loop:
Line 386  loop:
                 if (snapdebug)                  if (snapdebug)
                         vprint("ffs_snapshot: busy vnode", xvp);                          vprint("ffs_snapshot: busy vnode", xvp);
 #endif  #endif
                 if (VOP_GETATTR(xvp, &vat, l->l_proc->p_ucred, l) == 0 &&                  if (VOP_GETATTR(xvp, &vat, l->l_proc->p_cred, l) == 0 &&
                     vat.va_nlink > 0) {                      vat.va_nlink > 0) {
                         VOP_UNLOCK(xvp, 0);                          VOP_UNLOCK(xvp, 0);
                         MNT_ILOCK(mp);                          MNT_ILOCK(mp);
Line 578  out1:
Line 579  out1:
                 snapblklist[i] = ufs_rw64(snapblklist[i], ns);                  snapblklist[i] = ufs_rw64(snapblklist[i], ns);
         error = vn_rdwr(UIO_WRITE, vp, (caddr_t)snapblklist,          error = vn_rdwr(UIO_WRITE, vp, (caddr_t)snapblklist,
             snaplistsize*sizeof(ufs2_daddr_t), lblktosize(fs, (off_t)numblks),              snaplistsize*sizeof(ufs2_daddr_t), lblktosize(fs, (off_t)numblks),
             UIO_SYSSPACE, IO_NODELOCKED|IO_UNIT, l->l_proc->p_ucred, NULL, NULL);              UIO_SYSSPACE, IO_NODELOCKED|IO_UNIT, l->l_proc->p_cred, NULL, NULL);
         for (i = 0; i < snaplistsize; i++)          for (i = 0; i < snaplistsize; i++)
                 snapblklist[i] = ufs_rw64(snapblklist[i], ns);                  snapblklist[i] = ufs_rw64(snapblklist[i], ns);
         if (error) {          if (error) {
Line 1692  ffs_snapshot_mount(struct mount *mp)
Line 1693  ffs_snapshot_mount(struct mount *mp)
                     (caddr_t)&snaplistsize, sizeof(snaplistsize),                      (caddr_t)&snaplistsize, sizeof(snaplistsize),
                     lblktosize(fs, howmany(fs->fs_size, fs->fs_frag)),                      lblktosize(fs, howmany(fs->fs_size, fs->fs_frag)),
                     UIO_SYSSPACE, IO_NODELOCKED|IO_UNIT,                      UIO_SYSSPACE, IO_NODELOCKED|IO_UNIT,
                     p->p_ucred, NULL, NULL);                      p->p_cred, NULL, NULL);
                 if (error) {                  if (error) {
                         printf("ffs_snapshot_mount: read_1 failed %d\n", error);                          printf("ffs_snapshot_mount: read_1 failed %d\n", error);
                         snaplistsize = 1;                          snaplistsize = 1;
Line 1707  ffs_snapshot_mount(struct mount *mp)
Line 1708  ffs_snapshot_mount(struct mount *mp)
                             snaplistsize * sizeof(ufs2_daddr_t),                              snaplistsize * sizeof(ufs2_daddr_t),
                             lblktosize(fs, howmany(fs->fs_size, fs->fs_frag)),                              lblktosize(fs, howmany(fs->fs_size, fs->fs_frag)),
                             UIO_SYSSPACE, IO_NODELOCKED|IO_UNIT,                              UIO_SYSSPACE, IO_NODELOCKED|IO_UNIT,
                             p->p_ucred, NULL, NULL);                              p->p_cred, NULL, NULL);
                         for (i = 0; i < snaplistsize; i++)                          for (i = 0; i < snaplistsize; i++)
                                 snapblklist[i] = ufs_rw64(snapblklist[i], ns);                                  snapblklist[i] = ufs_rw64(snapblklist[i], ns);
                         if (error) {                          if (error) {

Legend:
Removed from v.1.24  
changed lines
  Added in v.1.24.8.1

CVSweb <webmaster@jp.NetBSD.org>