Currently, ZFS won't set inherit bit on regular files, but
ext4 always set it, it doesn't make sense for regular files
have this bit, but own it won't do any harm as well.
To make test happy and give a consistent view on users,
let's fix project check only complain erros for Direcotry.
Test-Parameters: trivial testlist=sanity-quota
Change-Id: I194f3ed9d6ded69313a683995295ab8c07b4fb3a
Signed-off-by: Wang Shilong <wshilong@ddn.com>
Reviewed-on: https://review.whamcloud.com/35076
Tested-by: Jenkins
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Nathaniel Clark <nclark@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
#clear project but with kept projid
change_project -rCk $DIR/$tdir
proj_count1=$(lfs project -rcp $TSTPRJID $DIR/$tdir | wc -l)
#clear project but with kept projid
change_project -rCk $DIR/$tdir
proj_count1=$(lfs project -rcp $TSTPRJID $DIR/$tdir | wc -l)
- [ $proj_count1 -eq $proj_count ] ||
- error "c3: expected $proj_count got $proj_count1"
+ [ $proj_count1 -eq 1 ] ||
+ error "c3: expected 1 got $proj_count1"
#verify projid untouched.
proj_count1=$(lfs project -r $DIR/$tdir | grep -c $TSTPRJID)
#verify projid untouched.
proj_count1=$(lfs project -r $DIR/$tdir | grep -c $TSTPRJID)
-static int project_get_xattr(const char *pathname, struct fsxattr *fsx)
+static int project_get_xattr(const char *pathname, struct fsxattr *fsx,
+ struct stat *st)
- ret = lstat(pathname, &st);
+ ret = lstat(pathname, st);
if (ret) {
fprintf(stderr, "%s: failed to stat '%s': %s\n",
progname, pathname, strerror(errno));
if (ret) {
fprintf(stderr, "%s: failed to stat '%s': %s\n",
progname, pathname, strerror(errno));
}
/* currently, only file and dir supported */
}
/* currently, only file and dir supported */
- if (!S_ISREG(st.st_mode) && !S_ISDIR(st.st_mode)) {
+ if (!S_ISREG(st->st_mode) && !S_ISDIR(st->st_mode)) {
errno = ENOTSUP;
fprintf(stderr, "%s: unable to get xattr for %s '%s': %s\n",
errno = ENOTSUP;
fprintf(stderr, "%s: unable to get xattr for %s '%s': %s\n",
- progname, mode_to_type(st.st_mode), pathname,
+ progname, mode_to_type(st->st_mode), pathname,
strerror(errno));
return -errno;
}
strerror(errno));
return -errno;
}
{
struct fsxattr fsx;
int ret;
{
struct fsxattr fsx;
int ret;
- ret = project_get_xattr(pathname, &fsx);
+ ret = project_get_xattr(pathname, &fsx, &st);
phc->projid = fsx.fsx_projid;
}
phc->projid = fsx.fsx_projid;
}
- if (!(fsx.fsx_xflags & FS_XFLAG_PROJINHERIT)) {
+ if (!(fsx.fsx_xflags & FS_XFLAG_PROJINHERIT) &&
+ S_ISDIR(st.st_mode)) {
if (!phc->newline) {
printf("%s%c", pathname, '\0');
goto out;
if (!phc->newline) {
printf("%s%c", pathname, '\0');
goto out;
project_list_one(const char *pathname, struct project_handle_control *phc)
{
struct fsxattr fsx;
project_list_one(const char *pathname, struct project_handle_control *phc)
{
struct fsxattr fsx;
- ret = project_get_xattr(pathname, &fsx);
+ ret = project_get_xattr(pathname, &fsx, &st);
project_set_one(const char *pathname, struct project_handle_control *phc)
{
struct fsxattr fsx;
project_set_one(const char *pathname, struct project_handle_control *phc)
{
struct fsxattr fsx;
- fd = project_get_xattr(pathname, &fsx);
+ fd = project_get_xattr(pathname, &fsx, &st);
project_clear_one(const char *pathname, struct project_handle_control *phc)
{
struct fsxattr fsx;
project_clear_one(const char *pathname, struct project_handle_control *phc)
{
struct fsxattr fsx;
- fd = project_get_xattr(pathname, &fsx);
+ fd = project_get_xattr(pathname, &fsx, &st);