Message types for VFS bread, bwrite & bpeek
These two request are handled by the same function in some FSes, which prevents us from using two different kinds of messages. Change-Id: Ib2fc80bdd56ef67db6b4c51cf8963353a761aab1
This commit is contained in:
		
							parent
							
								
									a65bf37e3b
								
							
						
					
					
						commit
						27baf1f58a
					
				| @ -146,6 +146,26 @@ typedef struct { | ||||
| } mess_sigcalls; | ||||
| _ASSERT_MSG_SIZE(mess_sigcalls); | ||||
| 
 | ||||
| typedef struct { | ||||
| 	dev_t device; | ||||
| 	off_t seek_pos; | ||||
| 
 | ||||
| 	cp_grant_id_t grant; | ||||
| 	size_t nbytes; | ||||
| 
 | ||||
| 	uint8_t data[32]; | ||||
| } mess_vfs_fs_breadwrite; | ||||
| _ASSERT_MSG_SIZE(mess_vfs_fs_breadwrite); | ||||
| 
 | ||||
| typedef struct { | ||||
| 	off_t seek_pos; | ||||
| 
 | ||||
| 	size_t nbytes; | ||||
| 
 | ||||
| 	uint8_t data[44]; | ||||
| } mess_fs_vfs_breadwrite; | ||||
| _ASSERT_MSG_SIZE(mess_fs_vfs_breadwrite); | ||||
| 
 | ||||
| typedef struct { | ||||
| 	ino_t inode; | ||||
| 
 | ||||
| @ -547,6 +567,8 @@ typedef struct { | ||||
| 	mess_sigcalls m_sigcalls; | ||||
| 	mess_vfs_fs_newnode m_vfs_fs_newnode; | ||||
| 	mess_fs_vfs_newnode m_fs_vfs_newnode; | ||||
| 	mess_vfs_fs_breadwrite m_vfs_fs_breadwrite; | ||||
| 	mess_fs_vfs_breadwrite m_fs_vfs_breadwrite; | ||||
| 	mess_vfs_fs_chmod m_vfs_fs_chmod; | ||||
| 	mess_fs_vfs_chmod m_fs_vfs_chmod; | ||||
| 	mess_vfs_fs_chown m_vfs_fs_chown; | ||||
|  | ||||
| @ -936,9 +936,9 @@ int lmfs_rdwt_err(void) | ||||
| int lmfs_do_bpeek(message *m) | ||||
| { | ||||
| 	block_t startblock, b, limitblock; | ||||
| 	dev_t dev = m->REQ_DEV; | ||||
| 	off_t extra, pos = m->REQ_SEEK_POS; | ||||
| 	size_t len = m->REQ_NBYTES; | ||||
| 	dev_t dev = m->m_vfs_fs_breadwrite.device; | ||||
| 	off_t extra, pos = m->m_vfs_fs_breadwrite.seek_pos; | ||||
| 	size_t len = m->m_vfs_fs_breadwrite.nbytes; | ||||
| 	struct buf *bp; | ||||
| 
 | ||||
| 	assert(m->m_type == REQ_BPEEK); | ||||
|  | ||||
| @ -159,13 +159,13 @@ int fs_breadwrite(void) | ||||
| 
 | ||||
|   /* Get the values from the request message */ | ||||
|   rw_flag = (fs_m_in.m_type == REQ_BREAD ? READING : WRITING); | ||||
|   gid = (cp_grant_id_t) fs_m_in.REQ_GRANT; | ||||
|   position = fs_m_in.REQ_SEEK_POS; | ||||
|   nrbytes = (size_t) fs_m_in.REQ_NBYTES; | ||||
|   gid = fs_m_in.m_vfs_fs_breadwrite.grant; | ||||
|   position = fs_m_in.m_vfs_fs_breadwrite.seek_pos; | ||||
|   nrbytes = fs_m_in.m_vfs_fs_breadwrite.nbytes; | ||||
| 
 | ||||
|   block_size = get_block_size(fs_m_in.REQ_DEV); | ||||
|   block_size = get_block_size(fs_m_in.m_vfs_fs_breadwrite.device); | ||||
| 
 | ||||
|   rip.i_block[0] = (block_t) fs_m_in.REQ_DEV; | ||||
|   rip.i_block[0] = (block_t) fs_m_in.m_vfs_fs_breadwrite.device; | ||||
|   rip.i_mode = I_BLOCK_SPECIAL; | ||||
|   rip.i_size = 0; | ||||
| 
 | ||||
| @ -190,12 +190,12 @@ int fs_breadwrite(void) | ||||
| 	  position += chunk;	/* position within the file */ | ||||
|   } | ||||
| 
 | ||||
|   fs_m_out.RES_SEEK_POS = position; | ||||
|   fs_m_out.m_fs_vfs_breadwrite.seek_pos = position; | ||||
| 
 | ||||
|   if (rdwt_err != OK) r = rdwt_err;     /* check for disk error */ | ||||
|   if (rdwt_err == END_OF_FILE) r = OK; | ||||
| 
 | ||||
|   fs_m_out.RES_NBYTES = cum_io; | ||||
|   fs_m_out.m_fs_vfs_breadwrite.nbytes = cum_io; | ||||
| 
 | ||||
|   return(r); | ||||
| } | ||||
|  | ||||
| @ -95,9 +95,9 @@ int fs_bread(void) | ||||
|   r = OK; | ||||
|    | ||||
|   rw_flag = (fs_m_in.m_type == REQ_BREAD ? READING : WRITING); | ||||
|   gid = fs_m_in.REQ_GRANT; | ||||
|   position = fs_m_in.REQ_SEEK_POS; | ||||
|   nrbytes = (unsigned) fs_m_in.REQ_NBYTES; | ||||
|   gid = fs_m_in.m_vfs_fs_breadwrite.grant; | ||||
|   position = fs_m_in.m_vfs_fs_breadwrite.seek_pos; | ||||
|   nrbytes = fs_m_in.m_vfs_fs_breadwrite.nbytes; | ||||
|   block_size = v_pri.logical_block_size_l; | ||||
|   dir = v_pri.dir_rec_root; | ||||
| 
 | ||||
| @ -125,12 +125,12 @@ int fs_bread(void) | ||||
|     position += chunk;	/* position within the file */ | ||||
|   } | ||||
|    | ||||
|   fs_m_out.RES_SEEK_POS = position;  | ||||
|   fs_m_out.m_fs_vfs_breadwrite.seek_pos = position; | ||||
|    | ||||
|   if (rdwt_err != OK) r = rdwt_err;	/* check for disk error */ | ||||
|   if (rdwt_err == END_OF_FILE) r = OK; | ||||
| 
 | ||||
