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; | } mess_sigcalls; | ||||||
| _ASSERT_MSG_SIZE(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 { | typedef struct { | ||||||
| 	ino_t inode; | 	ino_t inode; | ||||||
| 
 | 
 | ||||||
| @ -547,6 +567,8 @@ typedef struct { | |||||||
| 	mess_sigcalls m_sigcalls; | 	mess_sigcalls m_sigcalls; | ||||||
| 	mess_vfs_fs_newnode m_vfs_fs_newnode; | 	mess_vfs_fs_newnode m_vfs_fs_newnode; | ||||||
| 	mess_fs_vfs_newnode m_fs_vfs_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_vfs_fs_chmod m_vfs_fs_chmod; | ||||||
| 	mess_fs_vfs_chmod m_fs_vfs_chmod; | 	mess_fs_vfs_chmod m_fs_vfs_chmod; | ||||||
| 	mess_vfs_fs_chown m_vfs_fs_chown; | 	mess_vfs_fs_chown m_vfs_fs_chown; | ||||||
|  | |||||||
| @ -936,9 +936,9 @@ int lmfs_rdwt_err(void) | |||||||
| int lmfs_do_bpeek(message *m) | int lmfs_do_bpeek(message *m) | ||||||
| { | { | ||||||
| 	block_t startblock, b, limitblock; | 	block_t startblock, b, limitblock; | ||||||
| 	dev_t dev = m->REQ_DEV; | 	dev_t dev = m->m_vfs_fs_breadwrite.device; | ||||||
| 	off_t extra, pos = m->REQ_SEEK_POS; | 	off_t extra, pos = m->m_vfs_fs_breadwrite.seek_pos; | ||||||
| 	size_t len = m->REQ_NBYTES; | 	size_t len = m->m_vfs_fs_breadwrite.nbytes; | ||||||
| 	struct buf *bp; | 	struct buf *bp; | ||||||
| 
 | 
 | ||||||
| 	assert(m->m_type == REQ_BPEEK); | 	assert(m->m_type == REQ_BPEEK); | ||||||
|  | |||||||
| @ -159,13 +159,13 @@ int fs_breadwrite(void) | |||||||
| 
 | 
 | ||||||
|   /* Get the values from the request message */ |   /* Get the values from the request message */ | ||||||
|   rw_flag = (fs_m_in.m_type == REQ_BREAD ? READING : WRITING); |   rw_flag = (fs_m_in.m_type == REQ_BREAD ? READING : WRITING); | ||||||
|   gid = (cp_grant_id_t) fs_m_in.REQ_GRANT; |   gid = fs_m_in.m_vfs_fs_breadwrite.grant; | ||||||
|   position = fs_m_in.REQ_SEEK_POS; |   position = fs_m_in.m_vfs_fs_breadwrite.seek_pos; | ||||||
|   nrbytes = (size_t) fs_m_in.REQ_NBYTES; |   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_mode = I_BLOCK_SPECIAL; | ||||||
|   rip.i_size = 0; |   rip.i_size = 0; | ||||||
| 
 | 
 | ||||||
| @ -190,12 +190,12 @@ int fs_breadwrite(void) | |||||||
| 	  position += chunk;	/* position within the file */ | 	  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 != OK) r = rdwt_err;     /* check for disk error */ | ||||||
|   if (rdwt_err == END_OF_FILE) r = OK; |   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); |   return(r); | ||||||
| } | } | ||||||
|  | |||||||
| @ -95,9 +95,9 @@ int fs_bread(void) | |||||||
|   r = OK; |   r = OK; | ||||||
|    |    | ||||||
|   rw_flag = (fs_m_in.m_type == REQ_BREAD ? READING : WRITING); |   rw_flag = (fs_m_in.m_type == REQ_BREAD ? READING : WRITING); | ||||||
|   gid = fs_m_in.REQ_GRANT; |   gid = fs_m_in.m_vfs_fs_breadwrite.grant; | ||||||
|   position = fs_m_in.REQ_SEEK_POS; |   position = fs_m_in.m_vfs_fs_breadwrite.seek_pos; | ||||||
|   nrbytes = (unsigned) fs_m_in.REQ_NBYTES; |   nrbytes = fs_m_in.m_vfs_fs_breadwrite.nbytes; | ||||||
|   block_size = v_pri.logical_block_size_l; |   block_size = v_pri.logical_block_size_l; | ||||||
|   dir = v_pri.dir_rec_root; |   dir = v_pri.dir_rec_root; | ||||||
| 
 | 
 | ||||||
| @ -125,12 +125,12 @@ int fs_bread(void) | |||||||
|     position += chunk;	/* position within the file */ |     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 != OK) r = rdwt_err;	/* check for disk error */ | ||||||
|   if (rdwt_err == END_OF_FILE) r = OK; |   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); |   return(r); | ||||||
| } | } | ||||||
|  | |||||||
| @ -160,13 +160,13 @@ int fs_breadwrite(void) | |||||||
|    |    | ||||||
|   r = OK; |   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 */  |   /* Get the values from the request message */  | ||||||
|   rw_flag = (fs_m_in.m_type == REQ_BREAD ? READING : WRITING); |   rw_flag = (fs_m_in.m_type == REQ_BREAD ? READING : WRITING); | ||||||
|   gid = (cp_grant_id_t) fs_m_in.REQ_GRANT; |   gid = fs_m_in.m_vfs_fs_breadwrite.grant; | ||||||
|   position = fs_m_in.REQ_SEEK_POS; |   position = fs_m_in.m_vfs_fs_breadwrite.seek_pos; | ||||||
|   nrbytes = (size_t) fs_m_in.REQ_NBYTES; |   nrbytes = fs_m_in.m_vfs_fs_breadwrite.nbytes; | ||||||
|    |    | ||||||
|   block_size = get_block_size(target_dev); |   block_size = get_block_size(target_dev); | ||||||
| 
 | 
 | ||||||
