Codebase list libblockdev / b40dbb4
Merge pull request #170 from poncovka/master-fba Add the bd_s390_dasd_is_fba function to check if DASD is FBA Vratislav Podzimek authored 7 years ago GitHub committed 7 years ago
5 changed file(s) with 75 addition(s) and 2 deletion(s). Raw diff Collapse all Expand all
460460 bd_s390_sanitize_dev_input
461461 bd_s390_dasd_online
462462 bd_s390_dasd_is_ldl
463 bd_s390_dasd_is_fba
463464 bd_s390_zfcp_sanitize_wwpn_input
464465 bd_s390_zfcp_sanitize_lun_input
465466 bd_s390_zfcp_online
248248 * s390_dasd_needs_format
249249 * s390_dasd_online
250250 * s390_dasd_is_ldl
251 * s390_dasd_is_fba
251252 * s390_sanitize_dev_input
252253 * s390_zfcp_sanitize_wwpn_input
253254 * s390_zfcp_sanitize_lun_input
5454 * Returns: whether a dasd is LDL formatted
5555 */
5656 gboolean bd_s390_dasd_is_ldl (const gchar *dasd, GError **error);
57
58 /**
59 * bd_s390_dasd_is_fba:
60 * @dasd: dasd to check, whether it is FBA
61 * @error: (out): place to store error (if any)
62 *
63 * Returns: whether a dasd is FBA
64 */
65 gboolean bd_s390_dasd_is_fba (const gchar *dasd, GError **error);
5766
5867 /**
5968 * bd_s390_sanitize_dev_input:
251251 dasd_information2_t dasd_info;
252252
253253 memset(&dasd_info, 0, sizeof(dasd_info));
254 devname = g_strdup_printf ("/dev/%s", dasd);
255
254
255 /* complete the device name */
256 if (g_str_has_prefix (dasd, "/dev/")) {
257 devname = g_strdup (dasd);
258 }
259 else {
260 devname = g_strdup_printf ("/dev/%s", dasd);
261 }
262
263 /* open the device */
256264 if ((f = open(devname, O_RDONLY)) == -1) {
257265 g_set_error (error, BD_S390_ERROR, BD_S390_ERROR_DEVICE,
258266 "Unable to open device %s", devname);
262270
263271 g_free (devname);
264272
273 /* check if this is a block device */
265274 if (ioctl(f, BLKSSZGET, &blksize) != 0) {
266275 close(f);
267276 return FALSE;
268277 }
269278
279 /* get some info about DASD */
270280 if (ioctl(f, BIODASDINFO2, &dasd_info) != 0) {
271281 close(f);
272282 return FALSE;
286296 else {
287297 return TRUE;
288298 }
299 }
300
301 /**
302 * bd_s390_dasd_is_fba:
303 * @dasd: dasd to check, whether it is FBA
304 * @error: (out): place to store error (if any)
305 *
306 * Returns: whether a dasd is FBA
307 */
308 gboolean bd_s390_dasd_is_fba (const gchar *dasd, GError **error) {
309 gchar *devname = NULL;
310 gint f = 0;
311 gint blksize = 0;
312 dasd_information2_t dasd_info;
313
314 memset(&dasd_info, 0, sizeof(dasd_info));
315
316 /* complete the device name */
317 if (g_str_has_prefix (dasd, "/dev/")) {
318 devname = g_strdup (dasd);
319 }
320 else {
321 devname = g_strdup_printf ("/dev/%s", dasd);
322 }
323
324 /* open the device */
325 if ((f = open(devname, O_RDONLY)) == -1) {
326 g_set_error (error, BD_S390_ERROR, BD_S390_ERROR_DEVICE,
327 "Unable to open device %s", devname);
328 g_free (devname);
329 return FALSE;
330 }
331
332 g_free (devname);
333
334 /* check if this is a block device */
335 if (ioctl(f, BLKSSZGET, &blksize) != 0) {
336 close(f);
337 return FALSE;
338 }
339
340 /* get some info about DASD */
341 if (ioctl(f, BIODASDINFO2, &dasd_info) != 0) {
342 close(f);
343 return FALSE;
344 }
345
346 close(f);
347
348 /* check if we're on an FBA DASD */
349 return strncmp(dasd_info.type, "FBA", 3) == 0;
289350 }
290351
291352 /**
3232 gboolean bd_s390_dasd_needs_format (const gchar *dasd, GError **error);
3333 gboolean bd_s390_dasd_online (const gchar *dasd, GError **error);
3434 gboolean bd_s390_dasd_is_ldl (const gchar *dasd, GError **error);
35 gboolean bd_s390_dasd_is_fba (const gchar *dasd, GError **error);
3536 gchar* bd_s390_sanitize_dev_input (const gchar *dev, GError **error);
3637 gchar* bd_s390_zfcp_sanitize_wwpn_input (const gchar *wwpn, GError **error);
3738 gchar* bd_s390_zfcp_sanitize_lun_input (const gchar *lun, GError **error);