xattr.c (85db90e77806d48a19fda77dabe8897d369a1710) xattr.c (6c3faba4421e230d77a181c260972229c542dec9)
1/* -*- mode: c; c-basic-offset: 8; -*-
2 * vim: noexpandtab sw=8 ts=8 sts=0:
3 *
4 * xattr.c
5 *
6 * Copyright (C) 2004, 2008 Oracle. All rights reserved.
7 *
8 * CREDITS:

--- 2312 unchanged lines hidden (view full) ---

2321 }
2322 }
2323
2324out:
2325 return ret;
2326}
2327
2328/*
1/* -*- mode: c; c-basic-offset: 8; -*-
2 * vim: noexpandtab sw=8 ts=8 sts=0:
3 *
4 * xattr.c
5 *
6 * Copyright (C) 2004, 2008 Oracle. All rights reserved.
7 *
8 * CREDITS:

--- 2312 unchanged lines hidden (view full) ---

2321 }
2322 }
2323
2324out:
2325 return ret;
2326}
2327
2328/*
2329 * This function only called duing creating inode
2330 * for init security/acl xattrs of the new inode.
2331 * The xattrs could be put into ibody or extent block,
2332 * xattr bucket would not be use in this case.
2333 * transanction credits also be reserved in here.
2334 */
2335int ocfs2_xattr_set_handle(handle_t *handle,
2336 struct inode *inode,
2337 struct buffer_head *di_bh,
2338 int name_index,
2339 const char *name,
2340 const void *value,
2341 size_t value_len,
2342 int flags,
2343 struct ocfs2_alloc_context *meta_ac,
2344 struct ocfs2_alloc_context *data_ac)
2345{
2346 struct ocfs2_dinode *di;
2347 int ret;
2348
2349 struct ocfs2_xattr_info xi = {
2350 .name_index = name_index,
2351 .name = name,
2352 .value = value,
2353 .value_len = value_len,
2354 };
2355
2356 struct ocfs2_xattr_search xis = {
2357 .not_found = -ENODATA,
2358 };
2359
2360 struct ocfs2_xattr_search xbs = {
2361 .not_found = -ENODATA,
2362 };
2363
2364 struct ocfs2_xattr_set_ctxt ctxt = {
2365 .handle = handle,
2366 .meta_ac = meta_ac,
2367 .data_ac = data_ac,
2368 };
2369
2370 if (!ocfs2_supports_xattr(OCFS2_SB(inode->i_sb)))
2371 return -EOPNOTSUPP;
2372
2373 xis.inode_bh = xbs.inode_bh = di_bh;
2374 di = (struct ocfs2_dinode *)di_bh->b_data;
2375
2376 down_write(&OCFS2_I(inode)->ip_xattr_sem);
2377
2378 ret = ocfs2_xattr_ibody_find(inode, name_index, name, &xis);
2379 if (ret)
2380 goto cleanup;
2381 if (xis.not_found) {
2382 ret = ocfs2_xattr_block_find(inode, name_index, name, &xbs);
2383 if (ret)
2384 goto cleanup;
2385 }
2386
2387 ret = __ocfs2_xattr_set_handle(inode, di, &xi, &xis, &xbs, &ctxt);
2388
2389cleanup:
2390 up_write(&OCFS2_I(inode)->ip_xattr_sem);
2391 brelse(xbs.xattr_bh);
2392
2393 return ret;
2394}
2395
2396/*
2329 * ocfs2_xattr_set()
2330 *
2331 * Set, replace or remove an extended attribute for this inode.
2332 * value is NULL to remove an existing extended attribute, else either
2333 * create or replace an extended attribute.
2334 */
2335int ocfs2_xattr_set(struct inode *inode,
2336 int name_index,

--- 2673 unchanged lines hidden ---
2397 * ocfs2_xattr_set()
2398 *
2399 * Set, replace or remove an extended attribute for this inode.
2400 * value is NULL to remove an existing extended attribute, else either
2401 * create or replace an extended attribute.
2402 */
2403int ocfs2_xattr_set(struct inode *inode,
2404 int name_index,

--- 2673 unchanged lines hidden ---