| @ -199,12 +199,12 @@ int fs_breadwrite(void) | |||||||
| 	  position += chunk;	/* position within the file */ | 	  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() != OK) r = lmfs_rdwt_err();	/* check for disk error */ | ||||||
|   if (lmfs_rdwt_err() == END_OF_FILE) r = OK; |   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); |   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 */ |   /* Fill in request message */ | ||||||
|   m.m_type = rw_flag == READING ? REQ_BREAD : REQ_BWRITE; |   m.m_type = rw_flag == READING ? REQ_BREAD : REQ_BWRITE; | ||||||
|   m.REQ_DEV = dev; |   m.m_vfs_fs_breadwrite.device = dev; | ||||||
|   m.REQ_GRANT = grant_id; |   m.m_vfs_fs_breadwrite.grant = grant_id; | ||||||
|   m.REQ_SEEK_POS = pos; |   m.m_vfs_fs_breadwrite.seek_pos = pos; | ||||||
|   m.REQ_NBYTES = num_of_bytes; |   m.m_vfs_fs_breadwrite.nbytes = num_of_bytes; | ||||||
| 
 | 
 | ||||||
|   /* Send/rec request */ |   /* Send/rec request */ | ||||||
|   r = fs_sendrec(fs_e, &m); |   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); |   if (r != OK) return(r); | ||||||
| 
 | 
 | ||||||
|   /* Fill in response structure */ |   /* Fill in response structure */ | ||||||
|   *new_pos = m.RES_SEEK_POS; |   *new_pos = m.m_fs_vfs_breadwrite.seek_pos; | ||||||
|   *cum_iop = m.RES_NBYTES; |   *cum_iop = m.m_fs_vfs_breadwrite.nbytes; | ||||||
| 
 | 
 | ||||||
|   return(OK); |   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 */ |   /* Fill in request message */ | ||||||
|   m.m_type = REQ_BPEEK; |   m.m_type = REQ_BPEEK; | ||||||
|   m.REQ_DEV = dev; |   m.m_vfs_fs_breadwrite.device = dev; | ||||||
|   m.REQ_SEEK_POS = pos; |   m.m_vfs_fs_breadwrite.seek_pos = pos; | ||||||
|   m.REQ_NBYTES = num_of_bytes; |   m.m_vfs_fs_breadwrite.nbytes = num_of_bytes; | ||||||
| 
 | 
 | ||||||
|   /* Send/rec request */ |   /* Send/rec request */ | ||||||
|   return fs_sendrec(fs_e, &m); |   return fs_sendrec(fs_e, &m); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Lionel Sambuc
						Lionel Sambuc