xattr.c (8bb5e7f4dcd9b9ef22a3ea25c9066a8a968f12dd) | xattr.c (d93231a6bc8a452323d5fef16cca7107ce483a27) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2#include <linux/ceph/ceph_debug.h> 3#include <linux/ceph/pagelist.h> 4 5#include "super.h" 6#include "mds_client.h" 7 8#include <linux/ceph/decode.h> --- 1072 unchanged lines hidden (view full) --- 1081 goto out; 1082 } else if (!value) { 1083 if (flags & CEPH_XATTR_REPLACE) 1084 op = CEPH_MDS_OP_RMXATTR; 1085 else 1086 flags |= CEPH_XATTR_REMOVE; 1087 } 1088 | 1// SPDX-License-Identifier: GPL-2.0 2#include <linux/ceph/ceph_debug.h> 3#include <linux/ceph/pagelist.h> 4 5#include "super.h" 6#include "mds_client.h" 7 8#include <linux/ceph/decode.h> --- 1072 unchanged lines hidden (view full) --- 1081 goto out; 1082 } else if (!value) { 1083 if (flags & CEPH_XATTR_REPLACE) 1084 op = CEPH_MDS_OP_RMXATTR; 1085 else 1086 flags |= CEPH_XATTR_REMOVE; 1087 } 1088 |
1089 dout("setxattr value=%.*s\n", (int)size, value); | 1089 dout("setxattr value size: %zu\n", size); |
1090 1091 /* do request */ 1092 req = ceph_mdsc_create_request(mdsc, op, USE_AUTH_MDS); 1093 if (IS_ERR(req)) { 1094 err = PTR_ERR(req); 1095 goto out; 1096 } 1097 --- 81 unchanged lines hidden (view full) --- 1179 1180 prealloc_cf = ceph_alloc_cap_flush(); 1181 if (!prealloc_cf) 1182 goto out; 1183 1184 spin_lock(&ci->i_ceph_lock); 1185retry: 1186 issued = __ceph_caps_issued(ci, NULL); | 1090 1091 /* do request */ 1092 req = ceph_mdsc_create_request(mdsc, op, USE_AUTH_MDS); 1093 if (IS_ERR(req)) { 1094 err = PTR_ERR(req); 1095 goto out; 1096 } 1097 --- 81 unchanged lines hidden (view full) --- 1179 1180 prealloc_cf = ceph_alloc_cap_flush(); 1181 if (!prealloc_cf) 1182 goto out; 1183 1184 spin_lock(&ci->i_ceph_lock); 1185retry: 1186 issued = __ceph_caps_issued(ci, NULL); |
1187 if (ci->i_xattrs.version == 0 || !(issued & CEPH_CAP_XATTR_EXCL)) | 1187 required_blob_size = __get_required_blob_size(ci, name_len, val_len); 1188 if ((ci->i_xattrs.version == 0) || !(issued & CEPH_CAP_XATTR_EXCL) || 1189 (required_blob_size > mdsc->mdsmap->m_max_xattr_size)) { 1190 dout("%s do sync setxattr: version: %llu size: %d max: %llu\n", 1191 __func__, ci->i_xattrs.version, required_blob_size, 1192 mdsc->mdsmap->m_max_xattr_size); |
1188 goto do_sync; | 1193 goto do_sync; |
1194 } |
|
1189 1190 if (!lock_snap_rwsem && !ci->i_head_snapc) { 1191 lock_snap_rwsem = true; 1192 if (!down_read_trylock(&mdsc->snap_rwsem)) { 1193 spin_unlock(&ci->i_ceph_lock); 1194 down_read(&mdsc->snap_rwsem); 1195 spin_lock(&ci->i_ceph_lock); 1196 goto retry; 1197 } 1198 } 1199 1200 dout("setxattr %p name '%s' issued %s\n", inode, name, 1201 ceph_cap_string(issued)); 1202 __build_xattrs(inode); 1203 | 1195 1196 if (!lock_snap_rwsem && !ci->i_head_snapc) { 1197 lock_snap_rwsem = true; 1198 if (!down_read_trylock(&mdsc->snap_rwsem)) { 1199 spin_unlock(&ci->i_ceph_lock); 1200 down_read(&mdsc->snap_rwsem); 1201 spin_lock(&ci->i_ceph_lock); 1202 goto retry; 1203 } 1204 } 1205 1206 dout("setxattr %p name '%s' issued %s\n", inode, name, 1207 ceph_cap_string(issued)); 1208 __build_xattrs(inode); 1209 |
1204 required_blob_size = __get_required_blob_size(ci, name_len, val_len); 1205 | |
1206 if (!ci->i_xattrs.prealloc_blob || 1207 required_blob_size > ci->i_xattrs.prealloc_blob->alloc_len) { 1208 struct ceph_buffer *blob; 1209 1210 spin_unlock(&ci->i_ceph_lock); 1211 ceph_buffer_put(old_blob); /* Shouldn't be required */ 1212 dout(" pre-allocating new blob size=%d\n", required_blob_size); 1213 blob = ceph_buffer_new(required_blob_size, GFP_NOFS); --- 203 unchanged lines hidden --- | 1210 if (!ci->i_xattrs.prealloc_blob || 1211 required_blob_size > ci->i_xattrs.prealloc_blob->alloc_len) { 1212 struct ceph_buffer *blob; 1213 1214 spin_unlock(&ci->i_ceph_lock); 1215 ceph_buffer_put(old_blob); /* Shouldn't be required */ 1216 dout(" pre-allocating new blob size=%d\n", required_blob_size); 1217 blob = ceph_buffer_new(required_blob_size, GFP_NOFS); --- 203 unchanged lines hidden --- |