The Samba-Bugzilla – Attachment 17190 Details for
Bug 14957
vfs_shadow_copy2 breaks "smbd async dosmode" sync fallback
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
git-am fix for 4.16.rcNext.
bug-14957-4.16 (text/plain), 18.17 KB, created by
Jeremy Allison
on 2022-03-04 21:14:08 UTC
(
hide
)
Description:
git-am fix for 4.16.rcNext.
Filename:
MIME Type:
Creator:
Jeremy Allison
Created:
2022-03-04 21:14:08 UTC
Size:
18.17 KB
patch
obsolete
>From ce01d65d3f941a5e3c45061c20d45e89628c4b1b Mon Sep 17 00:00:00 2001 >From: Ralph Boehme <slow@samba.org> >Date: Mon, 24 Jan 2022 16:54:29 +0100 >Subject: [PATCH 1/7] CI: remove shares referencing removed functionality > >The whole "smbd:force sync [user|root] [path|chdir] safe threadpool" stuff was >removed long ago by 29dd6f3e59055a17fa3d6a63619773f940e63374. > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=14957 > >Signed-off-by: Ralph Boehme <slow@samba.org> >Reviewed-by: Jeremy Allison <jra@samba.org> >(cherry picked from commit 1e3e22cc45583cb11ef5dbc3c044bf6189fe6036) >--- > selftest/target/Samba3.pm | 52 --------------------------------------- > source3/selftest/tests.py | 4 +-- > 2 files changed, 1 insertion(+), 55 deletions(-) > >diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm >index 2cc2d13d9e0..c0797fe5581 100755 >--- a/selftest/target/Samba3.pm >+++ b/selftest/target/Samba3.pm >@@ -1545,32 +1545,6 @@ sub setup_simpleserver > aio_pthread:aio open = yes > smbd async dosmode = yes > >-[vfs_aio_pthread_async_dosmode_force_sync1] >- path = $prefix_abs/share >- read only = no >- vfs objects = aio_pthread >- store dos attributes = yes >- aio_pthread:aio open = yes >- smbd async dosmode = yes >- # This simulates non linux systems >- smbd:force sync user path safe threadpool = yes >- smbd:force sync user chdir safe threadpool = yes >- smbd:force sync root path safe threadpool = yes >- smbd:force sync root chdir safe threadpool = yes >- >-[vfs_aio_pthread_async_dosmode_force_sync2] >- path = $prefix_abs/share >- read only = no >- vfs objects = aio_pthread xattr_tdb >- store dos attributes = yes >- aio_pthread:aio open = yes >- smbd async dosmode = yes >- # This simulates non linux systems >- smbd:force sync user path safe threadpool = yes >- smbd:force sync user chdir safe threadpool = yes >- smbd:force sync root path safe threadpool = yes >- smbd:force sync root chdir safe threadpool = yes >- > [vfs_aio_fork] > path = $prefix_abs/share > vfs objects = aio_fork >@@ -1945,32 +1919,6 @@ sub setup_fileserver_smb1 > aio_pthread:aio open = yes > smbd async dosmode = yes > >-[vfs_aio_pthread_async_dosmode_force_sync1] >- path = $prefix_abs/share >- read only = no >- vfs objects = aio_pthread >- store dos attributes = yes >- aio_pthread:aio open = yes >- smbd async dosmode = yes >- # This simulates non linux systems >- smbd:force sync user path safe threadpool = yes >- smbd:force sync user chdir safe threadpool = yes >- smbd:force sync root path safe threadpool = yes >- smbd:force sync root chdir safe threadpool = yes >- >-[vfs_aio_pthread_async_dosmode_force_sync2] >- path = $prefix_abs/share >- read only = no >- vfs objects = aio_pthread xattr_tdb >- store dos attributes = yes >- aio_pthread:aio open = yes >- smbd async dosmode = yes >- # This simulates non linux systems >- smbd:force sync user path safe threadpool = yes >- smbd:force sync user chdir safe threadpool = yes >- smbd:force sync root path safe threadpool = yes >- smbd:force sync root chdir safe threadpool = yes >- > [vfs_aio_fork] > path = $prefix_abs/share > vfs objects = aio_fork >diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py >index 95192ae19ae..0f17e9727b4 100755 >--- a/source3/selftest/tests.py >+++ b/source3/selftest/tests.py >@@ -275,9 +275,7 @@ plantestsuite("samba3.smbtorture_s3.plain.%s" % "SMB2-DEL-ON-CLOSE-NONEMPTY", > > shares = [ > "vfs_aio_pthread_async_dosmode_default1", >- "vfs_aio_pthread_async_dosmode_default2", >- "vfs_aio_pthread_async_dosmode_force_sync1", >- "vfs_aio_pthread_async_dosmode_force_sync2" >+ "vfs_aio_pthread_async_dosmode_default2" > ] > for s in shares: > plantestsuite("samba3.smbtorture_s3.%s(simpleserver).SMB2-BASIC" % s, "simpleserver", [os.path.join(samba3srcdir, "script/tests/test_smbtorture_s3.sh"), 'SMB2-BASIC', '//$SERVER_IP/' + s, '$USERNAME', '$PASSWORD', smbtorture3, "", "-l $LOCAL_PATH"]) >-- >2.32.0 > > >From 713e428bf4030d8419e890b5b3fc3cfa3401a488 Mon Sep 17 00:00:00 2001 >From: Ralph Boehme <slow@samba.org> >Date: Mon, 24 Jan 2022 16:45:11 +0100 >Subject: [PATCH 2/7] smbd: check "store dos attributes" settings in the async > dosmode code > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=14957 > >Signed-off-by: Ralph Boehme <slow@samba.org> >Reviewed-by: Jeremy Allison <jra@samba.org> >(cherry picked from commit ecf56c1d9b6b898ed4060e3bba341392ddcc9b5a) >--- > source3/modules/vfs_default.c | 8 ++++++++ > 1 file changed, 8 insertions(+) > >diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c >index c52d29dc2fe..5977122a512 100644 >--- a/source3/modules/vfs_default.c >+++ b/source3/modules/vfs_default.c >@@ -1784,6 +1784,14 @@ static struct tevent_req *vfswrap_get_dos_attributes_send( > .smb_fname = smb_fname, > }; > >+ if (!lp_store_dos_attributes(SNUM(dir_fsp->conn))) { >+ DBG_ERR("%s: \"smbd async dosmode\" enabled, but " >+ "\"store dos attributes\" is disabled\n", >+ dir_fsp->conn->connectpath); >+ tevent_req_nterror(req, NT_STATUS_NOT_IMPLEMENTED); >+ return tevent_req_post(req, ev); >+ } >+ > subreq = SMB_VFS_GETXATTRAT_SEND(state, > ev, > dir_fsp, >-- >2.32.0 > > >From 71f3e94c64f1e31f0429f888d94fdf1a744754a1 Mon Sep 17 00:00:00 2001 >From: Ralph Boehme <slow@samba.org> >Date: Tue, 25 Jan 2022 17:59:37 +0100 >Subject: [PATCH 3/7] CI: add test "smb2.async_dosmode" > >Verifies async-dosmode sync fallback works with shadow_copy2 which returns >ENOSYS for SMB_VFS_GET_DOS_ATTRIBUTES_SEND(). > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=14957 > >Signed-off-by: Ralph Boehme <slow@samba.org> >Reviewed-by: Jeremy Allison <jra@samba.org> >(cherry picked from commit ffdb1c3e00c233efc99e8f1a66a5f83beb4e07f3) >--- > .../samba3.smb2.async_dosmode.async_dosmode | 1 + > selftest/target/Samba3.pm | 6 ++ > source3/selftest/tests.py | 4 ++ > source4/selftest/tests.py | 1 + > source4/torture/smb2/dosmode.c | 71 +++++++++++++++++++ > source4/torture/smb2/smb2.c | 1 + > 6 files changed, 84 insertions(+) > create mode 100644 selftest/knownfail.d/samba3.smb2.async_dosmode.async_dosmode > >diff --git a/selftest/knownfail.d/samba3.smb2.async_dosmode.async_dosmode b/selftest/knownfail.d/samba3.smb2.async_dosmode.async_dosmode >new file mode 100644 >index 00000000000..a28337150c8 >--- /dev/null >+++ b/selftest/knownfail.d/samba3.smb2.async_dosmode.async_dosmode >@@ -0,0 +1 @@ >+^samba3.smb2.async_dosmode.async_dosmode\(simpleserver\) >diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm >index c0797fe5581..1249a7e34f2 100755 >--- a/selftest/target/Samba3.pm >+++ b/selftest/target/Samba3.pm >@@ -1545,6 +1545,12 @@ sub setup_simpleserver > aio_pthread:aio open = yes > smbd async dosmode = yes > >+[async_dosmode_shadow_copy2] >+ path = $prefix_abs/share >+ read only = no >+ vfs objects = shadow_copy2 xattr_tdb >+ smbd async dosmode = yes >+ > [vfs_aio_fork] > path = $prefix_abs/share > vfs objects = aio_fork >diff --git a/source3/selftest/tests.py b/source3/selftest/tests.py >index 0f17e9727b4..38a1a8031b4 100755 >--- a/source3/selftest/tests.py >+++ b/source3/selftest/tests.py >@@ -983,6 +983,10 @@ for t in tests: > plansmbtorture4testsuite(t, "fileserver", '//$SERVER_IP/tmp -U$USERNAME%$PASSWORD') > elif t == "smb2.acls_non_canonical": > plansmbtorture4testsuite(t, "nt4_dc", '//$SERVER_IP/acls_non_canonical -U$USERNAME%$PASSWORD') >+ elif t == "smb2.async_dosmode": >+ plansmbtorture4testsuite("smb2.async_dosmode", >+ "simpleserver", >+ "//$SERVER_IP/async_dosmode_shadow_copy2 -U$USERNAME%$PASSWORD") > elif t == "rpc.wkssvc": > plansmbtorture4testsuite(t, "ad_member", '//$SERVER/tmp -U$DC_USERNAME%$DC_PASSWORD') > elif t == "rpc.srvsvc": >diff --git a/source4/selftest/tests.py b/source4/selftest/tests.py >index 829eda82979..4dfabefd9b4 100755 >--- a/source4/selftest/tests.py >+++ b/source4/selftest/tests.py >@@ -379,6 +379,7 @@ smb2_s3only = [ > "smb2.fileid", > "smb2.fileid_unique", > "smb2.timestamps", >+ "smb2.async_dosmode", > ] > smb2 = [x for x in smbtorture4_testsuites("smb2.") if x not in smb2_s3only] > >diff --git a/source4/torture/smb2/dosmode.c b/source4/torture/smb2/dosmode.c >index 7808ca67dba..7610a20329f 100644 >--- a/source4/torture/smb2/dosmode.c >+++ b/source4/torture/smb2/dosmode.c >@@ -181,3 +181,74 @@ done: > smb2_deltree(tree, dname); > return ret; > } >+ >+bool torture_smb2_async_dosmode(struct torture_context *tctx) >+{ >+ bool ret = true; >+ NTSTATUS status; >+ struct smb2_tree *tree = NULL; >+ const char *dname = "torture_dosmode"; >+ const char *fname = "torture_dosmode\\file"; >+ struct smb2_handle h = {{0}}; >+ struct smb2_create io; >+ union smb_setfileinfo sfinfo; >+ struct smb2_find f; >+ union smb_search_data *d; >+ unsigned int count; >+ >+ if (!torture_smb2_connection(tctx, &tree)) { >+ return false; >+ } >+ >+ smb2_deltree(tree, dname); >+ >+ status = torture_smb2_testdir(tree, dname, &h); >+ torture_assert_ntstatus_ok_goto(tctx, status, ret, done, >+ "torture_smb2_testdir failed"); >+ >+ ZERO_STRUCT(io); >+ io.in.desired_access = SEC_FLAG_MAXIMUM_ALLOWED; >+ io.in.file_attributes = FILE_ATTRIBUTE_NORMAL; >+ io.in.create_disposition = NTCREATEX_DISP_CREATE; >+ io.in.create_options = 0; >+ io.in.fname = fname; >+ >+ status = smb2_create(tree, tctx, &io); >+ torture_assert_ntstatus_ok_goto(tctx, status, ret, done, >+ "smb2_create failed"); >+ >+ ZERO_STRUCT(sfinfo); >+ sfinfo.basic_info.in.attrib = FILE_ATTRIBUTE_HIDDEN; >+ sfinfo.generic.level = RAW_SFILEINFO_BASIC_INFORMATION; >+ sfinfo.generic.in.file.handle = io.out.file.handle; >+ status = smb2_setinfo_file(tree, &sfinfo); >+ torture_assert_ntstatus_ok_goto(tctx, status, ret, done, >+ "smb2_setinfo_filefailed"); >+ >+ smb2_util_close(tree, io.out.file.handle); >+ >+ ZERO_STRUCT(f); >+ f.in.file.handle = h; >+ f.in.pattern = "file"; >+ f.in.continue_flags = SMB2_CONTINUE_FLAG_RESTART; >+ f.in.max_response_size = 0x1000; >+ f.in.level = SMB2_FIND_BOTH_DIRECTORY_INFO; >+ >+ status = smb2_find_level(tree, tree, &f, &count, &d); >+ torture_assert_ntstatus_ok_goto(tctx, status, ret, done, ""); >+ >+ smb2_util_close(tree, h); >+ ZERO_STRUCT(h); >+ >+ torture_assert_goto(tctx, >+ d->both_directory_info.attrib & FILE_ATTRIBUTE_HIDDEN, >+ ret, done, >+ "FILE_ATTRIBUTE_HIDDEN is not set\n"); >+ >+done: >+ if (!smb2_util_handle_empty(h)) { >+ smb2_util_close(tree, h); >+ } >+ smb2_deltree(tree, dname); >+ return ret; >+} >diff --git a/source4/torture/smb2/smb2.c b/source4/torture/smb2/smb2.c >index 95a7b49952f..3c69d8c7fa0 100644 >--- a/source4/torture/smb2/smb2.c >+++ b/source4/torture/smb2/smb2.c >@@ -188,6 +188,7 @@ NTSTATUS torture_smb2_init(TALLOC_CTX *ctx) > torture_suite_add_suite(suite, torture_smb2_session_init(suite)); > torture_suite_add_suite(suite, torture_smb2_replay_init(suite)); > torture_suite_add_simple_test(suite, "dosmode", torture_smb2_dosmode); >+ torture_suite_add_simple_test(suite, "async_dosmode", torture_smb2_async_dosmode); > torture_suite_add_simple_test(suite, "maxfid", torture_smb2_maxfid); > torture_suite_add_simple_test(suite, "hold-sharemode", > torture_smb2_hold_sharemode); >-- >2.32.0 > > >From 15c0c6c568e17d4346d42dc7eb3c4eee4f2fe6e1 Mon Sep 17 00:00:00 2001 >From: Ralph Boehme <slow@samba.org> >Date: Fri, 17 Dec 2021 15:02:06 +0100 >Subject: [PATCH 4/7] smbd: also check for NT_STATUS_NOT_SUPPORTED > >If a VFS module fails SMB_VFS_GETXATTRAT_SEND/RECV with ENOSYS like currently >vfs_shadow_copy2 or any other module that uses >vfs_not_implemented_getxattrat_send() the ENOSYS error that >vfs_not_implemented_getxattrat_send() sets gets mapped to >NT_STATUS_NOT_SUPPORTED by map_nt_error_from_unix(). > >Unfortunately when checking whether the async SMB_VFS_GETXATTRAT_SEND() failed >and to determine if the sync fallback should be triggered, we currently only >check for NT_STATUS_NOT_IMPLEMENTED which is the error we get when "store dos >attributes" is disabled. > >BUG: https://bugzilla.samba.org/show_bug.cgi?id=14957 > >Signed-off-by: Ralph Boehme <slow@samba.org> >Reviewed-by: Jeremy Allison <jra@samba.org> >(cherry picked from commit 97caec07ffd18f247134d21c3ba07c31591863bc) >--- > .../knownfail.d/samba3.smb2.async_dosmode.async_dosmode | 1 - > source3/smbd/dosmode.c | 9 ++++++--- > 2 files changed, 6 insertions(+), 4 deletions(-) > delete mode 100644 selftest/knownfail.d/samba3.smb2.async_dosmode.async_dosmode > >diff --git a/selftest/knownfail.d/samba3.smb2.async_dosmode.async_dosmode b/selftest/knownfail.d/samba3.smb2.async_dosmode.async_dosmode >deleted file mode 100644 >index a28337150c8..00000000000 >--- a/selftest/knownfail.d/samba3.smb2.async_dosmode.async_dosmode >+++ /dev/null >@@ -1 +0,0 @@ >-^samba3.smb2.async_dosmode.async_dosmode\(simpleserver\) >diff --git a/source3/smbd/dosmode.c b/source3/smbd/dosmode.c >index 5b252d2bf64..c0208ffa0a5 100644 >--- a/source3/smbd/dosmode.c >+++ b/source3/smbd/dosmode.c >@@ -854,10 +854,13 @@ static void dos_mode_at_vfs_get_dosmode_done(struct tevent_req *subreq) > * dos_mode_post() which also does the mapping of a last resort > * from S_IFMT(st_mode). > * >- * Only if we get NT_STATUS_NOT_IMPLEMENTED from a stacked VFS >- * module we must fallback to sync processing. >+ * Only if we get NT_STATUS_NOT_IMPLEMENTED or >+ * NT_STATUS_NOT_SUPPORTED from a stacked VFS module we must >+ * fallback to sync processing. > */ >- if (!NT_STATUS_EQUAL(status, NT_STATUS_NOT_IMPLEMENTED)) { >+ if (!NT_STATUS_EQUAL(status, NT_STATUS_NOT_IMPLEMENTED) && >+ !NT_STATUS_EQUAL(status, NT_STATUS_NOT_SUPPORTED)) >+ { > /* > * state->dosmode should still be 0, but reset > * it to be sure. >-- >2.32.0 > > >From 190a0959d2246d158bda4c90c3bd99a7fd94fb22 Mon Sep 17 00:00:00 2001 >From: Ralph Boehme <slow@samba.org> >Date: Wed, 23 Feb 2022 18:14:38 +0100 >Subject: [PATCH 5/7] CI: enable "smbd async dosmode" on shadow_write share > >Existing tests don't care, upcoming new test needs it. > >Signed-off-by: Ralph Boehme <slow@samba.org> >Reviewed-by: Jeremy Allison <jra@samba.org> >(cherry picked from commit 48f81b4e7216e4dad0a86aca75890c32117a342e) >--- > selftest/target/Samba3.pm | 1 + > 1 file changed, 1 insertion(+) > >diff --git a/selftest/target/Samba3.pm b/selftest/target/Samba3.pm >index 1249a7e34f2..b1ef01b8321 100755 >--- a/selftest/target/Samba3.pm >+++ b/selftest/target/Samba3.pm >@@ -3142,6 +3142,7 @@ sub provision($$) > error_inject:pwrite = EBADF > shadow:mountpoint = $shadow_tstdir > shadow:fixinodes = yes >+ smbd async dosmode = yes > > [dfq] > path = $shrdir/dfree >-- >2.32.0 > > >From d6802bf4dc87da7a7f2fb74154d20db44ebabda4 Mon Sep 17 00:00:00 2001 >From: Ralph Boehme <slow@samba.org> >Date: Wed, 23 Feb 2022 18:10:59 +0100 >Subject: [PATCH 6/7] CI: add a test for async dosmode on a file in a > shadow_copy2 snapshot > >Signed-off-by: Ralph Boehme <slow@samba.org> >Reviewed-by: Jeremy Allison <jra@samba.org> >(cherry picked from commit 1097b1d0776661d873861672ca38e5892014725d) >--- > .../script/tests/test_shadow_copy_torture.sh | 43 +++++++++++++++++++ > 1 file changed, 43 insertions(+) > >diff --git a/source3/script/tests/test_shadow_copy_torture.sh b/source3/script/tests/test_shadow_copy_torture.sh >index e5dc0192e95..4ae2f9f707f 100755 >--- a/source3/script/tests/test_shadow_copy_torture.sh >+++ b/source3/script/tests/test_shadow_copy_torture.sh >@@ -150,6 +150,47 @@ test_shadow_copy_fix_inodes() > echo $out | grep "hardlink: for read/write fnum 1" || return 1 > } > >+build_hiddenfile() >+{ >+ local snapdir >+ >+ snapdir=$WORKDIR/.snapshots >+ >+ #delete snapshots from previous tests >+ find $WORKDIR -name ".snapshots" -exec rm -rf {} \; 1>/dev/null 2>&1 >+ build_snapshots >+ >+ touch $WORKDIR/hiddenfile >+ >+ # Create a file with hidden attribute >+ $SMBCLIENT -U $USERNAME%$PASSWORD \ >+ "//$SERVER/shadow_write" \ >+ -c "put $WORKDIR/hiddenfile hiddenfile; setmode hiddenfile +h" >+ # ...and move it to the snapshot directory >+ mv $WORKDIR/hiddenfile $snapdir/$SNAPSHOT/ >+} >+ >+test_hiddenfile() >+{ >+ build_hiddenfile >+ >+ out=$($SMBCLIENT \ >+ -U $USERNAME%$PASSWORD \ >+ "//$SERVER/shadow_write" \ >+ -c "allinfo $SNAPSHOT/hiddenfile") || return 1 >+ echo $out >+ echo $out | grep "attributes: HA (22)" || return 1 >+ >+ out=$($SMBCLIENT \ >+ -U $USERNAME%$PASSWORD \ >+ "//$SERVER/shadow_write" \ >+ -c "ls $SNAPSHOT/hiddenfile") || return 1 >+ echo $out >+ echo $out | grep "hiddenfile[[:blank:]]*AH" || return 1 >+ >+ return 0 >+} >+ > build_files $WORKDIR > > # test open for writing and write behaviour of snapshoted files >@@ -161,4 +202,6 @@ test_shadow_copy_openroot "opening root of shadow copy share" > > testit "fix inodes with hardlink" test_shadow_copy_fix_inodes || failed=`expr $failed + 1` > >+testit "Test reading DOS attribute" test_hiddenfile || failed=`expr $failed + 1` >+ > exit $failed >-- >2.32.0 > > >From 2b2aa37418d2a0ca6122b1f8efb286b0131daff2 Mon Sep 17 00:00:00 2001 >From: Ralph Boehme <slow@samba.org> >Date: Wed, 23 Feb 2022 11:36:29 +0100 >Subject: [PATCH 7/7] vfs_shadow_copy2: remove async getxattrat > >vfswrap_getxattrat_send() is handle based using smb_fname->fsp. As >the open of smb_fname->fsp was processed by this module, the handle >is already correctly opened on the file in the snapshot. In the end >this means we can just call directly call the next function here. > >Note that the same reasoning might apply to other modules that use >vfs_not_implemented_getxattrat_send(), but checking and adjusting those is a job >for another day. Currently they will continue to go via the sync fallback of the >caller. > >Signed-off-by: Ralph Boehme <slow@samba.org> >Reviewed-by: Jeremy Allison <jra@samba.org> > >Autobuild-User(master): Jeremy Allison <jra@samba.org> >Autobuild-Date(master): Mon Feb 28 20:53:35 UTC 2022 on sn-devel-184 > >(cherry picked from commit afc2103da0fe947afc027b3e25c5e82aa5d3f1fb) >--- > source3/modules/vfs_shadow_copy2.c | 2 -- > 1 file changed, 2 deletions(-) > >diff --git a/source3/modules/vfs_shadow_copy2.c b/source3/modules/vfs_shadow_copy2.c >index d61b3eac4b9..769f8c7da87 100644 >--- a/source3/modules/vfs_shadow_copy2.c >+++ b/source3/modules/vfs_shadow_copy2.c >@@ -3256,8 +3256,6 @@ static struct vfs_fn_pointers vfs_shadow_copy2_fns = { > .realpath_fn = shadow_copy2_realpath, > .get_shadow_copy_data_fn = shadow_copy2_get_shadow_copy_data, > .mkdirat_fn = shadow_copy2_mkdirat, >- .getxattrat_send_fn = vfs_not_implemented_getxattrat_send, >- .getxattrat_recv_fn = vfs_not_implemented_getxattrat_recv, > .fsetxattr_fn = shadow_copy2_fsetxattr, > .fchflags_fn = shadow_copy2_fchflags, > .get_real_filename_fn = shadow_copy2_get_real_filename, >-- >2.32.0 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Flags:
slow
:
review+
Actions:
View
Attachments on
bug 14957
: 17190 |
17191