]> Zhao Yanbai Git Server - minix.git/commitdiff
Message types for VFS unlink & rmdir
authorLionel Sambuc <lionel@minix3.org>
Thu, 1 May 2014 08:06:10 +0000 (10:06 +0200)
committerLionel Sambuc <lionel@minix3.org>
Mon, 28 Jul 2014 15:05:28 +0000 (17:05 +0200)
These two request are handled by the same function in some FSes, which
prevents us from using two different kinds of messages.

Change-Id: Iede3a0251d8d84ca7f121c56f30f42b045b0c737

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

index 68310235b7725ea83b0b4bc5f9e2cdbdb7f74e0a..609525f05b220fd3f7037abc001a53d3d1f4bd11 100644 (file)
@@ -387,6 +387,16 @@ typedef struct {
 } mess_vfs_fs_stat;
 _ASSERT_MSG_SIZE(mess_vfs_fs_stat);
 
+typedef struct {
+       ino_t inode;
+
+       cp_grant_id_t grant;
+       size_t path_len;
+
+       uint8_t data[40];
+} mess_vfs_fs_unlink;
+_ASSERT_MSG_SIZE(mess_vfs_fs_unlink);
+
 typedef struct {
        ino_t inode;
        time_t actime;
@@ -490,6 +500,7 @@ typedef struct {
        mess_vfs_fs_rename m_vfs_fs_rename;
        mess_vfs_fs_slink m_vfs_fs_slink;
        mess_vfs_fs_stat m_vfs_fs_stat;
+       mess_vfs_fs_unlink m_vfs_fs_unlink;
        mess_vfs_fs_utime m_vfs_fs_utime;
        mess_vfs_utimens m_vfs_utimens;
        mess_vm_vfs_mmap m_vm_vfs_mmap;
index 595cc10895dbee74e422caef455f9ad144d033bd..99740ade2efe753151adc6fdfde24dcb953fa508 100644 (file)
@@ -408,18 +408,18 @@ int fs_unlink(void)
   int len;
 
   /* Copy the last component */
-  len = fs_m_in.REQ_PATH_LEN;
+  len = fs_m_in.m_vfs_fs_unlink.path_len;
   pcn.pcn_namelen = len - 1;
   if (pcn.pcn_namelen > NAME_MAX)
         return(ENAMETOOLONG);
 
-  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_unlink.grant,
                       (vir_bytes) 0, (vir_bytes) pcn.pcn_name,
                       (size_t) len);
   if (r != OK) return (r);
   NUL(pcn.pcn_name, len, sizeof(pcn.pcn_name));
 
-  if ((pn_dir = puffs_pn_nodewalk(global_pu, 0, &fs_m_in.REQ_INODE_NR)) == NULL)
+  if ((pn_dir = puffs_pn_nodewalk(global_pu, 0, &fs_m_in.m_vfs_fs_unlink.inode)) == NULL)
        return(EINVAL);
 
   /* The last directory exists. Does the file also exist? */
index 85285c097345529354a0a6d0fa970b48792d2275..d5d63b32fbe4c3d637bb4da35a3b29dfc0d7fa29 100644 (file)
@@ -245,12 +245,12 @@ int do_unlink(void)
        return EROFS;
 
   /* Get the path string and possibly preexisting inode for the given path. */
-  if ((r = get_name(m_in.REQ_GRANT, m_in.REQ_PATH_LEN, name)) != OK)
+  if ((r = get_name(m_in.m_vfs_fs_unlink.grant, m_in.m_vfs_fs_unlink.path_len, name)) != OK)
        return r;
 
   if (!strcmp(name, ".") || !strcmp(name, "..")) return EPERM;
 
-  if ((parent = find_inode(m_in.REQ_INODE_NR)) == NULL)
+  if ((parent = find_inode(m_in.m_vfs_fs_unlink.inode)) == NULL)
        return EINVAL;
 
   if ((r = verify_dentry(parent, name, path, &ino)) != OK)
@@ -292,13 +292,13 @@ int do_rmdir(void)
        return EROFS;
 
   /* Get the path string and possibly preexisting inode for the given path. */
-  if ((r = get_name(m_in.REQ_GRANT, m_in.REQ_PATH_LEN, name)) != OK)
+  if ((r = get_name(m_in.m_vfs_fs_unlink.grant, m_in.m_vfs_fs_unlink.path_len, name)) != OK)
        return r;
 
   if (!strcmp(name, ".")) return EINVAL;
   if (!strcmp(name, "..")) return ENOTEMPTY;
 
-  if ((parent = find_inode(m_in.REQ_INODE_NR)) == NULL)
+  if ((parent = find_inode(m_in.m_vfs_fs_unlink.inode)) == NULL)
        return EINVAL;
 
   if ((r = verify_dentry(parent, name, path, &ino)) != OK)
index 51371c2de0980ea49ade2ceb7a57288da38a0615..03d273bcde4c0737fe0323bcac1c93519f1dac14 100644 (file)
@@ -130,17 +130,17 @@ int fs_unlink()
   phys_bytes len;
 
   /* Copy the last component */
-  len = fs_m_in.REQ_PATH_LEN; /* including trailing '\0' */
+  len = fs_m_in.m_vfs_fs_unlink.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,
+  r = sys_safecopyfrom(VFS_PROC_NR, fs_m_in.m_vfs_fs_unlink.grant,
                        (vir_bytes) 0, (vir_bytes) string, (size_t) len);
   if (r != OK) return r;
   NUL(string, len, sizeof(string));
 
   /* Temporarily open the dir. */
-  if( (rldirp = get_inode(fs_dev, (pino_t) fs_m_in.REQ_INODE_NR)) == NULL)
+  if((rldirp = get_inode(fs_dev, fs_m_in.m_vfs_fs_unlink.inode)) == NULL)
          return(EINVAL);
 
   /* The last directory exists.  Does the file also exist? */
index 524196c68564025475c2bbd0fc02661cb37e06af..32358485dd1df1658feb30ff4ab40eb4259d3cd4 100644 (file)
@@ -122,14 +122,14 @@ int fs_unlink()
   phys_bytes len;
   
   /* Copy the last component */
-  len = min( (unsigned) fs_m_in.REQ_PATH_LEN, sizeof(string));
-  r = sys_safecopyfrom(VFS_PROC_NR, (cp_grant_id_t) fs_m_in.REQ_GRANT,
+  len = min(fs_m_in.m_vfs_fs_unlink.path_len, sizeof(string));
+  r = sys_safecopyfrom(VFS_PROC_NR, fs_m_in.m_vfs_fs_unlink.grant,
                       (vir_bytes) 0, (vir_bytes) string, (size_t) len);
   if (r != OK) return r;
   NUL(string, len, sizeof(string));
   
   /* Temporarily open the dir. */
-  if( (rldirp = get_inode(fs_dev, (pino_t) fs_m_in.REQ_INODE_NR)) == NULL)
+  if((rldirp = get_inode(fs_dev, fs_m_in.m_vfs_fs_unlink.inode)) == NULL)
          return(EINVAL);
   
   /* The last directory exists.  Does the file also exist? */
index 8fbbe647914eb7d31268d2a55bda8c9fd5c35a67..b209e2f522c0bd9905c9ad4f8ed9bb7b1aea7158 100644 (file)
@@ -978,9 +978,9 @@ char *lastc;
 
   /* Fill in request message */
   m.m_type = REQ_RMDIR;
-  m.REQ_INODE_NR = (pino_t) inode_nr;
-  m.REQ_GRANT = grant_id;
-  m.REQ_PATH_LEN = len;
+  m.m_vfs_fs_unlink.inode = inode_nr;
+  m.m_vfs_fs_unlink.grant = grant_id;
+  m.m_vfs_fs_unlink.path_len = len;
 
   /* Send/rec request */
   r = fs_sendrec(fs_e, &m);
@@ -1161,9 +1161,9 @@ char *lastc;
 
   /* Fill in request message */
   m.m_type = REQ_UNLINK;
-  m.REQ_INODE_NR = (pino_t) inode_nr;
-  m.REQ_GRANT = grant_id;
-  m.REQ_PATH_LEN = len;
+  m.m_vfs_fs_unlink.inode = inode_nr;
+  m.m_vfs_fs_unlink.grant = grant_id;
+  m.m_vfs_fs_unlink.path_len = len;
 
   /* Send/rec request */
   r = fs_sendrec(fs_e, &m);