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

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

index c108c0978fc52da84de73e0bc340d85c6e9e35c7..7450ac3f07fb656977123195fbc1f6b1695fc8f9 100644 (file)
@@ -207,6 +207,17 @@ typedef struct {
 } mess_fs_vfs_getdents;
 _ASSERT_MSG_SIZE(mess_fs_vfs_getdents);
 
+typedef struct {
+       ino_t inode;
+       ino_t dir_ino;
+
+       cp_grant_id_t grant;
+       size_t path_len;
+
+       uint8_t data[32];
+} mess_vfs_fs_link;
+_ASSERT_MSG_SIZE(mess_vfs_fs_link);
+
 typedef struct {
        ino_t dir_ino;
        ino_t root_ino;
@@ -441,6 +452,7 @@ typedef struct {
        mess_vfs_fs_ftrunc m_vfs_fs_ftrunc;
        mess_vfs_fs_getdents m_vfs_fs_getdents;
        mess_fs_vfs_getdents m_fs_vfs_getdents;
+       mess_vfs_fs_link m_vfs_fs_link;
        mess_vfs_fs_lookup m_vfs_fs_lookup;
        mess_fs_vfs_lookup m_fs_vfs_lookup;
        mess_vfs_fs_mountpoint m_vfs_fs_mountpoint;
index 6ec60cb98d8da8c38e1b91c3697de4bcd260b099..595cc10895dbee74e422caef455f9ad144d033bd 100644 (file)
@@ -85,16 +85,16 @@ int fs_link(void)
        return(OK);
 
   /* Copy the link name's last component */
-  len = fs_m_in.REQ_PATH_LEN;
+  len = fs_m_in.m_vfs_fs_link.path_len;
   if (len > NAME_MAX + 1)
         return(ENAMETOOLONG);
 
-  r = sys_safecopyfrom(VFS_PROC_NR, (cp_grant_id_t) fs_m_in.REQ_GRANT, 0,
+  r = sys_safecopyfrom(VFS_PROC_NR, fs_m_in.m_vfs_fs_link.grant, 0,
                        (vir_bytes) string, (size_t) len);
   if (r != OK) return(r);
   NUL(string, len, sizeof(string));
 
-  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_link.inode)) == NULL)
        return(EINVAL);
 
   /* Check to see if the file has maximum number of links already. */
@@ -105,7 +105,7 @@ int fs_link(void)
   if ((pn->pn_va.va_mode & I_TYPE) == I_DIRECTORY && caller_uid != SU_UID)
        return(EPERM);
 
-  if ((pn_dir = puffs_pn_nodewalk(global_pu, 0, &fs_m_in.REQ_DIR_INO)) == NULL)
+  if ((pn_dir = puffs_pn_nodewalk(global_pu, 0, &fs_m_in.m_vfs_fs_link.dir_ino)) == NULL)
         return(EINVAL);
 
   if (pn_dir->pn_va.va_nlink == NO_LINK) {
index 51b04e98b0553976995fbe9ec20074b30bb95fbf..51371c2de0980ea49ade2ceb7a57288da38a0615 100644 (file)
@@ -42,17 +42,17 @@ int fs_link()
   phys_bytes len;
 
   /* Copy the link name's last component */
-  len = fs_m_in.REQ_PATH_LEN; /* including trailing '\0' */
+  len = fs_m_in.m_vfs_fs_link.path_len; /* including trailing '\0' */
   if (len > NAME_MAX + 1 || len > EXT2_NAME_MAX + 1)
        return(ENAMETOOLONG);
 
-  r = sys_safecopyfrom(VFS_PROC_NR, (cp_grant_id_t) fs_m_in.REQ_GRANT, 0,
+  r = sys_safecopyfrom(VFS_PROC_NR, fs_m_in.m_vfs_fs_link.grant, 0,
                       (vir_bytes) string, (size_t) len);
   if (r != OK) return r;
   NUL(string, len, sizeof(string));
 
   /* Temporarily open the file. */
-  if( (rip = get_inode(fs_dev, fs_m_in.REQ_INODE_NR)) == NULL)
+  if( (rip = get_inode(fs_dev, fs_m_in.m_vfs_fs_link.inode)) == NULL)
          return(EINVAL);
 
   /* Check to see if the file has maximum number of links already. */
@@ -74,7 +74,7 @@ int fs_link()
   }
 
   /* Temporarily open the last dir */
-  if( (ip = get_inode(fs_dev, fs_m_in.REQ_DIR_INO)) == NULL) {
+  if( (ip = get_inode(fs_dev, fs_m_in.m_vfs_fs_link.dir_ino)) == NULL) {
        put_inode(rip);
        return(EINVAL);
   }
index 6d420f3c8e0e5590153cdec2605ca512718be0dd..524196c68564025475c2bbd0fc02661cb37e06af 100644 (file)
@@ -39,15 +39,15 @@ int fs_link()
   struct inode *new_ip;
   phys_bytes len;
 
-  len = min( (unsigned) fs_m_in.REQ_PATH_LEN, sizeof(string));
+  len = min(fs_m_in.m_vfs_fs_link.path_len, sizeof(string));
   /* Copy the link name's last component */
-  r = sys_safecopyfrom(VFS_PROC_NR, (cp_grant_id_t) fs_m_in.REQ_GRANT,
+  r = sys_safecopyfrom(VFS_PROC_NR, fs_m_in.m_vfs_fs_link.grant,
                       (vir_bytes) 0, (vir_bytes) string, (size_t) len);
   if (r != OK) return r;
   NUL(string, len, sizeof(string));
   
   /* 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_link.inode)) == NULL)
          return(EINVAL);
   
   /* Check to see if the file has maximum number of links already. */
@@ -67,7 +67,7 @@ int fs_link()
   }
 
   /* Temporarily open the last dir */
-  if( (ip = get_inode(fs_dev, (pino_t) fs_m_in.REQ_DIR_INO)) == NULL) {
+  if( (ip = get_inode(fs_dev, fs_m_in.m_vfs_fs_link.dir_ino)) == NULL) {
        put_inode(rip);
        return(EINVAL);
   }
index 01f7819b805316a8c38dd1bfe5fca2e388dc553d..99264760a3edb49db5db0c2b76cb2fd98d2e026f 100644 (file)
@@ -401,10 +401,10 @@ int req_link(
 
   /* Fill in request message */
   m.m_type = REQ_LINK;
-  m.REQ_INODE_NR = (pino_t) linked_file;
-  m.REQ_DIR_INO = (pino_t) link_parent;
-  m.REQ_GRANT = grant_id;
-  m.REQ_PATH_LEN = len;
+  m.m_vfs_fs_link.inode = linked_file;
+  m.m_vfs_fs_link.dir_ino = link_parent;
+  m.m_vfs_fs_link.grant = grant_id;
+  m.m_vfs_fs_link.path_len = len;
 
   /* Send/rec request */
   r = fs_sendrec(fs_e, &m);