]> Zhao Yanbai Git Server - minix.git/commitdiff
Message types for VFS rdlink
authorLionel Sambuc <lionel@minix3.org>
Wed, 30 Apr 2014 08:20:16 +0000 (10:20 +0200)
committerLionel Sambuc <lionel@minix3.org>
Mon, 28 Jul 2014 15:05:27 +0000 (17:05 +0200)
Change-Id: Ic077e99fb140a3a1de849f7f761fdfd90961f5d8

include/minix/ipc.h
lib/libpuffs/link.c
lib/libvtreefs/link.c
servers/ext2/link.c
servers/mfs/link.c
servers/vfs/request.c

index c67d1bda0b656a1e795c6ed50b3f6c015e28ed7e..c108c0978fc52da84de73e0bc340d85c6e9e35c7 100644 (file)
@@ -281,6 +281,23 @@ typedef struct {
 } mess_fs_vfs_newnode;
 _ASSERT_MSG_SIZE(mess_fs_vfs_newnode);
 
+typedef struct {
+       ino_t inode;
+
+       cp_grant_id_t grant;
+       size_t mem_size;
+
+       uint8_t data[40];
+} mess_vfs_fs_rdlink;
+_ASSERT_MSG_SIZE(mess_vfs_fs_rdlink);
+
+typedef struct {
+       size_t nbytes;
+
+       uint8_t data[52];
+} mess_fs_vfs_rdlink;
+_ASSERT_MSG_SIZE(mess_fs_vfs_rdlink);
+
 typedef struct {
        dev_t device;
 
@@ -428,6 +445,8 @@ typedef struct {
        mess_fs_vfs_lookup m_fs_vfs_lookup;
        mess_vfs_fs_mountpoint m_vfs_fs_mountpoint;
        mess_vfs_fs_new_driver m_vfs_fs_new_driver;
+       mess_vfs_fs_rdlink m_vfs_fs_rdlink;
+       mess_fs_vfs_rdlink m_fs_vfs_rdlink;
        mess_vfs_fs_readsuper m_vfs_fs_readsuper;
        mess_fs_vfs_readsuper m_fs_vfs_readsuper;
        mess_vfs_fs_rename m_vfs_fs_rename;
index f40c265621ea031e8932de3c70cb83885f8e36fe..6ec60cb98d8da8c38e1b91c3697de4bcd260b099 100644 (file)
@@ -160,12 +160,12 @@ int fs_rdlink(void)
   char path[PATH_MAX];
   PUFFS_MAKECRED(pcr, &global_kcred);
 
-  copylen = (size_t) fs_m_in.REQ_MEM_SIZE < UMAX_FILE_POS ?
-       (size_t) fs_m_in.REQ_MEM_SIZE : UMAX_FILE_POS;
+  copylen = fs_m_in.m_vfs_fs_rdlink.mem_size < UMAX_FILE_POS ?
+       fs_m_in.m_vfs_fs_rdlink.mem_size : UMAX_FILE_POS;
   
   assert(copylen <= PATH_MAX);
 
-  if ((pn = puffs_pn_nodewalk(global_pu, 0, &fs_m_in.REQ_INODE_NR)) == NULL)
+  if ((pn = puffs_pn_nodewalk(global_pu, 0, &fs_m_in.m_vfs_fs_rdlink.inode)) == NULL)
        return(EINVAL);
 
   if (!S_ISLNK(pn->pn_va.va_mode))
@@ -181,10 +181,10 @@ int fs_rdlink(void)
        return(r);
   }
 
-  r = sys_safecopyto(VFS_PROC_NR, (cp_grant_id_t) fs_m_in.REQ_GRANT,
+  r = sys_safecopyto(VFS_PROC_NR, fs_m_in.m_vfs_fs_rdlink.grant,
                  (vir_bytes) 0, (vir_bytes) path, (size_t) copylen);
   if (r == OK)
-         fs_m_out.RES_NBYTES = copylen;
+         fs_m_out.m_fs_vfs_rdlink.nbytes = copylen;
 
   return(r);
 }
index 5835eb0f980f7c156a1b98c9b406ba17bf2bfb43..a1d4d9908fcf07939dadc4ece325ecde4f0ad1ef 100644 (file)
@@ -14,7 +14,7 @@ int fs_rdlink(void)
        size_t len;
        int r;
 
-       if ((node = find_inode(fs_m_in.REQ_INODE_NR)) == NULL)
+       if ((node = find_inode(fs_m_in.m_vfs_fs_rdlink.inode)) == NULL)
                return EINVAL;
 
        /* Call the rdlink hook. */
@@ -28,14 +28,14 @@ int fs_rdlink(void)
        len = strlen(path);
        assert(len > 0 && len < sizeof(path));
 
-       if (len > fs_m_in.REQ_MEM_SIZE)
-               len = fs_m_in.REQ_MEM_SIZE;
+       if (len > fs_m_in.m_vfs_fs_rdlink.mem_size)
+               len = fs_m_in.m_vfs_fs_rdlink.mem_size;
 
        /* Copy out the result. */
-       r = sys_safecopyto(fs_m_in.m_source, fs_m_in.REQ_GRANT, 0,
+       r = sys_safecopyto(fs_m_in.m_source, fs_m_in.m_vfs_fs_rdlink.grant, 0,
                (vir_bytes) path, len);
        if (r != OK) return r;
 
-       fs_m_out.RES_NBYTES = len;
+       fs_m_out.m_fs_vfs_rdlink.nbytes = len;
        return OK;
 }
index b61613e9a576cf6adebb415bb9ad4bbe511d76b2..51b04e98b0553976995fbe9ec20074b30bb95fbf 100644 (file)
@@ -188,10 +188,10 @@ int fs_rdlink()
   register int r;              /* return value */
   size_t copylen;
 
-  copylen = min( (size_t) fs_m_in.REQ_MEM_SIZE, UMAX_FILE_POS);
+  copylen = min(fs_m_in.m_vfs_fs_rdlink.mem_size, UMAX_FILE_POS);
 
   /* Temporarily open the file. */
-  if( (rip = get_inode(fs_dev, (pino_t) fs_m_in.REQ_INODE_NR)) == NULL)
+  if( (rip = get_inode(fs_dev, fs_m_in.m_vfs_fs_rdlink.inode)) == NULL)
          return(EINVAL);
 
   if (rip->i_size >= MAX_FAST_SYMLINK_LENGTH) {
@@ -212,12 +212,12 @@ int fs_rdlink()
   /* We can safely cast to unsigned, because copylen is guaranteed to be
      below max file size */
        copylen = min( copylen, (unsigned) rip->i_size);
-       r = sys_safecopyto(VFS_PROC_NR, (cp_grant_id_t) fs_m_in.REQ_GRANT,
+       r = sys_safecopyto(VFS_PROC_NR, fs_m_in.m_vfs_fs_rdlink.grant,
                           (vir_bytes) 0, (vir_bytes) link_text,
                           (size_t) copylen);
        put_block(bp, DIRECTORY_BLOCK);
        if (r == OK)
-               fs_m_out.RES_NBYTES = copylen;
+               fs_m_out.m_fs_vfs_rdlink.nbytes = copylen;
   }
 
   put_inode(rip);
index 9c25592856c6ead96b3836a87fbb75c92f168cda..6d420f3c8e0e5590153cdec2605ca512718be0dd 100644 (file)
@@ -178,10 +178,10 @@ int fs_rdlink()
   register int r;              /* return value */
   size_t copylen;
   
-  copylen = min( (size_t) fs_m_in.REQ_MEM_SIZE, UMAX_FILE_POS);
+  copylen = min(fs_m_in.m_vfs_fs_rdlink.mem_size, UMAX_FILE_POS);
 
   /* Temporarily open the file. */
-  if( (rip = get_inode(fs_dev, (pino_t) fs_m_in.REQ_INODE_NR)) == NULL)
+  if( (rip = get_inode(fs_dev, fs_m_in.m_vfs_fs_rdlink.inode)) == NULL)
          return(EINVAL);
 
   if(!S_ISLNK(rip->i_mode))
@@ -193,12 +193,12 @@ int fs_rdlink()
        /* We can safely cast to unsigned, because copylen is guaranteed to be
           below max file size */
        copylen = min( copylen, (unsigned) rip->i_size);
-       r = sys_safecopyto(VFS_PROC_NR, (cp_grant_id_t) fs_m_in.REQ_GRANT,
+       r = sys_safecopyto(VFS_PROC_NR, fs_m_in.m_vfs_fs_rdlink.grant,
                           (vir_bytes) 0, (vir_bytes) b_data(bp),
                           (size_t) copylen);
        put_block(bp, DIRECTORY_BLOCK);
        if (r == OK)
-               fs_m_out.RES_NBYTES = copylen;
+               fs_m_out.m_fs_vfs_rdlink.nbytes = copylen;
   }
   
   put_inode(rip);
index 019a7fa409032655eab2acfd67c55bc27e9e7252..01f7819b805316a8c38dd1bfe5fca2e388dc553d 100644 (file)
@@ -731,15 +731,15 @@ static int req_rdlink_actual(endpoint_t fs_e, ino_t inode_nr,
 
   /* Fill in request message */
   m.m_type = REQ_RDLINK;
-  m.REQ_INODE_NR = (pino_t) inode_nr;
-  m.REQ_GRANT = grant_id;
-  m.REQ_MEM_SIZE = len;
+  m.m_vfs_fs_rdlink.inode = inode_nr;
+  m.m_vfs_fs_rdlink.grant = grant_id;
+  m.m_vfs_fs_rdlink.mem_size = len;
 
   /* Send/rec request */
   r = fs_sendrec(fs_e, &m);
   cpf_revoke(grant_id);
 
-  if (r == OK) r = m.RES_NBYTES;
+  if (r == OK) r = m.m_fs_vfs_rdlink.nbytes;
 
   return(r);
 }