use lpath_to_handle when restoring symlinks
PATCH 2/2 use lpath_to_handle when restoring symlinks
Update xfsrestore to use the new lpath_to_handle function when dealing with symlinks.
restore/content.c +21 -34
@@ -797,7 +797,6 @@ static void partial_reg(ix_t d_index, xfs_ino_t ino, off64_t fsize, off64_t offset, off64_t sz);static bool_t partial_check (xfs_ino_t ino,off64_t fsize);static bool_t partial_check2 (partial_rest_t *isptr,off64_t fsize); -static int do_fssetdm_by_handle (char *path,fsdmidata_t *fdmp);static int quotafilecheck (char *type,char *dstdir,char *quotafile);/* definition of locally defined global variables ****************************/
@@ -7895,14 +7894,28 @@ restore_symlink( drive_t *drivep, }if ( persp->a.restoredmpr) { -fsdmidata_t fssetdm; - -/* Restore DMAPI fields. */ +fsdmidata_t fssetdm; +void *hanp; +size_t hlen=0 ; - fssetdm.fsd_dmevmask = bstatp->bs_dmevmask; - fssetdm.fsd_padding =0 ; - fssetdm.fsd_dmstate = bstatp->bs_dmstate; - rval =do_fssetdm_by_handle (path, &fssetdm); +/* Restore DMAPI fields. */ + fssetdm.fsd_dmevmask = bstatp->bs_dmevmask; + fssetdm.fsd_padding =0 ; + fssetdm.fsd_dmstate = bstatp->bs_dmstate; + +if (lpath_to_handle (persp->a.dstdir, path, &hanp, &hlen)) { +mlog (MLOG_NORMAL |MLOG_WARNING ,_ ( +"lpath_to_handle of %s failed: %s\n" ), + path,strerror ( errno )); + }else { +if (fssetdm_by_handle (hanp, hlen, &fssetdm)) { +mlog (MLOG_NORMAL |MLOG_WARNING , +_ ("fssetdm_by_handle of %s " +"failed: %s\n" ), + path,strerror ( errno )); + } +free_handle (hanp, hlen); + } } }
@@ -9525,32 +9538,6 @@ display_needed_objects( purp_t purp, }static int -do_fssetdm_by_handle ( -char *path, -fsdmidata_t *fdmp) -{ -void *hanp; -size_t hlen=0 ; -int rc; - -if (path_to_handle (path, &hanp, &hlen)) { -mlog (MLOG_NORMAL |MLOG_WARNING ,_ ( -"path_to_handle of %s failed:%s\n" ), - path,strerror ( errno )); -return -1 ; - } - - rc =fssetdm_by_handle (hanp, hlen, fdmp); -free_handle (hanp, hlen); -if (rc) { -mlog (MLOG_NORMAL |MLOG_WARNING ,_ ( -"fssetdm_by_handle of %s failed %s\n" ), - path,strerror ( errno )); - } -return rc; -} - -static int quotafilecheck (char *type,char *dstdir,char *quotafile) {struct stat s;
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
Quoted 2 lines · Bill Kendall
Update xfsrestore to use the new
lpath_to_handlefunction when dealing with symlinks.
Looks good. -Alex
Quoted 1 line
Signed-off-by Bill Kendall <[email protected]>
Quoted 82 lines
restore/content.c +21
-34@@ -797,7 +797,6 @@ static void partial_reg(ix_t d_index, xfs_ino_t ino, off64_t fsize, off64_t offset, off64_t sz);static bool_t partial_check (xfs_ino_t ino,off64_t fsize);static bool_t partial_check2 (partial_rest_t *isptr,off64_t fsize); -static int do_fssetdm_by_handle (char *path,fsdmidata_t *fdmp);static int quotafilecheck (char *type,char *dstdir,char *quotafile);/* definition of locally defined global variables ****************************/ @@ -7895,14 +7894,28 @@ restore_symlink( drive_t *drivep, }if ( persp->a.restoredmpr) { -fsdmidata_t fssetdm; - -/* Restore DMAPI fields. */ +fsdmidata_t fssetdm; +void *hanp; +size_t hlen=0 ; - fssetdm.fsd_dmevmask = bstatp->bs_dmevmask; - fssetdm.fsd_padding =0 ; - fssetdm.fsd_dmstate = bstatp->bs_dmstate; - rval =do_fssetdm_by_handle (path, &fssetdm); +/* Restore DMAPI fields. */ + fssetdm.fsd_dmevmask = bstatp->bs_dmevmask; + fssetdm.fsd_padding =0 ; + fssetdm.fsd_dmstate = bstatp->bs_dmstate; + +if (lpath_to_handle (persp->a.dstdir, path, &hanp, &hlen)) { +mlog (MLOG_NORMAL |MLOG_WARNING ,_ ( +"lpath_to_handle of %s failed: %s\n" ), + path,strerror ( errno )); + }else { +if (fssetdm_by_handle (hanp, hlen, &fssetdm)) { +mlog (MLOG_NORMAL |MLOG_WARNING , +_ ("fssetdm_by_handle of %s " +"failed: %s\n" ), + path,strerror ( errno )); + } +free_handle (hanp, hlen); + } } }@@ -9525,32 +9538,6 @@ display_needed_objects( purp_t purp, }static int -do_fssetdm_by_handle ( -char *path, -fsdmidata_t *fdmp) -{ -void *hanp; -size_t hlen=0 ; -int rc; - -if (path_to_handle (path, &hanp, &hlen)) { -mlog (MLOG_NORMAL |MLOG_WARNING ,_ ( -"path_to_handle of %s failed:%s\n" ), - path,strerror ( errno )); -return -1 ; - } - - rc =fssetdm_by_handle (hanp, hlen, fdmp); -free_handle (hanp, hlen); -if (rc) { -mlog (MLOG_NORMAL |MLOG_WARNING ,_ ( -"fssetdm_by_handle of %s failed %s\n" ), - path,strerror ( errno )); - } -return rc; -} - -static int quotafilecheck (char *type,char *dstdir,char *quotafile) {struct stat s;
Quoted 4 lines
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
Quoted 2 lines · Bill Kendall
Update xfsrestore to use the new
lpath_to_handlefunction when dealing with symlinks.
Requiring a simultanously released version of xfsprogs is a very bad idea. The right fix is to add an autoconf check for the new function and use it when available, falling back to the inferior old version if it is not available.
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
Quoted 8 lines · Christoph Hellwig
Quoted 2 lines · Bill Kendall
Update xfsrestore to use the new
lpath_to_handlefunction when dealing with symlinks.Requiring a simultanously released version of xfsprogs is a very bad idea. The right fix is to add an autoconf check for the new function and use it when available, falling back to the inferior old version if it is not available.
Good thought. However, there's also a run-time dependency since xfsrestore uses libhandle.so rather than the .a. I can rework something using dlsym - sound okay?
Bill
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs
Quoted 5 lines · Bill Kendall
Quoted 4 lines · Christoph Hellwig
Quoted 2 lines · Bill Kendall
Update xfsrestore to use the new
lpath_to_handlefunction when dealing with symlinks.
Quoted 8 lines
Quoted 4 lines
Requiring a simultanously released version of xfsprogs is a very bad idea. The right fix is to add an autoconf check for the new function and use it when available, falling back to the inferior old version if it is not available.
Good thought. However, there's also a run-time dependency since xfsrestore uses libhandle.so rather than the .a. I can rework something using dlsym - sound okay?
That's why the minor version of a shared library needs to get bumped when adding a new symbol, see one of my replies to Alex. Of course symbol versioning would be even better, I'll see if I can port it from acl/attr which use the same build system as xfsprogs.
_______________________________________________
xfs mailing list
[email protected]
http://oss.sgi.com/mailman/listinfo/xfs