VirtualBox

Changeset 38166 in vbox for trunk/src


Ignore:
Timestamp:
Jul 25, 2011 4:36:08 PM (13 years ago)
Author:
vboxsync
Message:

Additions/solaris/SharedFolders: read-only mmap bits.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/solaris/SharedFolders/vboxfs_vnode.c

    r37839 r38166  
    213213                VFS_HOLD(vp->v_vfsp);
    214214                vn_setops(vp, sffs_ops);
    215                 vp->v_flag = VNOMAP | VNOSWAP;
     215                vp->v_flag = VNOSWAP | VNOMAP;  /* @todo -XXX- remove VNOMAP when ro-mmap is working*/
    216216                vn_exists(vp);
    217217                vp->v_data = node;
     
    14871487 * the file data into it.
    14881488 */
    1489 static int
     1489int
    14901490sffs_readpages(
    14911491        vnode_t         *dvp,
     
    15091509        ASSERT(node->sf_file);
    15101510
     1511        cmn_err(CE_NOTE, "sffs_readpages\n");
    15111512        if (pagelistsize == PAGESIZE)
    15121513        {
     
    15141515                io_len = PAGESIZE;
    15151516
     1517                cmn_err(CE_NOTE, "sffs_readpages io_off=%lld io_len=%lld\n", (u_longlong_t)io_off, (u_longlong_t)io_len);
     1518
    15161519                ppages = page_create_va(dvp, io_off, io_len, PG_WAIT | PG_EXCL, segp, addr);
    15171520        }
     
    15221525        if (!ppages)
    15231526        {
     1527                cmn_err(CE_NOTE, "sffs_readpages nothing done\n");
    15241528                *pagelist = NULL;
    15251529                return (0);
     
    15351539                ASSERT3U(io_off, ==, pcur->p_offset);
    15361540
     1541                cmn_err(CE_NOTE, "sffs_readpages page-by-page reading io_off=%lld\n", (u_longlong_t)io_off);
    15371542                caddr_t virtaddr = sffs_page_map(pcur, segaccess);
    15381543                uint32_t bytes = PAGESIZE;
     
    15541559        pvn_plist_init(ppages, pagelist, pagelistsize, off, io_len, segaccess);
    15551560        ASSERT(pagelist == NULL || (*pagelist)->p_offset == off);
     1561        cmn_err(CE_NOTE, "sffs_readpages done\n");
     1562
    15561563        return (0);
    15571564}
     
    15781585        int error = 0;
    15791586        page_t **pageliststart = pagelist;
     1587        sfnode_t *node = VN2SFN(dvp);
     1588        ASSERT(node);
     1589        ASSERT(node->sf_file);
    15801590
    15811591        if (segaccess == S_WRITE)
    15821592                return (ENOSYS);        /* Will this ever happen? */
    15831593
    1584         if (protp)
    1585                 *protp = PROT_ALL;
    1586 
    1587         /* We don't really support async ops, pretend success. */
     1594        /* Don't bother about faultahead for now. */
    15881595        if (pagelist == NULL)
    15891596                return (0);
     
    15951602        ASSERT(pagelistsize >= len);
    15961603
     1604        if (protp)
     1605                *protp = PROT_ALL;
     1606
    15971607        mutex_enter(&sffs_lock);
     1608
     1609        /* Don't map pages past end of the file. */
     1610        if (off + len > node->sf_stat.sf_size + PAGEOFFSET)
     1611        {
     1612                mutex_exit(&sffs_lock);
     1613                return (EFAULT);
     1614        }
    15981615
    15991616        while (len > 0)
     
    16141631                }
    16151632
     1633                cmn_err(CE_NOTE, "sffs_getpage addr=%p len=%lld off=%lld\n", addr, (u_longlong_t)len, (u_longlong_t)off);
    16161634                while (*pagelist)
    16171635                {
     
    16291647                        pagelist++;
    16301648                }
    1631 
    1632                 /*
    1633                  * Fill the page list array with any pages left in the cache.
    1634                  */
    1635                 while (pagelistsize > 0)
    1636                 {
    1637                         if ((*pagelist++ = page_lookup_nowait(dvp, off, SE_SHARED)) != NULL)
    1638                         {
    1639                                 off += PAGESIZE;
    1640                                 pagelistsize -= PAGESIZE;
    1641                         }
    1642                         else
    1643                                 break;
    1644                 }
     1649        }
     1650
     1651        /*
     1652         * Fill the page list array with any pages left in the cache.
     1653         */
     1654        while (   pagelistsize > 0
     1655                   && (*pagelist++ = page_lookup_nowait(dvp, off, SE_SHARED)))
     1656        {
     1657                off += PAGESIZE;
     1658                pagelistsize -= PAGESIZE;
    16451659        }
    16461660
    16471661        *pagelist = NULL;
    16481662        mutex_exit(&sffs_lock);
     1663        cmn_err(CE_NOTE,  "sffs_getpage done\n");
    16491664        return (error);
    16501665}
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette