devfs_vnops.c (208717) | devfs_vnops.c (208951) |
---|---|
1/*- 2 * Copyright (c) 2000-2004 3 * Poul-Henning Kamp. All rights reserved. 4 * Copyright (c) 1989, 1992-1993, 1995 5 * The Regents of the University of California. All rights reserved. 6 * 7 * This code is derived from software donated to Berkeley by 8 * Jan-Simon Pendry. --- 17 unchanged lines hidden (view full) --- 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 * 31 * @(#)kernfs_vnops.c 8.15 (Berkeley) 5/21/95 32 * From: FreeBSD: src/sys/miscfs/kernfs/kernfs_vnops.c 1.43 33 * | 1/*- 2 * Copyright (c) 2000-2004 3 * Poul-Henning Kamp. All rights reserved. 4 * Copyright (c) 1989, 1992-1993, 1995 5 * The Regents of the University of California. All rights reserved. 6 * 7 * This code is derived from software donated to Berkeley by 8 * Jan-Simon Pendry. --- 17 unchanged lines hidden (view full) --- 26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 29 * SUCH DAMAGE. 30 * 31 * @(#)kernfs_vnops.c 8.15 (Berkeley) 5/21/95 32 * From: FreeBSD: src/sys/miscfs/kernfs/kernfs_vnops.c 1.43 33 * |
34 * $FreeBSD: head/sys/fs/devfs/devfs_vnops.c 208717 2010-06-01 18:57:21Z jh $ | 34 * $FreeBSD: head/sys/fs/devfs/devfs_vnops.c 208951 2010-06-09 15:29:12Z jh $ |
35 */ 36 37/* 38 * TODO: 39 * remove empty directories 40 * mkdir: want it ? 41 */ 42 --- 182 unchanged lines hidden (view full) --- 225 bcopy(dd->de_dirent->d_name, buf + i, 226 dd->de_dirent->d_namlen); 227 de = dd; 228 } else { 229 error = ENOENT; 230 goto finished; 231 } 232 *buflen = i; | 35 */ 36 37/* 38 * TODO: 39 * remove empty directories 40 * mkdir: want it ? 41 */ 42 --- 182 unchanged lines hidden (view full) --- 225 bcopy(dd->de_dirent->d_name, buf + i, 226 dd->de_dirent->d_namlen); 227 de = dd; 228 } else { 229 error = ENOENT; 230 goto finished; 231 } 232 *buflen = i; |
233 de = TAILQ_FIRST(&de->de_dlist); /* "." */ 234 de = TAILQ_NEXT(de, de_list); /* ".." */ 235 de = de->de_dir; | 233 de = devfs_parent_dirent(de); 234 if (de == NULL) { 235 error = ENOENT; 236 goto finished; 237 } |
236 mtx_lock(&devfs_de_interlock); 237 *dvp = de->de_vnode; 238 if (*dvp != NULL) { 239 VI_LOCK(*dvp); 240 mtx_unlock(&devfs_de_interlock); 241 vholdl(*dvp); 242 VI_UNLOCK(*dvp); 243 } else { --- 29 unchanged lines hidden (view full) --- 273 if (i < 0) 274 return (NULL); 275 buf[i] = '/'; 276 i -= de->de_dirent->d_namlen; 277 if (i < 0) 278 return (NULL); 279 bcopy(de->de_dirent->d_name, buf + i, 280 de->de_dirent->d_namlen); | 238 mtx_lock(&devfs_de_interlock); 239 *dvp = de->de_vnode; 240 if (*dvp != NULL) { 241 VI_LOCK(*dvp); 242 mtx_unlock(&devfs_de_interlock); 243 vholdl(*dvp); 244 VI_UNLOCK(*dvp); 245 } else { --- 29 unchanged lines hidden (view full) --- 275 if (i < 0) 276 return (NULL); 277 buf[i] = '/'; 278 i -= de->de_dirent->d_namlen; 279 if (i < 0) 280 return (NULL); 281 bcopy(de->de_dirent->d_name, buf + i, 282 de->de_dirent->d_namlen); |
281 de = TAILQ_FIRST(&de->de_dlist); /* "." */ 282 de = TAILQ_NEXT(de, de_list); /* ".." */ 283 de = de->de_dir; | 283 de = devfs_parent_dirent(de); 284 if (de == NULL) 285 return (NULL); |
284 } 285 return (buf + i); 286} 287 288static int 289devfs_allocv_drop_refs(int drop_dm_lock, struct devfs_mount *dmp, 290 struct devfs_dirent *de) 291{ --- 492 unchanged lines hidden (view full) --- 784 *vpp = dvp; 785 VREF(dvp); 786 return (0); 787 } 788 789 if (flags & ISDOTDOT) { 790 if ((flags & ISLASTCN) && nameiop != LOOKUP) 791 return (EINVAL); | 286 } 287 return (buf + i); 288} 289 290static int 291devfs_allocv_drop_refs(int drop_dm_lock, struct devfs_mount *dmp, 292 struct devfs_dirent *de) 293{ --- 492 unchanged lines hidden (view full) --- 786 *vpp = dvp; 787 VREF(dvp); 788 return (0); 789 } 790 791 if (flags & ISDOTDOT) { 792 if ((flags & ISLASTCN) && nameiop != LOOKUP) 793 return (EINVAL); |
794 de = devfs_parent_dirent(dd); 795 if (de == NULL) 796 return (ENOENT); |
|
792 VOP_UNLOCK(dvp, 0); | 797 VOP_UNLOCK(dvp, 0); |
793 de = TAILQ_FIRST(&dd->de_dlist); /* "." */ 794 de = TAILQ_NEXT(de, de_list); /* ".." */ 795 de = de->de_dir; | |
796 error = devfs_allocv(de, dvp->v_mount, vpp); 797 *dm_unlock = 0; 798 vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY); 799 return (error); 800 } 801 802 DEVFS_DMP_HOLD(dmp); 803 devfs_populate(dmp); --- 826 unchanged lines hidden --- | 798 error = devfs_allocv(de, dvp->v_mount, vpp); 799 *dm_unlock = 0; 800 vn_lock(dvp, LK_EXCLUSIVE | LK_RETRY); 801 return (error); 802 } 803 804 DEVFS_DMP_HOLD(dmp); 805 devfs_populate(dmp); --- 826 unchanged lines hidden --- |