Author: avg
Date: Fri Aug 23 17:03:43 2013
New Revision: 254718
URL: http://svnweb.freebsd.org/changeset/base/254718

Log:
  MFC r212966: Modify devfs_fqpn() for future use in devfs path reference
  counting code
  
  This should fix build failure introduced in r254708.
  
  Pointyhat to: avg
  MFC slacker:  jh

Modified:
  stable/8/sys/fs/devfs/devfs.h
  stable/8/sys/fs/devfs/devfs_vnops.c
Directory Properties:
  stable/8/sys/   (props changed)
  stable/8/sys/fs/   (props changed)

Modified: stable/8/sys/fs/devfs/devfs.h
==============================================================================
--- stable/8/sys/fs/devfs/devfs.h       Fri Aug 23 16:54:38 2013        
(r254717)
+++ stable/8/sys/fs/devfs/devfs.h       Fri Aug 23 17:03:43 2013        
(r254718)
@@ -122,6 +122,8 @@ struct devfs_rule {
 MALLOC_DECLARE(M_DEVFS);
 #endif
 
+struct componentname;
+
 struct devfs_dirent {
        struct cdev_priv        *de_cdp;
        int                     de_inode;
@@ -176,6 +178,8 @@ void devfs_ruleset_set(devfs_rsnum rsnum
 void devfs_ruleset_apply(struct devfs_mount *dm);
 int devfs_allocv(struct devfs_dirent *de, struct mount *mp, int lockmode,
     struct vnode **vpp);
+char *devfs_fqpn(char *, struct devfs_mount *, struct devfs_dirent *,
+    struct componentname *);
 void devfs_delete(struct devfs_mount *dm, struct devfs_dirent *de, int 
vp_locked);
 void devfs_dirent_free(struct devfs_dirent *de);
 void devfs_populate (struct devfs_mount *dm);

Modified: stable/8/sys/fs/devfs/devfs_vnops.c
==============================================================================
--- stable/8/sys/fs/devfs/devfs_vnops.c Fri Aug 23 16:54:38 2013        
(r254717)
+++ stable/8/sys/fs/devfs/devfs_vnops.c Fri Aug 23 17:03:43 2013        
(r254718)
@@ -253,29 +253,34 @@ finished:
 }
 
 /*
- * Construct the fully qualified path name relative to the mountpoint
+ * Construct the fully qualified path name relative to the mountpoint.
+ * If a NULL cnp is provided, no '/' is appended to the resulting path.
  */
-static char *
-devfs_fqpn(char *buf, struct vnode *dvp, struct componentname *cnp)
+char *
+devfs_fqpn(char *buf, struct devfs_mount *dmp, struct devfs_dirent *dd,
+    struct componentname *cnp)
 {
        int i;
-       struct devfs_dirent *de, *dd;
-       struct devfs_mount *dmp;
+       struct devfs_dirent *de;
+
+       sx_assert(&dmp->dm_lock, SA_LOCKED);
 
-       dmp = VFSTODEVFS(dvp->v_mount);
-       dd = dvp->v_data;
        i = SPECNAMELEN;
        buf[i] = '\0';
-       i -= cnp->cn_namelen;
+       if (cnp != NULL)
+               i -= cnp->cn_namelen;
        if (i < 0)
                 return (NULL);
-       bcopy(cnp->cn_nameptr, buf + i, cnp->cn_namelen);
+       if (cnp != NULL)
+               bcopy(cnp->cn_nameptr, buf + i, cnp->cn_namelen);
        de = dd;
        while (de != dmp->dm_rootdir) {
-               i--;
-               if (i < 0)
-                        return (NULL);
-               buf[i] = '/';
+               if (cnp != NULL || i < SPECNAMELEN) {
+                       i--;
+                       if (i < 0)
+                                return (NULL);
+                       buf[i] = '/';
+               }
                i -= de->de_dirent->d_namlen;
                if (i < 0)
                         return (NULL);
@@ -838,7 +843,7 @@ devfs_lookupx(struct vop_lookup_args *ap
                 * OK, we didn't have an entry for the name we were asked for
                 * so we try to see if anybody can create it on demand.
                 */
-               pname = devfs_fqpn(specname, dvp, cnp);
+               pname = devfs_fqpn(specname, dmp, dd, cnp);
                if (pname == NULL)
                        break;
 
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to