]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw_file: fix/update rgw_open flag arguments
authorMatt Benjamin <mbenjamin@redhat.com>
Fri, 12 Aug 2016 14:39:21 +0000 (10:39 -0400)
committerMatt Benjamin <mbenjamin@redhat.com>
Wed, 5 Oct 2016 18:24:18 +0000 (14:24 -0400)
Allow passing POSIX open flags as well as api call flags.  Needed
for NFS3 support.

Signed-off-by: Matt Benjamin <mbenjamin@redhat.com>
(cherry picked from commit ada29f7f8323be2301588941bcd5c60190b32a4b)

src/include/rados/rgw_file.h
src/rgw/rgw_file.cc
src/rgw/rgw_file.h
src/test/librgw_file_aw.cc
src/test/librgw_file_gp.cc
src/test/librgw_file_nfsns.cc

index 4bb8a939d104c73ca18e61154f88735a314a2370..d3dba290c524ff5c579e11033d447b6b726c7df4 100644 (file)
@@ -220,9 +220,10 @@ int rgw_truncate(struct rgw_fs *rgw_fs,
 */
 #define RGW_OPEN_FLAG_NONE         0x0000
 #define RGW_OPEN_FLAG_CREATE       0x0001
+#define RGW_OPEN_FLAG_V3           0x0002 /* ops have v3 semantics */
 
 int rgw_open(struct rgw_fs *rgw_fs, struct rgw_file_handle *parent_fh,
-           uint32_t flags);
+            uint32_t posix_flags, uint32_t flags);
 
 /*
    close file
index 3ecd565145f2c7c4f9e93c4dcb0674b88ad9bb07..2925e43dcc12b2c6dd63ee1dcf4124c7d7826fca 100644 (file)
@@ -1319,7 +1319,7 @@ int rgw_truncate(struct rgw_fs *rgw_fs,
    open file
 */
 int rgw_open(struct rgw_fs *rgw_fs,
-            struct rgw_file_handle *fh, uint32_t flags)
+            struct rgw_file_handle *fh, uint32_t posix_flags, uint32_t flags)
 {
   RGWFileHandle* rgw_fh = get_rgwfh(fh);
 
@@ -1334,9 +1334,7 @@ int rgw_open(struct rgw_fs *rgw_fs,
   if (! rgw_fh->is_file())
     return -EISDIR;
 
-  // convert flags
-  uint32_t oflags = 0;
-  return rgw_fh->open(oflags);
+  return rgw_fh->open(flags);
 }
 
 /*
index deb9bd1f62d606c70d85d832e2ceff69ba46e8e4..2d94952e877fd171154b1bb4cb14ab405653f62f 100644 (file)
@@ -234,6 +234,7 @@ namespace rgw {
     static constexpr uint32_t FLAG_DELETED = 0x0080;
     static constexpr uint32_t FLAG_UNLINK_THIS = 0x0100;
     static constexpr uint32_t FLAG_LOCKED = 0x0200;
+    static constexpr uint32_t FLAG_STATELESS_OPEN = 0x0400;
 
 #define CREATE_FLAGS(x) \
     ((x) & ~(RGWFileHandle::FLAG_CREATE|RGWFileHandle::FLAG_LOCK))
@@ -495,6 +496,9 @@ namespace rgw {
     uint32_t open(uint32_t gsh_flags) {
       lock_guard guard(mtx);
       if (! (flags & FLAG_OPEN)) {
+       if (gsh_flags & RGW_OPEN_FLAG_V3) {
+         flags |= FLAG_STATELESS_OPEN;
+       }
        flags |= FLAG_OPEN;
        return 0;
       }
index 2c047a325a4a5f9a53243fff0b814b7340d110bb..9e03d4095972ab33938af463e892abc758e0ae82 100644 (file)
@@ -207,7 +207,7 @@ TEST(LibRGW, LOOKUP_OBJECT) {
 }
 
 TEST(LibRGW, OPEN1) {
-  int ret = rgw_open(fs, object_fh, RGW_OPEN_FLAG_NONE);
+  int ret = rgw_open(fs, object_fh, 0 /* posix flags */, RGW_OPEN_FLAG_NONE);
   ASSERT_EQ(ret, 0);
 }
 
@@ -234,7 +234,7 @@ TEST(LibRGW, CLOSE1) {
 }
 
 TEST(LibRGW, OPEN2) {
-  int ret = rgw_open(fs, object_fh, RGW_OPEN_FLAG_NONE);
+  int ret = rgw_open(fs, object_fh, 0 /* posix flags */, RGW_OPEN_FLAG_NONE);
   ASSERT_EQ(ret, 0);
 }
 
index ec70b5da65caff696a57931dfcac6ddee69aeb08..eba0e386ca3167cbb98d1f5ab49652e70dab1280 100644 (file)
@@ -227,7 +227,7 @@ TEST(LibRGW, LOOKUP_OBJECT) {
 
 TEST(LibRGW, OBJ_OPEN) {
   if (do_get || do_put || do_readv || do_writev) {
-    int ret = rgw_open(fs, object_fh, 0 /* flags */);
+    int ret = rgw_open(fs, object_fh, 0 /* posix flags */, 0 /* flags */);
     ASSERT_EQ(ret, 0);
     object_open = true;
   }
index d040d18c167842863d5065389d4dce6da9e4e18f..6fee01d9d6448137259c71fe273a61dde2295a37 100644 (file)
@@ -353,7 +353,7 @@ TEST(LibRGW, SETUP_DIRS1) {
            sf.rgw_fh->create_stat(&st, create_mask);
 
            /* open handle */
-           rc = rgw_open(fs, sf.fh, 0 /* flags */);
+           rc = rgw_open(fs, sf.fh, 0 /* posix flags */, 0 /* flags */);
            ASSERT_EQ(rc, 0);
            ASSERT_TRUE(sf.rgw_fh->is_open());
            /* stage seq write */
@@ -425,7 +425,7 @@ TEST(LibRGW, SETATTR) {
        sf.rgw_fh->create_stat(&st, create_mask);
 
        /* open handle */
-       rc = rgw_open(fs, sf.fh, 0 /* flags */);
+       rc = rgw_open(fs, sf.fh, 0 /* posix flags */, 0 /* flags */);
        ASSERT_EQ(rc, 0);
        ASSERT_TRUE(sf.rgw_fh->is_open());
        /* stage seq write */
@@ -782,7 +782,7 @@ TEST(LibRGW, WRITEF_DIRS1) {
       fobj.sync();
 
       /* begin write transaction */
-      rc = rgw_open(fs, fobj.fh, 0 /* flags */);
+      rc = rgw_open(fs, fobj.fh, 0 /* posix flags */, 0 /* flags */);
       ASSERT_EQ(rc, 0);
       ASSERT_TRUE(fobj.rgw_fh->is_open());
 
@@ -987,7 +987,7 @@ TEST(LibRGW, MARKER1_SETUP_OBJECTS)
       ASSERT_EQ(ret, 0);
       obj.rgw_fh = get_rgwfh(obj.fh);
       // open object--open transaction
-      ret = rgw_open(fs, obj.fh, RGW_OPEN_FLAG_NONE);
+      ret = rgw_open(fs, obj.fh, 0 /* posix flags */, RGW_OPEN_FLAG_NONE);
       ASSERT_EQ(ret, 0);
       ASSERT_TRUE(obj.rgw_fh->is_open());
       // unstable write data