|   fs_m_out.RES_NBYTES = cum_io; | ||||
|   fs_m_out.m_fs_vfs_breadwrite.nbytes = cum_io; | ||||
|    | ||||
|   return(r); | ||||
| } | ||||
|  | ||||
| @ -160,13 +160,13 @@ int fs_breadwrite(void) | ||||
|    | ||||
|   r = OK; | ||||
| 
 | ||||
|   target_dev = fs_m_in.REQ_DEV; | ||||
|   target_dev = fs_m_in.m_vfs_fs_breadwrite.device; | ||||
|    | ||||
|   /* Get the values from the request message */  | ||||
|   rw_flag = (fs_m_in.m_type == REQ_BREAD ? READING : WRITING); | ||||
|   gid = (cp_grant_id_t) fs_m_in.REQ_GRANT; | ||||
|   position = fs_m_in.REQ_SEEK_POS; | ||||
|   nrbytes = (size_t) fs_m_in.REQ_NBYTES; | ||||
|   gid = fs_m_in.m_vfs_fs_breadwrite.grant; | ||||
|   position = fs_m_in.m_vfs_fs_breadwrite.seek_pos; | ||||
|   nrbytes = fs_m_in.m_vfs_fs_breadwrite.nbytes; | ||||
|    | ||||
|   block_size = get_block_size(target_dev); | ||||
| 
 | ||||
| @ -199,12 +199,12 @@ int fs_breadwrite(void) | ||||
| 	  position += chunk;	/* position within the file */ | ||||
|   } | ||||
|    | ||||
|   fs_m_out.RES_SEEK_POS = position;  | ||||
|   fs_m_out.m_fs_vfs_breadwrite.seek_pos = position; | ||||
|    | ||||
|   if (lmfs_rdwt_err() != OK) r = lmfs_rdwt_err();	/* check for disk error */ | ||||
|   if (lmfs_rdwt_err() == END_OF_FILE) r = OK; | ||||
| 
 | ||||
|   fs_m_out.RES_NBYTES = cum_io; | ||||
|   fs_m_out.m_fs_vfs_breadwrite.nbytes = cum_io; | ||||
|    | ||||
|   return(r); | ||||
| } | ||||
|  | ||||
| @ -42,10 +42,10 @@ static int req_breadwrite_actual(endpoint_t fs_e, endpoint_t user_e, dev_t dev, | ||||
| 
 | ||||
|   /* Fill in request message */ | ||||
|   m.m_type = rw_flag == READING ? REQ_BREAD : REQ_BWRITE; | ||||
|   m.REQ_DEV = dev; | ||||
|   m.REQ_GRANT = grant_id; | ||||
|   m.REQ_SEEK_POS = pos; | ||||
|   m.REQ_NBYTES = num_of_bytes; | ||||
|   m.m_vfs_fs_breadwrite.device = dev; | ||||
|   m.m_vfs_fs_breadwrite.grant = grant_id; | ||||
|   m.m_vfs_fs_breadwrite.seek_pos = pos; | ||||
|   m.m_vfs_fs_breadwrite.nbytes = num_of_bytes; | ||||
| 
 | ||||
|   /* Send/rec request */ | ||||
|   r = fs_sendrec(fs_e, &m); | ||||
| @ -53,8 +53,8 @@ static int req_breadwrite_actual(endpoint_t fs_e, endpoint_t user_e, dev_t dev, | ||||
|   if (r != OK) return(r); | ||||
| 
 | ||||
|   /* Fill in response structure */ | ||||
|   *new_pos = m.RES_SEEK_POS; | ||||
|   *cum_iop = m.RES_NBYTES; | ||||
|   *new_pos = m.m_fs_vfs_breadwrite.seek_pos; | ||||
|   *cum_iop = m.m_fs_vfs_breadwrite.nbytes; | ||||
| 
 | ||||
|   return(OK); | ||||
| } | ||||
| @ -92,9 +92,9 @@ int req_bpeek(endpoint_t fs_e, dev_t dev, off_t pos, unsigned int num_of_bytes) | ||||
| 
 | ||||
|   /* Fill in request message */ | ||||
|   m.m_type = REQ_BPEEK; | ||||
|   m.REQ_DEV = dev; | ||||
|   m.REQ_SEEK_POS = pos; | ||||
|   m.REQ_NBYTES = num_of_bytes; | ||||
|   m.m_vfs_fs_breadwrite.device = dev; | ||||
|   m.m_vfs_fs_breadwrite.seek_pos = pos; | ||||
|   m.m_vfs_fs_breadwrite.nbytes = num_of_bytes; | ||||
| 
 | ||||
|   /* Send/rec request */ | ||||
|   return fs_sendrec(fs_e, &m); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Lionel Sambuc
						Lionel Sambuc