Changes in uspace/lib/libc/generic/vfs/vfs.c [28be7fa:1313ee9] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/libc/generic/vfs/vfs.c
r28be7fa r1313ee9 120 120 const char *opts, unsigned int flags) 121 121 { 122 int null_id = -1; 123 char null[DEVMAP_NAME_MAXLEN]; 124 125 if (str_cmp(fqdn, "") == 0) { 126 /* No device specified, create a fresh 127 null/%d device instead */ 128 null_id = devmap_null_create(); 129 130 if (null_id == -1) 131 return ENOMEM; 132 133 snprintf(null, DEVMAP_NAME_MAXLEN, "null/%d", null_id); 134 fqdn = null; 135 } 136 122 int res; 123 ipcarg_t rc; 124 ipcarg_t rc_orig; 125 aid_t req; 137 126 dev_handle_t dev_handle; 138 int res = devmap_device_get_handle(fqdn, &dev_handle, flags); 139 if (res != EOK) { 140 if (null_id != -1) 141 devmap_null_destroy(null_id); 142 127 128 res = devmap_device_get_handle(fqdn, &dev_handle, flags); 129 if (res != EOK) 143 130 return res; 144 }145 131 146 132 size_t mpa_size; 147 133 char *mpa = absolutize(mp, &mpa_size); 148 if (!mpa) { 149 if (null_id != -1) 150 devmap_null_destroy(null_id); 151 152 return ENOMEM; 153 } 154 155 futex_down(&vfs_phone_futex); 156 async_serialize_start(); 157 vfs_connect(); 158 159 ipcarg_t rc_orig; 160 aid_t req = async_send_2(vfs_phone, VFS_IN_MOUNT, dev_handle, flags, NULL); 161 ipcarg_t rc = async_data_write_start(vfs_phone, (void *) mpa, mpa_size); 134 if (!mpa) 135 return ENOMEM; 136 137 futex_down(&vfs_phone_futex); 138 async_serialize_start(); 139 vfs_connect(); 140 141 req = async_send_2(vfs_phone, VFS_IN_MOUNT, dev_handle, flags, NULL); 142 rc = async_data_write_start(vfs_phone, (void *) mpa, mpa_size); 162 143 if (rc != EOK) { 163 144 async_wait_for(req, &rc_orig); … … 165 146 futex_up(&vfs_phone_futex); 166 147 free(mpa); 167 168 if (null_id != -1)169 devmap_null_destroy(null_id);170 171 148 if (rc_orig == EOK) 172 149 return (int) rc; … … 181 158 futex_up(&vfs_phone_futex); 182 159 free(mpa); 183 184 if (null_id != -1) 185 devmap_null_destroy(null_id); 186 187 if (rc_orig == EOK) 188 return (int) rc; 189 else 190 return (int) rc_orig; 191 } 192 160 if (rc_orig == EOK) 161 return (int) rc; 162 else 163 return (int) rc_orig; 164 } 165 193 166 rc = async_data_write_start(vfs_phone, (void *) fs_name, str_size(fs_name)); 194 167 if (rc != EOK) { … … 197 170 futex_up(&vfs_phone_futex); 198 171 free(mpa); 199 200 if (null_id != -1) 201 devmap_null_destroy(null_id); 202 203 if (rc_orig == EOK) 204 return (int) rc; 205 else 206 return (int) rc_orig; 207 } 208 172 if (rc_orig == EOK) 173 return (int) rc; 174 else 175 return (int) rc_orig; 176 } 177 209 178 /* Ask VFS whether it likes fs_name. */ 210 179 rc = async_req_0_0(vfs_phone, IPC_M_PING); … … 214 183 futex_up(&vfs_phone_futex); 215 184 free(mpa); 216 217 if (null_id != -1) 218 devmap_null_destroy(null_id); 219 220 if (rc_orig == EOK) 221 return (int) rc; 222 else 223 return (int) rc_orig; 224 } 225 226 async_wait_for(req, &rc); 227 async_serialize_end(); 228 futex_up(&vfs_phone_futex); 229 free(mpa); 230 231 if ((rc != EOK) && (null_id != -1)) 232 devmap_null_destroy(null_id); 233 234 return (int) rc; 235 } 236 237 int unmount(const char *mp) 238 { 239 ipcarg_t rc; 240 ipcarg_t rc_orig; 241 aid_t req; 242 size_t mpa_size; 243 char *mpa; 244 245 mpa = absolutize(mp, &mpa_size); 246 if (!mpa) 247 return ENOMEM; 248 249 futex_down(&vfs_phone_futex); 250 async_serialize_start(); 251 vfs_connect(); 252 253 req = async_send_0(vfs_phone, VFS_IN_UNMOUNT, NULL); 254 rc = async_data_write_start(vfs_phone, (void *) mpa, mpa_size); 255 if (rc != EOK) { 256 async_wait_for(req, &rc_orig); 257 async_serialize_end(); 258 futex_up(&vfs_phone_futex); 259 free(mpa); 260 if (rc_orig == EOK) 261 return (int) rc; 262 else 263 return (int) rc_orig; 264 } 265 266 185 if (rc_orig == EOK) 186 return (int) rc; 187 else 188 return (int) rc_orig; 189 } 190 267 191 async_wait_for(req, &rc); 268 192 async_serialize_end();
Note:
See TracChangeset
for help on using the changeset viewer.