/
githubmirror
/
xfsprogs
Обзор
Документация
Войти
/
githubmirror
/
xfsprogs
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
preadv2
libdisk/xvm.c
93 строки
2 KB
Nathan Scott
Update copyright/license notices to match SGI legal prefered boilerplate.
11 ноя 2005, 17:27
11 ноя 2005, 17:27
da23017
Код
Авторство
О чём код?
/* * Copyright (c) 2000-2005 Silicon Graphics, Inc. * All Rights Reserved. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it would be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #include <stdio.h> #include <fcntl.h> #include <stdlib.h> #include <unistd.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <disk/volume.h> #include "xvm.h" int mnt_is_xvm_subvol( dev_t dev) { return get_driver_block_major("xvm", major(dev)); } /* * If the logical device is a xvm striped volume, then it returns the * stripe unit and stripe width information. * Input parameters: the logical volume * the subvolume type - (SVTYPE_RT or * SVTYPE_DATA) * Output parameters: the stripe unit and width in 512 byte blocks * true/false - was this device an XVM volume? */ int xvm_get_subvol_stripe( char *dev, sv_type_t type, int *sunit, int *swidth, int *sectalign, struct stat64 *sb) { int fd; xvm_getdev_t getdev; xvm_subvol_stripe_t subvol_stripe; if (!mnt_is_xvm_subvol(sb->st_rdev)) return 0; /* * This will actually open the data subvolume. */ if ((fd = open(dev, O_RDONLY)) < 0) return 0; /* * Go and get the the information for the correct * subvolume. */ if (ioctl(fd, DIOCGETVOLDEV, &getdev) < 0) { close(fd); return 0; } if ( (type == SVTYPE_RT) && (getdev.rt_subvol_dev) ) subvol_stripe.dev = getdev.rt_subvol_dev; else if ( (type == SVTYPE_DATA) && (getdev.data_subvol_dev) ) subvol_stripe.dev = getdev.data_subvol_dev; else { close(fd); return 0; } if (ioctl(fd, DIOCGETVOLSTRIPE, &subvol_stripe) < 0) { close(fd); return 0; } *sunit = subvol_stripe.unit_size; *swidth = *sunit * subvol_stripe.width_size; *sectalign = 0; close(fd); return 1; }