[PATCH] add AOP_TRUNCATED_PAGE, prepend AOP_ to WRITEPAGE_ACTIVATE
readpage(), prepare_write(), and commit_write() callers are updated to understand the special return code AOP_TRUNCATED_PAGE in the style of writepage() and WRITEPAGE_ACTIVATE. AOP_TRUNCATED_PAGE tells the caller that the callee has unlocked the page and that the operation should be tried again with a new page. OCFS2 uses this to detect and work around a lock inversion in its aop methods. There should be no change in behaviour for methods that don't return AOP_TRUNCATED_PAGE. WRITEPAGE_ACTIVATE is also prepended with AOP_ for consistency and they are made enums so that kerneldoc can be used to document their semantics. Signed-off-by: Zach Brown <zach.brown@oracle.com>
This commit is contained in:
@@ -302,6 +302,37 @@ struct iattr {
|
||||
*/
|
||||
#include <linux/quota.h>
|
||||
|
||||
/**
|
||||
* enum positive_aop_returns - aop return codes with specific semantics
|
||||
*
|
||||
* @AOP_WRITEPAGE_ACTIVATE: Informs the caller that page writeback has
|
||||
* completed, that the page is still locked, and
|
||||
* should be considered active. The VM uses this hint
|
||||
* to return the page to the active list -- it won't
|
||||
* be a candidate for writeback again in the near
|
||||
* future. Other callers must be careful to unlock
|
||||
* the page if they get this return. Returned by
|
||||
* writepage();
|
||||
*
|
||||
* @AOP_TRUNCATED_PAGE: The AOP method that was handed a locked page has
|
||||
* unlocked it and the page might have been truncated.
|
||||
* The caller should back up to acquiring a new page and
|
||||
* trying again. The aop will be taking reasonable
|
||||
* precautions not to livelock. If the caller held a page
|
||||
* reference, it should drop it before retrying. Returned
|
||||
* by readpage(), prepare_write(), and commit_write().
|
||||
*
|
||||
* address_space_operation functions return these large constants to indicate
|
||||
* special semantics to the caller. These are much larger than the bytes in a
|
||||
* page to allow for functions that return the number of bytes operated on in a
|
||||
* given page.
|
||||
*/
|
||||
|
||||
enum positive_aop_returns {
|
||||
AOP_WRITEPAGE_ACTIVATE = 0x80000,
|
||||
AOP_TRUNCATED_PAGE = 0x80001,
|
||||
};
|
||||
|
||||
/*
|
||||
* oh the beauties of C type declarations.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user